[gnome-settings-daemon] power: Do not handle the idle state transaction when the session is not active



commit ebd3bcf01333ac6fac21aea5cd564759cd6eafa0
Author: Richard Hughes <richard hughsie com>
Date:   Mon Sep 12 10:49:29 2011 +0100

    power: Do not handle the idle state transaction when the session is not active
    
    Resolves https://bugzilla.gnome.org/show_bug.cgi?id=658568

 plugins/power/gsd-power-manager.c |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 deletions(-)
---
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 1192be7..1d1e6ef 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -37,6 +37,7 @@
 #include "gpm-phone.h"
 #include "gpm-idletime.h"
 #include "gnome-settings-profile.h"
+#include "gnome-settings-session.h"
 #include "gsd-enums.h"
 #include "gsd-power-manager.h"
 
@@ -146,6 +147,7 @@ typedef enum {
 
 struct GsdPowerManagerPrivate
 {
+        GnomeSettingsSession    *session;
         gboolean                 lid_is_closed;
         GSettings               *settings;
         GSettings               *settings_screensaver;
@@ -2604,10 +2606,19 @@ idle_set_mode (GsdPowerManager *manager, GsdPowerIdleMode mode)
         gint max;
         gint now;
         GsdPowerActionType action_type;
+        GnomeSettingsSessionState state;
 
         if (mode == manager->priv->current_idle_mode)
                 return;
 
+        /* ensure we're still on an active console */
+        state = gnome_settings_session_get_state (manager->priv->session);
+        if (state == GNOME_SETTINGS_SESSION_STATE_INACTIVE) {
+                g_debug ("ignoring state transition to %s as inactive",
+                         idle_mode_to_string (mode));
+                return;
+        }
+
         manager->priv->current_idle_mode = mode;
         g_debug ("Doing a state transition: %s", idle_mode_to_string (mode));
 
@@ -3222,6 +3233,16 @@ engine_settings_key_changed_cb (GSettings *settings,
         }
 }
 
+static void
+engine_session_active_changed_cb (GnomeSettingsSession *session,
+                                  GParamSpec *pspec,
+                                  GsdPowerManager *manager)
+{
+        /* when doing the fast-user-switch into a new account,
+         * ensure the new account is undimmed and with the backlight on */
+        idle_set_mode (manager, GSD_POWER_IDLE_MODE_NORMAL);
+}
+
 gboolean
 gsd_power_manager_start (GsdPowerManager *manager,
                          GError **error)
@@ -3229,6 +3250,12 @@ gsd_power_manager_start (GsdPowerManager *manager,
         g_debug ("Starting power manager");
         gnome_settings_profile_start (NULL);
 
+        /* track the active session */
+        manager->priv->session = gnome_settings_session_new ();
+        g_signal_connect (manager->priv->session, "notify::state",
+                          G_CALLBACK (engine_session_active_changed_cb),
+                          manager);
+
         manager->priv->kbd_brightness_old = -1;
         manager->priv->pre_dim_brightness = 100;
         manager->priv->settings = g_settings_new (GSD_POWER_SETTINGS_SCHEMA);
@@ -3396,6 +3423,7 @@ gsd_power_manager_stop (GsdPowerManager *manager)
         if (manager->priv->timeout_sleep_id != 0)
                 g_source_remove (manager->priv->timeout_sleep_id);
 
+        g_object_unref (manager->priv->session);
         g_object_unref (manager->priv->settings);
         g_object_unref (manager->priv->settings_screensaver);
         g_object_unref (manager->priv->up_client);



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