summaryrefslogtreecommitdiff
path: root/gui/simple-greeter/gdm-greeter-session.c
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-03-09 21:31:59 +0000
committerRay Strode <halfline@src.gnome.org>2008-03-09 21:31:59 +0000
commit63dc8ada4c8a4b11e9eb3c4cfa19e5824b65b21a (patch)
treef80d60dbba960b37349b10970c21b40ef138dfd5 /gui/simple-greeter/gdm-greeter-session.c
parentcd7910815979882797a20bcd9e9500c999c34e1f (diff)
downloadgdm-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.c26
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);