Control: tags -1 + confirmed patch Le mercredi 29 mai 2013 à 18:55 +0530, shirish शिरीष a écrit :
> I have been having the same issue as Salvatore Bonaccorso even though > mine is gdm:3.6.1-2 version and not gdm3.4.1-8 . I confirm the bug in both wheezy and sid (with disable_user_list=true). Here is an analysis of the bug: - when the user clicks "Cancel", a D-Bus signal is emitted, which leads to the function gdm_greeter_login_window_reset() being called - this latter function calls reset_dialog_after_messages(), and then restarts all extensions - the problem is that there are pending messages, which will be processed before calling reset_dialog(); therefore the reset_dialog() function is actually called *after* the extensions have been restarted - since the reset_dialog() calls reset_extension() on all extensions, those are left in a disabled state, and the authentication does not start I attach a patch that solves the problem in a minimalistic way, with no risk of breaking anything else. Maybe there is a better way of solving the problem by refactoring the logic, but I could not figure it. Joss: can you please review the patch? If you agree with it, I would like to fix the bug in wheezy (which means first fixing it in sid). > "But the problem does not seem only present when disabling the user > listing. Even with disable_user_list=false, after cancelling a login, > the greeter gets confused and it's not possible anymore to scroll the > user list shown." - Salvatore Bonaccorso When disable_user_list=false, there is indeed also a problem, but this is a different issue. It only affects sid (not wheezy), and I guess it is related to GTK+ 3.8. -- .''`. Sébastien Villemot : :' : Debian Developer `. `' http://www.dynare.org/sebastien `- GPG Key: 4096R/381A7594
--- a/gui/simple-greeter/gdm-greeter-login-window.c +++ b/gui/simple-greeter/gdm-greeter-login-window.c @@ -147,6 +147,8 @@ guint start_session_handler_id; char *service_name_of_session_ready_to_start; + + gboolean restart_extension_conversations_on_selection_mode; }; enum { @@ -190,6 +192,9 @@ static void begin_single_service_verification (GdmGreeterLoginWindow *login_window, const char *service_name); +static gboolean restart_extension_conversation (GdmLoginExtension *extension, + GdmGreeterLoginWindow *login_window); + G_DEFINE_TYPE (GdmGreeterLoginWindow, gdm_greeter_login_window, GTK_TYPE_WINDOW) static void @@ -863,6 +868,14 @@ g_list_foreach (login_window->priv->extensions, (GFunc) reset_extension, login_window); + if (login_window->priv->restart_extension_conversations_on_selection_mode) + { + g_list_foreach (login_window->priv->extensions, + (GFunc) restart_extension_conversation, + login_window); + login_window->priv->restart_extension_conversations_on_selection_mode = FALSE; + } + if (can_jump_to_authenticate (login_window)) { /* If we don't have a user list jump straight to authenticate */ g_debug ("GdmGreeterLoginWindow: jumping straight to authenticate"); @@ -1086,9 +1099,7 @@ g_return_val_if_fail (GDM_IS_GREETER_LOGIN_WINDOW (login_window), FALSE); reset_dialog_after_messages (login_window, MODE_SELECTION); - g_list_foreach (login_window->priv->extensions, - (GFunc) restart_extension_conversation, - login_window); + login_window->priv->restart_extension_conversations_on_selection_mode = TRUE; g_free (login_window->priv->service_name_of_session_ready_to_start); login_window->priv->service_name_of_session_ready_to_start = NULL; @@ -2556,6 +2567,7 @@ login_window->priv->timed_login_enabled = FALSE; login_window->priv->dialog_mode = MODE_UNDEFINED; login_window->priv->next_mode = MODE_UNDEFINED; + login_window->priv->restart_extension_conversations_on_selection_mode = FALSE; settings = g_settings_new (LOGIN_SCREEN_SCHEMA);
signature.asc
Description: This is a digitally signed message part