ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #01816
[Merge] lp:~ted/indicator-applet/sensitivity-isnt-always-a-good-thing into lp:indicator-applet
Ted Gould has proposed merging lp:~ted/indicator-applet/sensitivity-isnt-always-a-good-thing into lp:indicator-applet.
Requested reviews:
Indicator Applet Developers (indicator-applet-developers)
Related bugs:
#598524 doesn't respect unsensitive widget status
https://bugs.launchpad.net/bugs/598524
Fix sensitivity of menus.
--
https://code.launchpad.net/~ted/indicator-applet/sensitivity-isnt-always-a-good-thing/+merge/29118
Your team ayatana-commits is subscribed to branch lp:indicator-applet.
=== modified file 'src/applet-main.c'
--- src/applet-main.c 2010-06-04 16:07:46 +0000
+++ src/applet-main.c 2010-07-02 19:34:25 +0000
@@ -206,10 +206,21 @@
}
static void
+sensitive_cb (GObject * obj, GParamSpec * pspec, gpointer user_data)
+{
+ g_return_if_fail(GTK_IS_WIDGET(obj));
+ g_return_if_fail(GTK_IS_WIDGET(user_data));
+
+ gtk_widget_set_sensitive(GTK_WIDGET(user_data), gtk_widget_get_sensitive(GTK_WIDGET(obj)));
+ return;
+}
+
+static void
entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, GtkWidget * menubar)
{
g_debug("Signal: Entry Added");
gboolean something_visible = FALSE;
+ gboolean something_sensitive = FALSE;
GtkWidget * menuitem = gtk_menu_item_new();
GtkWidget * box = (packdirection == GTK_PACK_DIRECTION_LTR) ?
@@ -224,8 +235,14 @@
something_visible = TRUE;
}
+ if (gtk_widget_get_sensitive(GTK_WIDGET(entry->image))) {
+ something_sensitive = 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);
+
+ g_signal_connect(G_OBJECT(entry->image), "notify::sensitive", G_CALLBACK(sensitive_cb), menuitem);
}
if (entry->label != NULL) {
switch(packdirection) {
@@ -241,12 +258,19 @@
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;
}
+ if (gtk_widget_get_sensitive(GTK_WIDGET(entry->label))) {
+ something_sensitive = 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);
+
+ g_signal_connect(G_OBJECT(entry->label), "notify::sensitive", G_CALLBACK(sensitive_cb), menuitem);
}
gtk_container_add(GTK_CONTAINER(menuitem), box);
gtk_widget_show(box);
@@ -268,6 +292,7 @@
if (something_visible) {
gtk_widget_show(menuitem);
}
+ gtk_widget_set_sensitive(menuitem, something_sensitive);
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_INDICATOR_ENTRY, entry);
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_INDICATOR_OBJECT, io);
@@ -288,10 +313,12 @@
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);
+ g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(sensitive_cb), 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);
+ g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(sensitive_cb), widget);
}
gtk_widget_destroy(widget);
Follow ups