lightdm-gtk-greeter-team team mailing list archive
-
lightdm-gtk-greeter-team team
-
Mailing list archive
-
Message #01097
[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"));