← 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/296549

Included two patches for LightDM GTK Greeter solves the following problems:

- Enables multi-line messages in the LightDM Infobar to enable more informative messages.
- Disable GTK animations to prevent infobar from disappearing in password change scenarios.

-- 
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-06 12:52:20 +0000
@@ -188,6 +188,11 @@
 /* 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 +1146,59 @@
         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->text);
+            }
+            else
+            {   
+                long_infobar_message =  g_strjoin ("\n", get_message_label (), message->text, NULL);
+                set_message_label (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;
@@ -2775,6 +2828,9 @@
     cancel_button = GTK_BUTTON (gtk_builder_get_object (builder, "cancel_button"));
     login_button = GTK_BUTTON (gtk_builder_get_object (builder, "login_button"));
 
+    /* Disable GTK Toolkit animations to prevent missing infobar messages bug */
+    g_object_set (gtk_settings_get_default(), "gtk-enable-animations", FALSE, NULL);
+
     /* Panel window*/
     panel_window = GTK_WIDGET (gtk_builder_get_object (builder, "panel_window"));
     menubar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));