Fix update 'indicator' plugin on configuration changes.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Sun, 14 Dec 2014 16:16:14 +0000 (18:16 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Sun, 14 Dec 2014 16:16:14 +0000 (18:16 +0200)
The whole container manipulations were invalid and changes
between "no indicators" and "some indicators" states never worked.

ChangeLog
plugins/indicator/indicator.c

index c49b919..07d3390 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@
     use - it will write all the debug there and that changes the behavior
     which was not intended really.
 * Corrected background for 'indicator' plugin.
+* Fixed update 'indicator' plugin on configuration changes.
 
 0.8.0
 -------------------------------------------------------------------------
index 0e7dbbd..c19d384 100644 (file)
@@ -626,8 +626,6 @@ static void indicator_load_modules(LXPanel *panel, GtkWidget *p)
     gint indicators_loaded = 0;
     IndicatorPlugin * indicator = lxpanel_plugin_get_data(p);
 
-    gtk_widget_hide_all(p);
-
     gtk_container_forall(GTK_CONTAINER(indicator->menubar),
                          (GtkCallback)gtk_widget_destroy, NULL);
 
@@ -685,19 +683,22 @@ static void indicator_load_modules(LXPanel *panel, GtkWidget *p)
         g_dir_close (dir);
     }
 
+    /* Update the plugin container contents */
+    if (gtk_bin_get_child(GTK_BIN(p)))
+        gtk_container_remove(GTK_CONTAINER(p), gtk_bin_get_child(GTK_BIN(p)));
     if (indicators_loaded == 0)
     {
         /* A label to allow for click through */
-        gtk_container_add(GTK_CONTAINER(p), gtk_label_new(_("No Indicators")));
+        GtkWidget *label = gtk_label_new(_("No Indicators"));
+        gtk_widget_show(label);
+        gtk_container_add(GTK_CONTAINER(p), label);
     }
     else
     {
         gtk_container_add(GTK_CONTAINER(p), indicator->menubar);
+        /* Enforce background */
+        plugin_widget_set_background(indicator->menubar, panel);
     }
-
-    /* Update the display, show the widget, and return. */
-    gtk_widget_show_all(p);
-
 }
 
 /* Plugin constructor. */
@@ -772,7 +773,8 @@ static GtkWidget *indicator_constructor(LXPanel *panel, config_setting_t *settin
     //g_log_set_default_handler(log_to_file, NULL);
 
     /* Allocate icon as a child of top level. */
-    indicator->menubar = gtk_menu_bar_new();
+    indicator->menubar = g_object_ref_sink(gtk_menu_bar_new());
+    gtk_widget_show(indicator->menubar);
     gtk_widget_set_can_focus(indicator->menubar, TRUE);
 
     /* Init some theme/icon stuff */
@@ -802,6 +804,7 @@ static void indicator_destructor(gpointer user_data)
     IndicatorPlugin * indicator = (IndicatorPlugin *) user_data;
 
     /* Deallocate all memory. */
+    g_object_unref(indicator->menubar);
     g_free(indicator);
 }
 #endif