ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #01547
[Branch ~indicator-applet-developers/indicator-applet/applet] Rev 363: Hide when we don't have anything to show.
Merge authors:
Ted Gould (ted)
Related merge proposals:
https://code.launchpad.net/~ted/indicator-applet/hide-when-everythings-gone/+merge/26345
proposed by: Ted Gould (ted)
------------------------------------------------------------
revno: 363 [merge]
committer: Ted Gould <ted@xxxxxxxx>
branch nick: applet
timestamp: Fri 2010-06-04 11:07:46 -0500
message:
Hide when we don't have anything to show.
modified:
src/applet-main.c
--
lp:indicator-applet
https://code.launchpad.net/~indicator-applet-developers/indicator-applet/applet
Your team ayatana-commits is subscribed to branch lp:indicator-applet.
To unsubscribe from this branch go to https://code.launchpad.net/~indicator-applet-developers/indicator-applet/applet/+edit-subscription
=== modified file 'src/applet-main.c'
--- src/applet-main.c 2010-05-13 10:32:08 +0000
+++ src/applet-main.c 2010-06-04 16:07:46 +0000
@@ -192,9 +192,24 @@
}
static void
+something_shown (GtkWidget * widget, gpointer user_data)
+{
+ GtkWidget * menuitem = GTK_WIDGET(user_data);
+ gtk_widget_show(menuitem);
+}
+
+static void
+something_hidden (GtkWidget * widget, gpointer user_data)
+{
+ GtkWidget * menuitem = GTK_WIDGET(user_data);
+ gtk_widget_hide(menuitem);
+}
+
+static void
entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, GtkWidget * menubar)
{
g_debug("Signal: Entry Added");
+ gboolean something_visible = FALSE;
GtkWidget * menuitem = gtk_menu_item_new();
GtkWidget * box = (packdirection == GTK_PACK_DIRECTION_LTR) ?
@@ -205,6 +220,12 @@
if (entry->image != NULL) {
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(entry->image), FALSE, FALSE, 0);
+ if (gtk_widget_get_visible(GTK_WIDGET(entry->image))) {
+ something_visible = TRUE;
+ }
+
+ g_signal_connect(G_OBJECT(entry->image), "show", G_CALLBACK(something_shown), menuitem);
+ g_signal_connect(G_OBJECT(entry->image), "hide", G_CALLBACK(something_hidden), menuitem);
}
if (entry->label != NULL) {
switch(packdirection) {
@@ -220,6 +241,12 @@
break;
}
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(entry->label), FALSE, FALSE, 0);
+ if (gtk_widget_get_visible(GTK_WIDGET(entry->label))) {
+ something_visible = TRUE;
+ }
+
+ g_signal_connect(G_OBJECT(entry->label), "show", G_CALLBACK(something_shown), menuitem);
+ g_signal_connect(G_OBJECT(entry->label), "hide", G_CALLBACK(something_hidden), menuitem);
}
gtk_container_add(GTK_CONTAINER(menuitem), box);
gtk_widget_show(box);
@@ -237,7 +264,10 @@
gtk_container_foreach(GTK_CONTAINER(menubar), place_in_menu, &position);
gtk_menu_shell_insert(GTK_MENU_SHELL(menubar), menuitem, position.menupos);
- gtk_widget_show(menuitem);
+
+ if (something_visible) {
+ gtk_widget_show(menuitem);
+ }
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_INDICATOR_ENTRY, entry);
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_INDICATOR_OBJECT, io);
@@ -254,6 +284,16 @@
return;
}
+ IndicatorObjectEntry * entry = (IndicatorObjectEntry *)data;
+ if (entry->label != NULL) {
+ g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(something_shown), widget);
+ g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(something_hidden), widget);
+ }
+ if (entry->image != NULL) {
+ g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(something_shown), widget);
+ g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(something_hidden), widget);
+ }
+
gtk_widget_destroy(widget);
return;
}