gdm r5977 - in trunk: . gui/simple-greeter



Author: halfline
Date: Sun Mar  9 21:59:57 2008
New Revision: 5977
URL: http://svn.gnome.org/viewvc/gdm?rev=5977&view=rev

Log:
2008-03-09  Ray Strode  <rstrode redhat com>

	* gui/simple-greeter/gdm-greeter-login-window.[ch]:
	(do_cancel), (gdm_greeter_login_window_start_when_ready),
	(gdm_greeter_login_window_class_init):
	add new "start-session" to replace "interactive" from before
	* gui/simple-greeter/gdm-greeter-session.c:
	(on_start_session), (toggle_login_window):
	Tell slave to start session when login window is ready for
	the session to be started.


Modified:
   trunk/ChangeLog
   trunk/gui/simple-greeter/gdm-greeter-login-window.c
   trunk/gui/simple-greeter/gdm-greeter-login-window.h
   trunk/gui/simple-greeter/gdm-greeter-session.c

Modified: trunk/gui/simple-greeter/gdm-greeter-login-window.c
==============================================================================
--- trunk/gui/simple-greeter/gdm-greeter-login-window.c	(original)
+++ trunk/gui/simple-greeter/gdm-greeter-login-window.c	Sun Mar  9 21:59:57 2008
@@ -129,6 +129,7 @@
         guint            animation_timeout_id;
 
         guint            login_button_handler_id;
+        guint            start_session_handler_id;
 };
 
 enum {
@@ -142,6 +143,7 @@
         BEGIN_VERIFICATION,
         BEGIN_VERIFICATION_FOR_USER,
         QUERY_ANSWER,
+        START_SESSION,
         USER_SELECTED,
         DISCONNECTED,
         CANCELLED,
@@ -531,6 +533,11 @@
         login_window->priv->timed_login_enabled = FALSE;
         gdm_user_chooser_widget_set_chosen_user_name (GDM_USER_CHOOSER_WIDGET (login_window->priv->user_chooser), NULL);
 
+        if (login_window->priv->start_session_handler_id > 0) {
+                g_signal_handler_disconnect (login_window, login_window->priv->start_session_handler_id);
+                login_window->priv->start_session_handler_id = 0;
+        }
+
         switch_mode (login_window, MODE_SELECTION);
         set_busy (login_window);
         set_sensitive (login_window, FALSE);
@@ -650,6 +657,43 @@
         gdm_user_chooser_widget_set_chosen_user_name (GDM_USER_CHOOSER_WIDGET (login_window->priv->user_chooser), GDM_USER_CHOOSER_USER_AUTO);
 }
 
+static void
+gdm_greeter_login_window_start_session_when_ready (GdmGreeterLoginWindow *login_window)
+{
+        if (login_window->priv->is_interactive) {
+                g_debug ("GdmGreeterLoginWindow: starting session");
+                g_signal_emit (login_window, signals[START_SESSION], 0);
+        } else {
+                g_debug ("GdmGreeterLoginWindow: not starting session since "
+                         "user hasn't had an opportunity to pick language "
+                         "and session yet.");
+
+                /* Call back when we're ready to go
+                 */
+                login_window->priv->start_session_handler_id =
+                    g_signal_connect (login_window, "notify::is-interactive",
+                                      G_CALLBACK (gdm_greeter_login_window_start_session_when_ready),
+                                      NULL);
+
+                /* FIXME: If the user wasn't asked any questions by pam but
+                 * pam still authorized them (passwd -d, or the questions got
+                 * asked on an external device) then we need to let them log in.
+                 * Right now we just log them in right away, but we really should
+                 * set a timer up like timed login (but shorter, say ~5 seconds),
+                 * so they can pick language/session.  Will need to refactor things
+                 * a bit so we can share code with timed login.
+                 */
+                if (!login_window->priv->timed_login_enabled) {
+
+                        g_debug ("GdmGreeterLoginWindow: Okay, we'll start the session anyway,"
+                                 "because the user isn't ever going to get an opportunity to"
+                                 "interact with session");
+                        _gdm_greeter_login_window_set_interactive (login_window, TRUE);
+                }
+
+        }
+}
+
 gboolean
 gdm_greeter_login_window_info_query (GdmGreeterLoginWindow *login_window,
                                      const char            *text)
@@ -1599,15 +1643,16 @@
                               g_cclosure_marshal_VOID__VOID,
                               G_TYPE_NONE,
                               0);
-        signals [INTERACTIVE] =
-                g_signal_new ("interactive",
+        signals [START_SESSION] =
+                g_signal_new ("start-session",
                               G_TYPE_FROM_CLASS (object_class),
                               G_SIGNAL_RUN_LAST,
-                              G_STRUCT_OFFSET (GdmGreeterLoginWindowClass, interactive),
+                              G_STRUCT_OFFSET (GdmGreeterLoginWindowClass, start_session),
                               NULL,
                               NULL,
                               g_cclosure_marshal_VOID__VOID,
-                              G_TYPE_NONE, 0);
+                              G_TYPE_NONE,
+                              0);
 
         g_object_class_install_property (object_class,
                                          PROP_DISPLAY_IS_LOCAL,

Modified: trunk/gui/simple-greeter/gdm-greeter-login-window.h
==============================================================================
--- trunk/gui/simple-greeter/gdm-greeter-login-window.h	(original)
+++ trunk/gui/simple-greeter/gdm-greeter-login-window.h	Sun Mar  9 21:59:57 2008
@@ -57,7 +57,7 @@
                                               const char            *text);
         void (* cancelled)                   (GdmGreeterLoginWindow *login_window);
         void (* disconnected)                (GdmGreeterLoginWindow *login_window);
-        void (* interactive)                 (GdmGreeterLoginWindow *login_window);
+        void (* start_session)               (GdmGreeterLoginWindow *login_window);
 
 } GdmGreeterLoginWindowClass;
 

Modified: trunk/gui/simple-greeter/gdm-greeter-session.c
==============================================================================
--- trunk/gui/simple-greeter/gdm-greeter-session.c	(original)
+++ trunk/gui/simple-greeter/gdm-greeter-session.c	Sun Mar  9 21:59:57 2008
@@ -250,21 +250,10 @@
 }
 
 static void
-on_interactive (GdmGreeterLoginWindow *login_window,
+on_start_session (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;
-        }
+        gdm_greeter_client_call_start_session_when_ready (session->priv->client, TRUE);
 }
 
 static void
@@ -333,8 +322,8 @@
                                   G_CALLBACK (on_disconnected),
                                   session);
                 g_signal_connect (session->priv->login_window,
-                                  "interactive",
-                                  G_CALLBACK (on_interactive),
+                                  "start-session",
+                                  G_CALLBACK (on_start_session),
                                   session);
                 gtk_widget_show (session->priv->login_window);
         } else {



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