summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2009-02-07 21:17:49 -0500
committerRay Strode <rstrode@redhat.com>2009-04-17 10:24:49 -0400
commitff3ec0b56e8343b86eec5edf9399ff12826cf861 (patch)
tree95d4fb922024b495fef3443ac5f2fe7825b0dc6b
parent5231302bd0b9611984639530884b14e6400e786f (diff)
downloadgdm-ff3ec0b56e8343b86eec5edf9399ff12826cf861.tar.gz
Force session reset if all PAM conversations fail
-rw-r--r--gui/simple-greeter/gdm-greeter-login-window.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c
index 2e9a1a01..92a4c85b 100644
--- a/gui/simple-greeter/gdm-greeter-login-window.c
+++ b/gui/simple-greeter/gdm-greeter-login-window.c
@@ -810,15 +810,21 @@ reset_dialog (GdmGreeterLoginWindow *login_window)
}
static void
-do_cancel (GdmGreeterLoginWindow *login_window)
+restart_conversations (GdmGreeterLoginWindow *login_window)
{
- /* need to wait for response from backend */
- set_message (login_window, _("Cancelling..."));
set_busy (login_window);
set_sensitive (login_window, FALSE);
g_signal_emit (login_window, signals[CANCELLED], 0);
}
+static void
+do_cancel (GdmGreeterLoginWindow *login_window)
+{
+ /* need to wait for response from backend */
+ set_message (login_window, _("Cancelling..."));
+ restart_conversations (login_window);
+}
+
gboolean
gdm_greeter_login_window_ready (GdmGreeterLoginWindow *login_window,
const char *service_name)
@@ -864,6 +870,16 @@ gdm_greeter_login_window_conversation_stopped (GdmGreeterLoginWindow *login_wind
g_object_unref (task);
}
+ /* If every conversation has failed, then just start over.
+ */
+ task = gdm_task_list_get_active_task (GDM_TASK_LIST (login_window->priv->conversation_list));
+
+ if (!gdm_task_is_enabled (task)) {
+ g_debug ("GdmGreeterLoginWindow: No conversations left, starting over");
+ restart_conversations (login_window);
+ }
+ g_object_unref (task);
+
return TRUE;
}