diff options
-rw-r--r-- | mate-session/gsm-manager.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c index 01ebac4..2af0902 100644 --- a/mate-session/gsm-manager.c +++ b/mate-session/gsm-manager.c @@ -1394,6 +1394,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); @@ -1449,8 +1455,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); } @@ -2102,7 +2108,7 @@ _handle_client_end_session_response (GsmManager *manager, 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; @@ -3546,6 +3552,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; |