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
This commit is contained in:
Florian Müllner 2020-03-05 18:01:38 +01:00
parent a90fcb7ddb
commit 512862f2d7

View File

@ -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) });
}