diff options
author | Ray Strode <rstrode@redhat.com> | 2008-03-09 21:31:59 +0000 |
---|---|---|
committer | Ray Strode <halfline@src.gnome.org> | 2008-03-09 21:31:59 +0000 |
commit | 63dc8ada4c8a4b11e9eb3c4cfa19e5824b65b21a (patch) | |
tree | f80d60dbba960b37349b10970c21b40ef138dfd5 /gui/simple-greeter/gdm-greeter-session.c | |
parent | cd7910815979882797a20bcd9e9500c999c34e1f (diff) | |
download | gdm-63dc8ada4c8a4b11e9eb3c4cfa19e5824b65b21a.tar.gz |
Add new "interactive" signal to login window which is emitted when the
2008-03-09 Ray Strode <rstrode@redhat.com>
* gui/simple-greeter/gdm-greeter-login-window.[ch]:
(on_login_button_clicked_answer_query):
(gdm_greeter_login_window_class_init):
* gui/simple-greeter/gdm-greeter-session.c:
(GdmGreeterSessionPrivate), (on_reset),
(on_interactive), (toggle_login_window):
Add new "interactive" signal to login window which is
emitted when the user has had an opportunity to interact
with session / language choosers. Have greeter session
watch for this signal to decide when to tell the slave
when to proceed with starting the session
svn path=/trunk/; revision=5969
Diffstat (limited to 'gui/simple-greeter/gdm-greeter-session.c')
-rw-r--r-- | gui/simple-greeter/gdm-greeter-session.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c index 47a63a71..4f625c50 100644 --- a/gui/simple-greeter/gdm-greeter-session.c +++ b/gui/simple-greeter/gdm-greeter-session.c @@ -63,6 +63,8 @@ struct GdmGreeterSessionPrivate GtkWidget *login_window; GtkWidget *panel; + + guint was_interactive : 1; }; enum { @@ -114,6 +116,8 @@ on_reset (GdmGreeterClient *client, gdm_greeter_panel_reset (GDM_GREETER_PANEL (session->priv->panel)); gdm_greeter_login_window_reset (GDM_GREETER_LOGIN_WINDOW (session->priv->login_window)); + + session->priv->was_interactive = FALSE; } static void @@ -238,6 +242,24 @@ on_disconnected (GdmGreeterLoginWindow *login_window, } static void +on_interactive (GdmGreeterLoginWindow *login_window, + GdmGreeterSession *session) +{ + if (!session->priv->was_interactive) { + g_debug ("GdmGreeterSession: session was interactive\n"); + + /* We've blocked the UI already for the user to answer a question, + * so we know they've had an opportunity to interact with + * language chooser session selector, etc, and we can start the + * session right away. + */ + gdm_greeter_client_call_start_session_when_ready (session->priv->client, + TRUE); + session->priv->was_interactive = TRUE; + } +} + +static void toggle_panel (GdmSessionManager *manager, gboolean enabled, GdmGreeterSession *session) @@ -302,6 +324,10 @@ toggle_login_window (GdmSessionManager *manager, "disconnected", G_CALLBACK (on_disconnected), session); + g_signal_connect (session->priv->login_window, + "interactive", + G_CALLBACK (on_interactive), + session); gtk_widget_show (session->priv->login_window); } else { gtk_widget_destroy (session->priv->login_window); |