[gnome-settings-daemon] power: adapt to GnomeRR API changes



commit ddfef4e825edd43418bb25bbed91eb7a794dfbbb
Author: Giovanni Campagna <gcampagn redhat com>
Date:   Thu Aug 8 14:01:50 2013 +0200

    power: adapt to GnomeRR API changes
    
    Reading the backlight from GnomeRR can't fail anymore (although
    -1 can be returned, meaning that XBACKLIGHT is not supported).
    Also, for GnomeRR the value is always a percentage.
    
    We still need to handle min/max in case we use sysfs directly
    (which will be the common case when we move to wayland)
    
    https://bugzilla.gnome.org/show_bug.cgi?id=705507

 plugins/power/gpm-common.c        |   75 ++++++--------------------
 plugins/power/gsd-power-manager.c |  104 ++++++++++++++++++++----------------
 2 files changed, 76 insertions(+), 103 deletions(-)
---
diff --git a/plugins/power/gpm-common.c b/plugins/power/gpm-common.c
index 48927dd..7367fa5 100644
--- a/plugins/power/gpm-common.c
+++ b/plugins/power/gpm-common.c
@@ -1168,10 +1168,8 @@ get_primary_output (GnomeRRScreen *rr_screen)
                 goto out;
 
         for (i = 0; outputs[i] != NULL; i++) {
-                if (gnome_rr_output_is_connected (outputs[i]) &&
-                    gnome_rr_output_is_builtin_display (outputs[i]) &&
-                    gnome_rr_output_get_backlight_min (outputs[i]) >= 0 &&
-                    gnome_rr_output_get_backlight_max (outputs[i]) > 0) {
+                if (gnome_rr_output_is_builtin_display (outputs[i]) &&
+                    gnome_rr_output_get_backlight (outputs[i]) >= 0) {
                         output = outputs[i];
                         break;
                 }
@@ -1394,8 +1392,7 @@ backlight_get_abs (GnomeRRScreen *rr_screen, GError **error)
         /* prefer xbacklight */
         output = get_primary_output (rr_screen);
         if (output != NULL) {
-                return gnome_rr_output_get_backlight (output,
-                                                      error);
+                return gnome_rr_output_get_backlight (output);
         }
 
         /* fall back to the polkit helper */
@@ -1414,13 +1411,10 @@ backlight_get_percentage (GnomeRRScreen *rr_screen, GError **error)
         /* prefer xbacklight */
         output = get_primary_output (rr_screen);
         if (output != NULL) {
-
-                min = gnome_rr_output_get_backlight_min (output);
-                max = gnome_rr_output_get_backlight_max (output);
-                now = gnome_rr_output_get_backlight (output, error);
+                now = gnome_rr_output_get_backlight (output);
                 if (now < 0)
                         goto out;
-                value = ABS_TO_PERCENTAGE (min, max, now);
+                value = ABS_TO_PERCENTAGE (0, 100, now);
                 goto out;
         }
 
@@ -1439,36 +1433,18 @@ out:
 int
 backlight_get_min (GnomeRRScreen *rr_screen)
 {
-        GnomeRROutput *output;
-
-        /* if we have no xbacklight device, then hardcode zero as sysfs
-         * offsets everything to 0 as min */
-        output = get_primary_output (rr_screen);
-        if (output == NULL)
-                return 0;
-
-        /* get xbacklight value, which maybe non-zero */
-        return gnome_rr_output_get_backlight_min (output);
+        return 0;
 }
 
 int
 backlight_get_max (GnomeRRScreen *rr_screen, GError **error)
 {
-        gint value;
         GnomeRROutput *output;
 
         /* prefer xbacklight */
         output = get_primary_output (rr_screen);
-        if (output != NULL) {
-                value = gnome_rr_output_get_backlight_max (output);
-                if (value < 0) {
-                        g_set_error (error,
-                                     GSD_POWER_MANAGER_ERROR,
-                                     GSD_POWER_MANAGER_ERROR_FAILED,
-                                     "failed to get backlight max");
-                }
-                return value;
-        }
+        if (output != NULL)
+                return 100;
 
         /* fall back to the polkit helper */
         return  backlight_helper_get_value ("get-max-brightness", error);
@@ -1487,19 +1463,8 @@ backlight_set_percentage (GnomeRRScreen *rr_screen,
 
         /* prefer xbacklight */
         output = get_primary_output (rr_screen);
-        if (output != NULL) {
-                min = gnome_rr_output_get_backlight_min (output);
-                max = gnome_rr_output_get_backlight_max (output);
-                if (min < 0 || max < 0) {
-                        g_warning ("no xrandr backlight capability");
-                        return ret;
-                }
-                discrete = PERCENTAGE_TO_ABS (min, max, value);
-                ret = gnome_rr_output_set_backlight (output,
-                                                     discrete,
-                                                     error);
-                return ret;
-        }
+        if (output != NULL)
+                return gnome_rr_output_set_backlight (output, value, error);
 
         /* fall back to the polkit helper */
         max = backlight_helper_get_value ("get-max-brightness", error);
@@ -1539,9 +1504,9 @@ backlight_step_up (GnomeRRScreen *rr_screen, GError **error)
                                      gnome_rr_output_get_name (output));
                         return percentage_value;
                 }
-                min = gnome_rr_output_get_backlight_min (output);
-                max = gnome_rr_output_get_backlight_max (output);
-                now = gnome_rr_output_get_backlight (output, error);
+                min = 0;
+                max = 100;
+                now = gnome_rr_output_get_backlight (output);
                 if (now < 0)
                        return percentage_value;
                 step = BRIGHTNESS_STEP_AMOUNT (max - min + 1);
@@ -1598,9 +1563,9 @@ backlight_step_down (GnomeRRScreen *rr_screen, GError **error)
                                      gnome_rr_output_get_name (output));
                         return percentage_value;
                 }
-                min = gnome_rr_output_get_backlight_min (output);
-                max = gnome_rr_output_get_backlight_max (output);
-                now = gnome_rr_output_get_backlight (output, error);
+                min = 0;
+                max = 100;
+                now = gnome_rr_output_get_backlight (output);
                 if (now < 0)
                        return percentage_value;
                 step = BRIGHTNESS_STEP_AMOUNT (max - min + 1);
@@ -1641,12 +1606,8 @@ backlight_set_abs (GnomeRRScreen *rr_screen,
 
         /* prefer xbacklight */
         output = get_primary_output (rr_screen);
-        if (output != NULL) {
-                ret = gnome_rr_output_set_backlight (output,
-                                                     value,
-                                                     error);
-                return ret;
-        }
+        if (output != NULL)
+                return gnome_rr_output_set_backlight (output, value, error);
 
         /* fall back to the polkit helper */
         ret = backlight_helper_set_value ("set-brightness",
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index b5a8c02..c39b319 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -3219,46 +3219,30 @@ logind_proxy_signal_cb (GDBusProxy  *proxy,
         }
 }
 
-gboolean
-gsd_power_manager_start (GsdPowerManager *manager,
-                         GError **error)
+static void
+on_rr_screen_acquired (GObject      *object,
+                       GAsyncResult *result,
+                       gpointer      user_data)
 {
-        g_debug ("Starting power manager");
+        GsdPowerManager *manager = user_data;
+
         gnome_settings_profile_start (NULL);
 
-        /* Check whether we have a lid first */
-        manager->priv->up_client = up_client_new ();
-        manager->priv->lid_is_present = up_client_get_lid_is_present (manager->priv->up_client);
-        if (manager->priv->lid_is_present)
-                manager->priv->lid_is_closed = up_client_get_lid_is_closed (manager->priv->up_client);
+        manager->priv->rr_screen = gnome_rr_screen_new_finish (result, NULL);
 
-        /* coldplug the list of screens */
-        manager->priv->rr_screen = gnome_rr_screen_new (gdk_screen_get_default (), error);
-        if (manager->priv->rr_screen == NULL) {
-                g_debug ("Couldn't detect any screens, disabling plugin");
-                return FALSE;
+        /* set up the screens */
+        if (manager->priv->lid_is_present) {
+                g_signal_connect (manager->priv->rr_screen, "changed", G_CALLBACK (on_randr_event), manager);
+                watch_external_monitor (manager->priv->rr_screen);
+                on_randr_event (manager->priv->rr_screen, manager);
         }
 
-        /* Check for XTEST support */
-        if (supports_xtest () == FALSE) {
-                g_debug ("XTEST extension required, disabling plugin");
-                return FALSE;
-        }
+        /* check whether a backlight is available */
+        manager->priv->backlight_available = backlight_available (manager->priv->rr_screen);
+
+        /* ensure the default dpms timeouts are cleared */
+        backlight_enable (manager);
 
-        /* Set up the logind proxy */
-        manager->priv->logind_proxy =
-                g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
-                                               0,
-                                               NULL,
-                                               SYSTEMD_DBUS_NAME,
-                                               SYSTEMD_DBUS_PATH,
-                                               SYSTEMD_DBUS_INTERFACE,
-                                               NULL,
-                                               error);
-        if (manager->priv->logind_proxy == NULL) {
-                g_debug ("No systemd (logind) support, disabling plugin");
-                return FALSE;
-        }
         g_signal_connect (manager->priv->logind_proxy, "g-signal",
                           G_CALLBACK (logind_proxy_signal_cb),
                           manager);
@@ -3355,19 +3339,6 @@ gsd_power_manager_start (GsdPowerManager *manager,
         /* create IDLETIME watcher */
         manager->priv->idle_monitor = gnome_idle_monitor_new ();
 
-        /* set up the screens */
-        if (manager->priv->lid_is_present) {
-                g_signal_connect (manager->priv->rr_screen, "changed", G_CALLBACK (on_randr_event), manager);
-                watch_external_monitor (manager->priv->rr_screen);
-                on_randr_event (manager->priv->rr_screen, manager);
-        }
-
-        /* check whether a backlight is available */
-        manager->priv->backlight_available = backlight_available (manager->priv->rr_screen);
-
-        /* ensure the default dpms timeouts are cleared */
-        backlight_enable (manager);
-
         /* coldplug the engine */
         engine_coldplug (manager);
         idle_configure (manager);
@@ -3378,6 +3349,47 @@ gsd_power_manager_start (GsdPowerManager *manager,
         manager->priv->is_virtual_machine = gsd_power_is_hardware_a_vm ();
 
         gnome_settings_profile_end (NULL);
+}
+
+gboolean
+gsd_power_manager_start (GsdPowerManager *manager,
+                         GError **error)
+{
+        g_debug ("Starting power manager");
+        gnome_settings_profile_start (NULL);
+
+        /* Check whether we have a lid first */
+        manager->priv->up_client = up_client_new ();
+        manager->priv->lid_is_present = up_client_get_lid_is_present (manager->priv->up_client);
+        if (manager->priv->lid_is_present)
+                manager->priv->lid_is_closed = up_client_get_lid_is_closed (manager->priv->up_client);
+
+        /* Set up the logind proxy */
+        manager->priv->logind_proxy =
+                g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                               0,
+                                               NULL,
+                                               SYSTEMD_DBUS_NAME,
+                                               SYSTEMD_DBUS_PATH,
+                                               SYSTEMD_DBUS_INTERFACE,
+                                               NULL,
+                                               error);
+        if (manager->priv->logind_proxy == NULL) {
+                g_debug ("No systemd (logind) support, disabling plugin");
+                return FALSE;
+        }
+
+        /* Check for XTEST support */
+        if (supports_xtest () == FALSE) {
+                g_debug ("XTEST extension required, disabling plugin");
+                return FALSE;
+        }
+
+        /* coldplug the list of screens */
+        gnome_rr_screen_new_async (gdk_screen_get_default (),
+                                   on_rr_screen_acquired, manager);
+
+        gnome_settings_profile_end (NULL);
         return TRUE;
 }
 


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