[gnome-settings-daemon] power: adapt to GnomeRR API changes
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] power: adapt to GnomeRR API changes
- Date: Mon, 19 Aug 2013 07:53:55 +0000 (UTC)
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]