← Back to team overview

lightdm-gtk-greeter-team team mailing list archive

[Merge] lp:~kalgasnik/lightdm-gtk-greeter/gtk-710888-GtkInfoBar-visibility into lp:lightdm-gtk-greeter

 

Andrew P. has proposed merging lp:~kalgasnik/lightdm-gtk-greeter/gtk-710888-GtkInfoBar-visibility into lp:lightdm-gtk-greeter.

Requested reviews:
  LightDM Gtk+ Greeter Development Team (lightdm-gtk-greeter-team)

For more details, see:
https://code.launchpad.net/~kalgasnik/lightdm-gtk-greeter/gtk-710888-GtkInfoBar-visibility/+merge/258348

Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=710888
> GtkInfoBar not shown after calling gtk_widget_show

Usually it happens when user scrolls list with Up/Down keys.

1. Show message
2. Hide message
3. Show new message BEFORE hiding animation ends -> infobar remains hidden.
-- 
Your team LightDM Gtk+ Greeter Development Team is requested to review the proposed merge of lp:~kalgasnik/lightdm-gtk-greeter/gtk-710888-GtkInfoBar-visibility into lp:lightdm-gtk-greeter.
=== modified file 'src/lightdm-gtk-greeter.c'
--- src/lightdm-gtk-greeter.c	2015-03-27 05:29:45 +0000
+++ src/lightdm-gtk-greeter.c	2015-05-06 09:14:08 +0000
@@ -345,6 +345,12 @@
         gtk_editable_set_position(GTK_EDITABLE(data->widget), data->editable_pos);
 }
 
+static void
+infobar_revealed_cb_710888 (GObject *gobject, GParamSpec *pspec, gpointer user_data)
+{
+    gtk_widget_set_visible (GTK_WIDGET (info_bar), !message_label_is_empty ());
+}
+
 /* Terminating */
 
 static GPid
@@ -2763,6 +2769,17 @@
 
     init_indicators ();
 
+    /* https://bugzilla.gnome.org/show_bug.cgi?id=710888
+       > GtkInfoBar not shown after calling gtk_widget_show
+       Assume they will fix it someday. */
+    if (gtk_get_major_version () == 3 && gtk_get_minor_version () < 18)
+    {
+        GList *children = gtk_container_get_children (GTK_CONTAINER (info_bar));
+        if (g_list_length (children) == 1 && GTK_IS_REVEALER (children->data))
+            g_signal_connect_after(children->data, "notify::child-revealed", (GCallback)infobar_revealed_cb_710888, NULL);
+        g_list_free (children);
+    }
+
     /* Hide empty panel */
     GList *menubar_items = gtk_container_get_children (GTK_CONTAINER (menubar));
     if (!menubar_items)


Follow ups