[gnome-shell] status/nightLight: Use promise to initialize proxy



commit 80e4ae7d7f996361b77f1e20d1553d3c2a7d1cc2
Author: Florian Müllner <fmuellner gnome org>
Date:   Sun Jul 24 20:12:54 2022 +0200

    status/nightLight: Use promise to initialize proxy
    
    There's no good reason for waiting for the proxy to be initialized
    to connect signals. In fact, connecting the signal beforehand
    ensures that the handler is in place when the proxy fetches the
    properties, so we don't have to call the handler explicitly.
    
    That in turn will allow us in a follow-up to rely on the signal
    parameters to only process changed properties.
    
    To achieve that, construct the proxy manually, and then initialize
    it asynchronously in a Promise.
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>

 js/ui/status/nightLight.js | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)
---
diff --git a/js/ui/status/nightLight.js b/js/ui/status/nightLight.js
index c595c3da02..109fe67912 100644
--- a/js/ui/status/nightLight.js
+++ b/js/ui/status/nightLight.js
@@ -1,7 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported Indicator */
 
-const { Gio, GObject } = imports.gi;
+const {Gio, GLib, GObject} = imports.gi;
 
 const Main = imports.ui.main;
 const PanelMenu = imports.ui.panelMenu;
@@ -13,7 +13,7 @@ const BUS_NAME = 'org.gnome.SettingsDaemon.Color';
 const OBJECT_PATH = '/org/gnome/SettingsDaemon/Color';
 
 const ColorInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Color');
-const ColorProxy = Gio.DBusProxy.makeProxyWrapper(ColorInterface);
+const colorInfo = Gio.DBusInterfaceInfo.new_for_xml(ColorInterface);
 
 var Indicator = GObject.registerClass(
 class Indicator extends PanelMenu.SystemIndicator {
@@ -22,16 +22,17 @@ class Indicator extends PanelMenu.SystemIndicator {
 
         this._indicator = this._addIndicator();
         this._indicator.icon_name = 'night-light-symbolic';
-        this._proxy = new ColorProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
-                                     (proxy, error) => {
-                                         if (error) {
-                                             log(error.message);
-                                             return;
-                                         }
-                                         this._proxy.connect('g-properties-changed',
-                                                             this._sync.bind(this));
-                                         this._sync();
-                                     });
+
+        this._proxy = new Gio.DBusProxy({
+            g_connection: Gio.DBus.session,
+            g_name: BUS_NAME,
+            g_object_path: OBJECT_PATH,
+            g_interface_name: colorInfo.name,
+            g_interface_info: colorInfo,
+        });
+        this._proxy.connect('g-properties-changed', () => this._sync());
+        this._proxy.init_async(GLib.PRIORITY_DEFAULT, null)
+            .catch(e => console.error(e.message));
 
         this._item = new PopupMenu.PopupSubMenuMenuItem("", true);
         this._item.icon.icon_name = 'night-light-symbolic';


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