[gnome-shell] systemActions: Create SensorProxy unconditionally



commit 928b49705ffad93845a71648b0ad2ca9874fa8cc
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Jun 15 16:31:53 2019 +0200

    systemActions: Create SensorProxy unconditionally
    
    When plugging in a device with sensors that are unsupported by
    iio-sensor-proxy, the proxy may quit so fast that the name disappears
    from the bus before we get to construct the SensorProxy in response
    to the name-appeared handler, resulting in the following warning:
    
    JS ERROR: TypeError: this._sensorProxy is null
    _sensorProxyAppeared/this._sensorProxy<@resource:///org/gnome/shell/misc/systemActions.js:217:17
    _makeProxyWrapper/</<@resource:///org/gnome/gjs/modules/overrides/Gio.js:243:21
    
    Address this by creating the proxy unconditionally instead of monitoring
    the bus name, and using the g-name-owner property to determine whether
    iio-sensor-proxy is active.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/1357

 js/misc/systemActions.js | 37 ++++++++++++++++---------------------
 1 file changed, 16 insertions(+), 21 deletions(-)
---
diff --git a/js/misc/systemActions.js b/js/misc/systemActions.js
index 7ab200a455..d86935f4d1 100644
--- a/js/misc/systemActions.js
+++ b/js/misc/systemActions.js
@@ -174,13 +174,21 @@ const SystemActions = GObject.registerClass({
                                           });
         Main.layoutManager.connect('monitors-changed',
                                    () => this._updateOrientationLock());
-        Gio.DBus.system.watch_name(SENSOR_BUS_NAME,
-                                   Gio.BusNameWatcherFlags.NONE,
-                                   () => this._sensorProxyAppeared(),
-                                   () => {
-                                       this._sensorProxy = null;
-                                       this._updateOrientationLock();
-                                   });
+        this._sensorProxy = new SensorProxy(Gio.DBus.system,
+            SENSOR_BUS_NAME,
+            SENSOR_OBJECT_PATH,
+            (proxy, error)  => {
+                if (error)
+                    log(error.message);
+            },
+            null,
+            Gio.DBusProxyFlags.DO_NOT_AUTO_START);
+        this._sensorProxy.connect('g-properties-changed', () => {
+            this._updateOrientationLock();
+        });
+        this._sensorProxy.connect('notify::g-name-owner', () => {
+            this._updateOrientationLock();
+        });
         this._updateOrientationLock();
         this._updateOrientationLockIcon();
 
@@ -223,22 +231,9 @@ const SystemActions = GObject.registerClass({
         return this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName;
     }
 
-    _sensorProxyAppeared() {
-        this._sensorProxy = new SensorProxy(Gio.DBus.system, SENSOR_BUS_NAME, SENSOR_OBJECT_PATH,
-            (proxy, error)  => {
-                if (error) {
-                    log(error.message);
-                    return;
-                }
-                this._sensorProxy.connect('g-properties-changed',
-                                          () => this._updateOrientationLock());
-                this._updateOrientationLock();
-            });
-    }
-
     _updateOrientationLock() {
         let available = false;
-        if (this._sensorProxy)
+        if (this._sensorProxy.g_name_owner)
             available = this._sensorProxy.HasAccelerometer &&
                         this._monitorManager.get_is_builtin_display_on();
 


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