[gnome-settings-daemon] power: Monitor org.freedesktop.UPower.KbdBacklight.BrightnessChangedWithSource signal



commit 47c6a077b6d611433f1151b81f97bce9b178e3cf
Author: Hans de Goede <hdegoede redhat com>
Date:   Sat Oct 15 17:25:39 2016 +0200

    power: Monitor org.freedesktop.UPower.KbdBacklight.BrightnessChangedWithSource signal
    
    Monitor org.freedesktop.UPower.KbdBacklight.BrightnessChangedWithSource signal.
    Along with kernel[1] and upower[2] changes, this will make the slider in the
    Power Settings panel respond to brightness changes caused by pressing
    backlight buttons that change the brightness directly.
    
    [1] https://patchwork.kernel.org/patch/9544111/
    [2] https://bugs.freedesktop.org/show_bug.cgi?id=98404
    
    https://bugzilla.gnome.org/show_bug.cgi?id=773403

 plugins/power/gsd-power-manager.c |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index f6d32b6..6e6b945 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -1461,6 +1461,35 @@ kbd_backlight_dim (GsdPowerManager *manager,
         return TRUE;
 }
 
+static void
+upower_kbd_proxy_signal_cb (GDBusProxy  *proxy,
+                            const gchar *sender_name,
+                            const gchar *signal_name,
+                            GVariant    *parameters,
+                            gpointer     user_data)
+{
+        GsdPowerManager *manager = GSD_POWER_MANAGER (user_data);
+        gint brightness, percentage;
+        const gchar *source;
+
+        if (g_strcmp0 (signal_name, "BrightnessChangedWithSource") != 0)
+                return;
+
+        g_variant_get (parameters, "(i&s)", &brightness, &source);
+
+        /* Ignore changes caused by us calling UPower's SetBrightness method,
+         * we already call backlight_iface_emit_changed for these after the
+         * SetBrightness method call completes. */
+        if (g_strcmp0 (source, "external") == 0)
+                return;
+
+        manager->priv->kbd_brightness_now = brightness;
+        percentage = ABS_TO_PERCENTAGE (0,
+                                        manager->priv->kbd_brightness_max,
+                                        manager->priv->kbd_brightness_now);
+        backlight_iface_emit_changed (manager, GSD_POWER_DBUS_INTERFACE_KEYBOARD, percentage);
+}
+
 static gboolean
 is_session_active (GsdPowerManager *manager)
 {
@@ -1962,6 +1991,10 @@ power_keyboard_proxy_ready_cb (GObject             *source_object,
                 goto out;
         }
 
+        g_signal_connect (manager->priv->upower_kbd_proxy, "g-signal",
+                          G_CALLBACK (upower_kbd_proxy_signal_cb),
+                          manager);
+
         k_now = g_dbus_proxy_call_sync (manager->priv->upower_kbd_proxy,
                                         "GetBrightness",
                                         NULL,


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