From 9ab0071aa5e990dc86f4796a5504d16f0066c390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Tue, 1 Oct 2019 12:07:03 +0200 Subject: [PATCH] introspect: Add AnimationsEnabled property While the gsetting is available for all who needs it, the Shell might override it given various hueristics. Expose the decision made by the Shell via a new property. Intended to be used by gsd-xsettings as well as xdg-desktop-portal-gtk. This also add a version property to the API, so that semi external services (xdg-desktop-portal-gtk) can detect what API is expected to be present. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/757 --- .../org.gnome.Shell.Introspect.xml | 14 ++++++++++ js/misc/introspect.js | 27 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/data/dbus-interfaces/org.gnome.Shell.Introspect.xml b/data/dbus-interfaces/org.gnome.Shell.Introspect.xml index 9508681af..d71f2414b 100644 --- a/data/dbus-interfaces/org.gnome.Shell.Introspect.xml +++ b/data/dbus-interfaces/org.gnome.Shell.Introspect.xml @@ -57,5 +57,19 @@ + + + + + diff --git a/js/misc/introspect.js b/js/misc/introspect.js index 754987eb5..e592fb3cf 100644 --- a/js/misc/introspect.js +++ b/js/misc/introspect.js @@ -1,10 +1,12 @@ /* exported IntrospectService */ -const { Gio, GLib, Meta, Shell } = imports.gi; +const { Gio, GLib, Meta, Shell, St } = imports.gi; const INTROSPECT_SCHEMA = 'org.gnome.shell'; const INTROSPECT_KEY = 'introspect'; const APP_WHITELIST = ['org.freedesktop.impl.portal.desktop.gtk']; +const INTROSPECT_DBUS_API_VERSION = 2; + const { loadInterfaceXML } = imports.misc.fileUtils; const IntrospectDBusIface = loadInterfaceXML('org.gnome.Shell.Introspect'); @@ -22,6 +24,7 @@ var IntrospectService = class { this._runningApplicationsDirty = true; this._activeApplication = null; this._activeApplicationDirty = true; + this._animationsEnabled = true; this._appSystem = Shell.AppSystem.get_default(); this._appSystem.connect('app-state-changed', @@ -51,6 +54,11 @@ var IntrospectService = class { (conn, name, owner) => this._whitelistMap.set(name, owner), (conn, name) => this._whitelistMap.delete(name)); }); + + this._settings = St.Settings.get(); + this._settings.connect('notify::enable-animations', + this._syncAnimationsEnabled.bind(this)); + this._syncAnimationsEnabled(); } _isStandaloneApp(app) { @@ -191,4 +199,21 @@ var IntrospectService = class { } invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList])); } + + _syncAnimationsEnabled() { + let wasAnimationsEnabled = this._animationsEnabled; + this._animationsEnabled = this._settings.enable_animations; + if (wasAnimationsEnabled !== this._animationsEnabled) { + let variant = new GLib.Variant('b', this._animationsEnabled); + this._dbusImpl.emit_property_changed('AnimationsEnabled', variant); + } + } + + get AnimationsEnabled() { + return this._animationsEnabled; + } + + get version() { + return INTROSPECT_DBUS_API_VERSION; + } };