From ecb11f01439fa4c80dd94d3fc0f0316eebe4a717 Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Fri, 8 Jan 2010 16:25:03 -0600 Subject: Watch for changes to label and sensitivity. --- src/libappindicator/app-indicator.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index ec598db..241d5d3 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -681,6 +681,29 @@ menuitem_iterate (GtkWidget *widget, } } +static void +widget_notify_cb (GtkWidget *widget, + GParamSpec *pspec, + gpointer data) +{ + DbusmenuMenuitem *child = (DbusmenuMenuitem *)data; + + g_print ("pspec->name: %s\n", pspec->name); + + if (pspec->name == g_intern_static_string ("sensitive")) + { + dbusmenu_menuitem_property_set_bool (child, + DBUSMENU_MENUITEM_PROP_SENSITIVE, + GTK_WIDGET_IS_SENSITIVE (widget)); + } + else if (pspec->name == g_intern_static_string ("label")) + { + dbusmenu_menuitem_property_set (child, + DBUSMENU_MENUITEM_PROP_LABEL, + gtk_menu_item_get_label (GTK_MENU_ITEM (widget))); + } +} + static void container_iterate (GtkWidget *widget, gpointer data) @@ -768,6 +791,9 @@ container_iterate (GtkWidget *widget, } } + g_signal_connect (widget, "notify", + G_CALLBACK (widget_notify_cb), child); + g_signal_connect (G_OBJECT (child), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_menuitem), widget); -- cgit v1.2.3 From b56f250d6de2e50a01860353f143e631ddbba55b Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Fri, 8 Jan 2010 16:29:25 -0600 Subject: Remove debugging code. --- src/libappindicator/app-indicator.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 241d5d3..ad7eab7 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -688,8 +688,6 @@ widget_notify_cb (GtkWidget *widget, { DbusmenuMenuitem *child = (DbusmenuMenuitem *)data; - g_print ("pspec->name: %s\n", pspec->name); - if (pspec->name == g_intern_static_string ("sensitive")) { dbusmenu_menuitem_property_set_bool (child, -- cgit v1.2.3 From 724261a189acf2a365a0a478c13be0f4eed5ea81 Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Mon, 11 Jan 2010 13:40:03 -0600 Subject: Label fu --- src/libappindicator/app-indicator.c | 115 +++++++++++++++++++++++++++++++----- 1 file changed, 99 insertions(+), 16 deletions(-) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 7560a97..3b15472 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -739,6 +739,87 @@ menuitem_iterate (GtkWidget *widget, } } +static void +update_icon_name (DbusmenuMenuitem *menuitem, + GtkImage *image) +{ + if (gtk_image_get_storage_type (image) != GTK_IMAGE_ICON_NAME) + return; + + dbusmenu_menuitem_property_set (menuitem, + DBUSMENU_MENUITEM_PROP_ICON, + image->data.name.icon_name); +} + +/* return value specifies whether the label is set or not */ +static gboolean +update_stock_item (DbusmenuMenuitem *menuitem, + GtkImage *image) +{ + GtkStockItem stock; + + if (gtk_image_get_storage_type (image) != GTK_IMAGE_STOCK) + return FALSE; + + gtk_stock_lookup (image->data.stock.stock_id, &stock); + + g_print ("set stock id `%s'\n", image->data.stock.stock_id); + + dbusmenu_menuitem_property_set (menuitem, + DBUSMENU_MENUITEM_PROP_ICON, + image->data.stock.stock_id); + + if (stock.label != NULL) + { + dbusmenu_menuitem_property_set (menuitem, + DBUSMENU_MENUITEM_PROP_LABEL, + stock.label); + + return TRUE; + } + + return FALSE; +} + +static void +image_notify_cb (GtkWidget *widget, + GParamSpec *pspec, + gpointer data) +{ + DbusmenuMenuitem *child = (DbusmenuMenuitem *)data; + GtkImage *image = GTK_IMAGE (widget); + + if (pspec->name == g_intern_static_string ("stock")) + { + update_stock_item (child, image); + } + else if (pspec->name == g_intern_static_string ("icon-name")) + { + update_icon_name (child, image); + } +} + +static void +widget_notify_cb (GtkWidget *widget, + GParamSpec *pspec, + gpointer data) +{ + DbusmenuMenuitem *child = (DbusmenuMenuitem *)data; + + if (pspec->name == g_intern_static_string ("sensitive")) + { + dbusmenu_menuitem_property_set_bool (child, + DBUSMENU_MENUITEM_PROP_SENSITIVE, + GTK_WIDGET_IS_SENSITIVE (widget)); + } + else if (pspec->name == g_intern_static_string ("label")) + { + dbusmenu_menuitem_property_set (child, + DBUSMENU_MENUITEM_PROP_LABEL, + gtk_menu_item_get_label (GTK_MENU_ITEM (widget))); + } +} + static void container_iterate (GtkWidget *widget, gpointer data) @@ -786,25 +867,24 @@ container_iterate (GtkWidget *widget, } else if (GTK_IS_IMAGE_MENU_ITEM (widget)) { - GtkWidget *image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (widget)); - - if (gtk_image_get_storage_type (GTK_IMAGE (image)) == GTK_IMAGE_STOCK) - { - GtkStockItem stock; + GtkWidget *image; + GtkImageType image_type; - gtk_stock_lookup (GTK_IMAGE (image)->data.stock.stock_id, &stock); + image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (widget)); + image_type = gtk_image_get_storage_type (GTK_IMAGE (image)); - dbusmenu_menuitem_property_set (child, - DBUSMENU_MENUITEM_PROP_ICON, - GTK_IMAGE (image)->data.stock.stock_id); + g_signal_connect (image, + "notify", + G_CALLBACK (image_notify_cb), + child); - if (stock.label != NULL) - { - dbusmenu_menuitem_property_set (child, - DBUSMENU_MENUITEM_PROP_LABEL, - stock.label); - label_set = TRUE; - } + if (image_type == GTK_IMAGE_STOCK) + { + label_set = update_stock_item (child, GTK_IMAGE (image)); + } + else if (image_type == GTK_IMAGE_ICON_NAME) + { + update_icon_name (child, GTK_IMAGE (image)); } } } @@ -826,6 +906,9 @@ container_iterate (GtkWidget *widget, } } + g_signal_connect (widget, "notify", + G_CALLBACK (widget_notify_cb), child); + g_signal_connect (G_OBJECT (child), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_menuitem), widget); -- cgit v1.2.3 From 73afc353f91d9fe19cda2bf97fbb73fa095e9484 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 11 Jan 2010 16:05:31 -0600 Subject: Having better default paths that look a little more professional. --- src/libappindicator/app-indicator.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index f115068..0767734 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -111,6 +111,10 @@ enum { #define APP_INDICATOR_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), APP_INDICATOR_TYPE, AppIndicatorPrivate)) +/* Default Paths */ +#define DEFAULT_ITEM_PATH "/org/ayatana/NotificationItem" +#define DEFAULT_MENU_PATH "/org/ayatana/NotificationItem/Menu" + /* Boiler plate */ static void app_indicator_class_init (AppIndicatorClass *klass); static void app_indicator_init (AppIndicator *self); @@ -305,7 +309,7 @@ app_indicator_init (AppIndicator *self) } dbus_g_connection_register_g_object(priv->connection, - "/need/a/path", + DEFAULT_ITEM_PATH, G_OBJECT(self)); self->priv = priv; @@ -541,7 +545,7 @@ check_connect (AppIndicator *self) return; } - org_freedesktop_StatusNotifierWatcher_register_status_notifier_item_async(priv->watcher_proxy, "/need/a/path", register_service_cb, self); + org_freedesktop_StatusNotifierWatcher_register_status_notifier_item_async(priv->watcher_proxy, DEFAULT_ITEM_PATH, register_service_cb, self); return; } @@ -870,7 +874,7 @@ setup_dbusmenu (AppIndicator *self) root); if (priv->menuservice == NULL) { - priv->menuservice = dbusmenu_server_new ("/need/a/menu/path"); + priv->menuservice = dbusmenu_server_new (DEFAULT_MENU_PATH); } dbusmenu_server_set_root (priv->menuservice, root); -- cgit v1.2.3 From 6ae0ede4751cc8fc10b46bc9e252568ff8cbb16d Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Tue, 12 Jan 2010 00:28:12 -0600 Subject: Remove debugging code --- src/libappindicator/app-indicator.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 3b15472..1020436 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -763,8 +763,6 @@ update_stock_item (DbusmenuMenuitem *menuitem, gtk_stock_lookup (image->data.stock.stock_id, &stock); - g_print ("set stock id `%s'\n", image->data.stock.stock_id); - dbusmenu_menuitem_property_set (menuitem, DBUSMENU_MENUITEM_PROP_ICON, image->data.stock.stock_id); -- cgit v1.2.3