summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2013-03-21 13:42:05 (GMT)
committerBastien Nocera <hadess@hadess.net>2013-04-16 13:29:23 (GMT)
commitd491ebf6325fd1883e5fa81ee0f5daa7eb281c3b (patch)
tree8eaaf1b79b640b94c1fd01690c9c1dd9333f25a9
parentc346fc79814afc9a73c543e3ae0b656be641fb23 (diff)
downloadgnome-settings-daemon-d491ebf6325fd1883e5fa81ee0f5daa7eb281c3b.zip
gnome-settings-daemon-d491ebf6325fd1883e5fa81ee0f5daa7eb281c3b.tar.xz
power: Don't look for screens if we don't have a lid
We don't need to know about external screens being present when we don't have any lid. https://bugzilla.gnome.org/show_bug.cgi?id=696291
-rw-r--r--plugins/power/gsd-power-manager.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 2c8b6ed..076c52c 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -172,6 +172,7 @@ struct GsdPowerManagerPrivate
gboolean screensaver_active;
/* State */
+ gboolean lid_is_present;
gboolean lid_is_closed;
UpClient *up_client;
gchar *previous_summary;
@@ -2290,7 +2291,10 @@ up_client_changed_cb (UpClient *client, GsdPowerManager *manager)
main_battery_or_ups_low_changed (manager, FALSE);
}
- /* same state */
+ if (!manager->priv->lid_is_present)
+ return;
+
+ /* same lid state */
tmp = up_client_get_lid_is_closed (manager->priv->up_client);
if (manager->priv->lid_is_closed == tmp)
return;
@@ -3406,11 +3410,19 @@ gsd_power_manager_start (GsdPowerManager *manager,
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);
+
/* 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;
+ if (manager->priv->lid_is_present) {
+ manager->priv->rr_screen = gnome_rr_screen_new (gdk_screen_get_default (), error);
+ if (manager->priv->rr_screen == NULL) {
+ g_debug ("Lid is present and couldn't detect any screens, disabling plugin");
+ return FALSE;
+ }
}
/* Check for XTEST support */
@@ -3456,8 +3468,6 @@ gsd_power_manager_start (GsdPowerManager *manager,
g_signal_connect (manager->priv->settings_session, "changed",
G_CALLBACK (engine_settings_key_changed_cb), manager);
manager->priv->settings_xrandr = g_settings_new (GSD_XRANDR_SETTINGS_SCHEMA);
- manager->priv->up_client = up_client_new ();
- manager->priv->lid_is_closed = up_client_get_lid_is_closed (manager->priv->up_client);
g_signal_connect (manager->priv->up_client, "device-added",
G_CALLBACK (engine_device_added_cb), manager);
g_signal_connect (manager->priv->up_client, "device-removed",
@@ -3536,8 +3546,10 @@ gsd_power_manager_start (GsdPowerManager *manager,
manager->priv->idle_monitor = gnome_idle_monitor_new ();
/* set up the screens */
- g_signal_connect (manager->priv->rr_screen, "changed", G_CALLBACK (on_randr_event), manager);
- on_randr_event (manager->priv->rr_screen, manager);
+ if (manager->priv->rr_screen) {
+ g_signal_connect (manager->priv->rr_screen, "changed", G_CALLBACK (on_randr_event), manager);
+ on_randr_event (manager->priv->rr_screen, manager);
+ }
#ifdef GSD_MOCK
g_unix_signal_add (SIGUSR2, (GSourceFunc) received_sigusr2, manager);