[gnome-session] manager: don't ever show inhibitor dialog if logout is forced



commit bf1b6e8843b5e72d4f5a62a34eb322b82e33c2df
Author: Ray Strode <rstrode redhat com>
Date:   Sun Nov 7 11:49:33 2010 -0500

    manager: don't ever show inhibitor dialog if logout is forced
    
    If logout is forced, we don't want to show the inhibitor dialog.
    A forced logout is one that shouldn't be "cancelable".
    
    This commit prevents inhibitors from getting added if logout is
    forced.

 gnome-session/gsm-manager.c |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)
---
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index c85cea6..d15402f 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -1193,6 +1193,12 @@ _on_query_end_session_timeout (GsmManager *manager)
                 g_warning ("Client '%s' failed to reply before timeout",
                            gsm_client_peek_id (l->data));
 
+                /* Don't add "not responding" inhibitors if logout is forced
+                 */
+                if (manager->priv->forceful_logout) {
+                        continue;
+                }
+
                 /* Add JIT inhibit for unresponsive client */
                 if (GSM_IS_DBUS_CLIENT (l->data)) {
                         bus_name = gsm_dbus_client_get_bus_name (l->data);
@@ -1248,8 +1254,8 @@ do_phase_query_end_session (GsmManager *manager)
                            (GsmStoreFunc)_client_query_end_session,
                            &data);
 
-        /* This phase doesn't time out. This separate timer is only used to
-         * show UI. */
+        /* This phase doesn't time out unless logout is forced. Typically, this
+         * separate timer is only used to show UI. */
         manager->priv->query_timeout_id = g_timeout_add_seconds (1, (GSourceFunc)_on_query_end_session_timeout, manager);
 }
 
@@ -1877,7 +1883,7 @@ on_client_end_session_response (GsmClient  *client,
 
         manager->priv->query_clients = g_slist_remove (manager->priv->query_clients, client);
 
-        if (! is_ok) {
+        if (! is_ok && !manager->priv->forceful_logout) {
                 guint         cookie;
                 GsmInhibitor *inhibitor;
                 char         *app_id;
@@ -3172,6 +3178,18 @@ gsm_manager_inhibit (GsmManager            *manager,
                  reason,
                  flags);
 
+        if (manager->priv->forceful_logout) {
+                GError *new_error;
+
+                new_error = g_error_new (GSM_MANAGER_ERROR,
+                                         GSM_MANAGER_ERROR_GENERAL,
+                                         "Forced logout cannot be inhibited");
+                g_debug ("GsmManager: Unable to inhibit: %s", new_error->message);
+                dbus_g_method_return_error (context, new_error);
+                g_error_free (new_error);
+                return FALSE;
+        }
+
         if (IS_STRING_EMPTY (app_id)) {
                 GError *new_error;
 



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