[gnome-shell/wip/rstrode/login-screen-extensions: 104/134] introspect: Add AnimationsEnabled property




commit ee773d78fd3c2fce270a9d14a6a2342d9993ea84
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Tue Oct 1 12:07:03 2019 +0200

    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

 .../dbus-interfaces/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 9508681af1..d71f2414b2 100644
--- a/data/dbus-interfaces/org.gnome.Shell.Introspect.xml
+++ b/data/dbus-interfaces/org.gnome.Shell.Introspect.xml
@@ -57,5 +57,19 @@
     <method name="GetWindows">
       <arg name="windows" direction="out" type="a{ta{sv}}" />
     </method>
+
+    <!--
+       AnimationsEnabled:
+       @short_description: Whether the shell animations are enabled
+
+       By default determined by the org.gnome.desktop.interface enable-animations
+       gsetting, but may be overridden, e.g. if there is an active screen cast or
+       remote desktop session that asked for animations to be disabled.
+
+       Since: 2
+    -->
+    <property name="AnimationsEnabled" type="b" access="read"/>
+
+    <property name="version" type="u" access="read"/>
   </interface>
 </node>
diff --git a/js/misc/introspect.js b/js/misc/introspect.js
index 8e68a7e4f3..7c62113e5c 100644
--- a/js/misc/introspect.js
+++ b/js/misc/introspect.js
@@ -1,9 +1,11 @@
-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');
@@ -21,6 +23,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',
@@ -50,6 +53,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;
+    }
 };


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