[gnome-shell] extensionPrefs: Export parent window for prefs dialog



commit 512862f2d7599b43c0f7df9d5a39b64f9536b65f
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Mar 5 18:01:38 2020 +0100

    extensionPrefs: Export parent window for prefs dialog
    
    Now that OpenExtensionPrefs()'s parentWindow parameter is actually
    supported, export the main application window so it can act as
    transient parent to the prefs dialog.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1087

 js/extensionPrefs/js/main.js | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)
---
diff --git a/js/extensionPrefs/js/main.js b/js/extensionPrefs/js/main.js
index c4bb4fa5af..d25df9c576 100644
--- a/js/extensionPrefs/js/main.js
+++ b/js/extensionPrefs/js/main.js
@@ -4,7 +4,7 @@ imports.gi.versions.Gtk = '3.0';
 
 const Gettext = imports.gettext;
 const Package = imports.package;
-const { Gdk, GLib, Gio, GObject, Gtk } = imports.gi;
+const { Gdk, GLib, Gio, GObject, Gtk, Shew } = imports.gi;
 
 Package.initFormat();
 
@@ -15,6 +15,8 @@ const { ExtensionState, ExtensionType } = ExtensionUtils;
 const GnomeShellIface = loadInterfaceXML('org.gnome.Shell.Extensions');
 const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
 
+Gio._promisify(Shew.WindowExporter.prototype, 'export', 'export_finish');
+
 function loadInterfaceXML(iface) {
     const uri = 'resource:///org/gnome/Extensions/dbus-interfaces/%s.xml'.format(iface);
     const f = Gio.File.new_for_uri(uri);
@@ -89,6 +91,9 @@ var ExtensionsWindow = GObject.registerClass({
 
         this._updatesCheckId = 0;
 
+        this._exporter = new Shew.WindowExporter({ window: this });
+        this._exportedHandle = '';
+
         this._mainBox.set_focus_vadjustment(this._scrolledWindow.vadjustment);
 
         let action;
@@ -152,9 +157,17 @@ var ExtensionsWindow = GObject.registerClass({
         dialog.present();
     }
 
-    openPrefs(uuid) {
+    async openPrefs(uuid) {
+        if (!this._exportedHandle) {
+            try {
+                this._exportedHandle = await this._exporter.export();
+            } catch (e) {
+                log('Failed to export window: %s'.format(e.message));
+            }
+        }
+
         this._shellProxy.OpenExtensionPrefsRemote(uuid,
-            '',
+            this._exportedHandle,
             { modal: new GLib.Variant('b', true) });
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]