diff options
| author | Bastien Nocera <hadess@hadess.net> | 2013-03-21 13:42:05 (GMT) |
|---|---|---|
| committer | Bastien Nocera <hadess@hadess.net> | 2013-04-16 13:29:23 (GMT) |
| commit | d491ebf6325fd1883e5fa81ee0f5daa7eb281c3b (patch) | |
| tree | 8eaaf1b79b640b94c1fd01690c9c1dd9333f25a9 | |
| parent | c346fc79814afc9a73c543e3ae0b656be641fb23 (diff) | |
| download | gnome-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.c | 30 |
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); |