From 512862f2d7599b43c0f7df9d5a39b64f9536b65f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 5 Mar 2020 18:01:38 +0100 Subject: [PATCH] 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 c4bb4fa5a..d25df9c57 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) }); }