← Back to team overview

lightdm-gtk-greeter-team team mailing list archive

[Merge] lp:~hbayindir/lightdm-gtk-greeter/lightdm-gtk-greeter into lp:lightdm-gtk-greeter

 

Hakan Bayındır has proposed merging lp:~hbayindir/lightdm-gtk-greeter/lightdm-gtk-greeter into lp:lightdm-gtk-greeter.

Requested reviews:
  Sean Davis (bluesabre)

For more details, see:
https://code.launchpad.net/~hbayindir/lightdm-gtk-greeter/lightdm-gtk-greeter/+merge/296637

Increase the ergonomics and usefulness of the greeter in systems where password expiration is enabled. Disabled GTK animations and multiple line infobar messages enable all messages to be shown accurately and enables users to understand what is going on.

-- 
Your team LightDM Gtk+ Greeter Development Team is subscribed to branch lp:lightdm-gtk-greeter.
=== modified file 'src/lightdm-gtk-greeter.c'
--- src/lightdm-gtk-greeter.c	2015-11-18 05:00:06 +0000
+++ src/lightdm-gtk-greeter.c	2016-06-07 07:49:15 +0000
@@ -188,6 +188,10 @@
 /* Screensaver values */
 static int timeout, interval, prefer_blanking, allow_exposures;
 
+/* Support variables for multiple messages in InfoBar */
+gboolean append_next_prompt = FALSE;
+gchar *long_infobar_message = NULL;
+
 /* Handling monitors backgrounds */
 static const gint USER_BACKGROUND_DELAY = 250;
 static GreeterBackground *greeter_background;
@@ -1141,19 +1145,60 @@
         return;
     }
 
+    g_debug ("[process_prompts] Entering while loop");
+
     while (pending_questions)
     {
         PAMConversationMessage *message = (PAMConversationMessage *) pending_questions->data;
         pending_questions = g_slist_remove (pending_questions, (gconstpointer) message);
 
+        g_debug ("[process_prompts] Message is a prompt: %d", message->is_prompt);
+        g_debug ("[process_prompts] Value of type union is %d", message->type.message);
+        g_debug ("[process_prompts] Text of the message is %s", message->text);
+
         if (!message->is_prompt)
         {
-            /* FIXME: this doesn't show multiple messages, but that was
-             * already the case before. */
-            set_message_label (message->type.message, message->text);
+            g_debug ("[process_prompts] Setting message %s since it's a prompt", message->text);
+
+            if (!append_next_prompt)
+            {
+                /*
+                 * Since we're going to change the message label anyway,
+                 * We won't need that message anymore.
+                 */
+                if (long_infobar_message != NULL)
+                {
+                    g_free (long_infobar_message);
+                    long_infobar_message = NULL;
+                }
+                set_message_label (message->type.message, message->text);
+            }
+            else
+            {
+                long_infobar_message =  g_strjoin ("\n", gtk_label_get_text (message_label), message->text, NULL);
+                /* Use the last message's type as the type. */
+                set_message_label (message->type.message, long_infobar_message);
+            }
+
+            g_debug ("[process_prompts] Setting append next prompt to TRUE");
+            append_next_prompt = TRUE;
             continue;
         }
 
+        /* If we're reached here, we're going to write different things to the infobar. */
+        g_debug ("[process_prompts] Setting append next prompt to FALSE");
+        append_next_prompt = FALSE;
+
+        /*
+         * If we've reached here, the message label is gonna change below,
+         * so we won't need that message.
+         */
+        if (long_infobar_message != NULL)
+        {
+            g_free (long_infobar_message);
+            long_infobar_message = NULL;
+        }
+
         gtk_widget_show (GTK_WIDGET (password_entry));
         gtk_widget_grab_focus (GTK_WIDGET (password_entry));
         gtk_entry_set_text (password_entry, "");
@@ -1172,10 +1217,18 @@
                 str = g_strndup (str, strlen (str) - 2);
             else if (g_str_has_suffix (str, ":"))
                 str = g_strndup (str, strlen (str) - 1);
+
+           g_debug ("[process_prompts] Message is a prompt, but no messages beforehand, so setting prompt as message");
+
             set_message_label (LIGHTDM_MESSAGE_TYPE_INFO, str);
             if (str != message->text)
                 g_free (str);
         }
+        else if (message->type.prompt == LIGHTDM_PROMPT_TYPE_SECRET)
+        {
+            g_debug ("[process_prompts] Message is a prompt, but it's secret. Not setting prompt as message");
+        }
+
         gtk_widget_grab_focus (GTK_WIDGET (password_entry));
         prompted = TRUE;
         password_prompted = TRUE;
@@ -2793,6 +2846,9 @@
     clock_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "clock_menuitem"));
     host_menuitem = GTK_WIDGET (gtk_builder_get_object (builder, "host_menuitem"));
 
+    /* Disable GTK Toolkit animations to prevent missing infobar messages bug */
+    g_object_set (gtk_settings_get_default(), "gtk-enable-animations", FALSE, NULL);
+
     /* Power dialog */
     power_window = GTK_WIDGET (gtk_builder_get_object (builder, "power_window"));
     power_ok_button = GTK_BUTTON (gtk_builder_get_object (builder, "power_ok_button"));