From 585541595135fe2317d9f5065073b09ad10052ca Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 10:46:25 -0500 Subject: We have to drop show_time as a parameter as the caller doesn't really know if that's the case or not anymore. --- src/im-menu-item.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 6f58ebd..2a5265b 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -287,7 +287,7 @@ indicator_modified_cb (IndicateListener * listener, IndicateListenerServer * ser } ImMenuItem * -im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gboolean show_time) +im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator) { ImMenuItem * self = g_object_new(IM_MENU_ITEM_TYPE, NULL); @@ -296,7 +296,7 @@ im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, priv->listener = listener; priv->server = server; priv->indicator = indicator; - priv->show_time = show_time; + priv->show_time = TRUE; priv->time_update_min = 0; dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), "type", DBUSMENU_CLIENT_TYPES_IMAGE); -- cgit v1.2.3 From b6cc96c33d4568d421195f3b360bbc5914f9118e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 15:34:11 -0500 Subject: Converting this over to an indicator menuitem. --- src/im-menu-item.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 2a5265b..4251572 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -28,6 +28,7 @@ with this program. If not, see . #include #include #include "im-menu-item.h" +#include "dbus-data.h" enum { TIME_CHANGED, @@ -150,7 +151,7 @@ im_menu_item_finalize (GObject *object) static void icon_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) { - dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(data), DBUSMENU_MENUITEM_PROP_ICON_DATA, propertydata); + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(data), INDICATOR_MENUITEM_PROP_ICON, propertydata); return; } @@ -160,7 +161,7 @@ update_time (ImMenuItem * self) ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(self); if (!priv->show_time) { - dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), "right-column", ""); + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), INDICATOR_MENUITEM_PROP_RIGHT, ""); return; } @@ -191,7 +192,7 @@ update_time (ImMenuItem * self) } if (timestring != NULL) { - dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), "right-column", ""); + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), INDICATOR_MENUITEM_PROP_RIGHT, timestring); g_free(timestring); } @@ -253,7 +254,7 @@ sender_cb (IndicateListener * listener, IndicateListenerServer * server, Indicat return; } - dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_LABEL, propertydata); + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), INDICATOR_MENUITEM_PROP_LABEL, propertydata); return; } @@ -299,7 +300,7 @@ im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, priv->show_time = TRUE; priv->time_update_min = 0; - dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), "type", DBUSMENU_CLIENT_TYPES_IMAGE); + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), "type", INDICATOR_MENUITEM_TYPE); indicate_listener_get_property(listener, server, indicator, "sender", sender_cb, self); indicate_listener_get_property_time(listener, server, indicator, "time", time_cb, self); -- cgit v1.2.3 From 47eff60cee5bf9877f9fe4472f34f84007dbe644 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 15:38:33 -0500 Subject: Removing the indicate-gtk headers. --- src/im-menu-item.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 4251572..f913fac 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -25,8 +25,8 @@ with this program. If not, see . #include #include -#include -#include +#include +#include #include "im-menu-item.h" #include "dbus-data.h" -- cgit v1.2.3 From afd7c0690b215e6c73661183d358d3c1b728b413 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 15:55:28 -0500 Subject: Changing the properties to be the indicate v2 ones. Mostly this involves adding extra properties at this point. --- src/im-menu-item.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index f913fac..af4ebb8 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -26,6 +26,7 @@ with this program. If not, see . #include #include #include +#include #include #include "im-menu-item.h" #include "dbus-data.h" @@ -259,6 +260,20 @@ sender_cb (IndicateListener * listener, IndicateListenerServer * server, Indicat return; } +static void +count_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) +{ + g_debug("Got Count Information"); + +} + +static void +attention_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) +{ + g_debug("Got Attention Information"); + +} + static void activate_cb (ImMenuItem * self, gpointer data) { @@ -276,12 +291,20 @@ indicator_modified_cb (IndicateListener * listener, IndicateListenerServer * ser if (INDICATE_LISTENER_INDICATOR_ID(indicator) != INDICATE_LISTENER_INDICATOR_ID(priv->indicator)) return; if (server != priv->server) return; - if (!g_strcmp0(property, "sender")) { + if (!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_NAME)) { + indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_NAME, sender_cb, self); + } else if (!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_TIME)) { + indicate_listener_get_property_time(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_TIME, time_cb, self); + } else if (!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_ICON)) { + indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_ICON, icon_cb, self); + } else if (!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_COUNT)) { + indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_COUNT, count_cb, self); + } else if (!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_ATTENTION)) { + indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_ATTENTION, attention_cb, self); + } else if (!g_strcmp0(property, "sender")) { + /* This is a compatibility string with v1 and should be removed */ + g_debug("Indicator is using 'sender' property which is a v1 string."); indicate_listener_get_property(listener, server, indicator, "sender", sender_cb, self); - } else if (!g_strcmp0(property, "time")) { - indicate_listener_get_property_time(listener, server, indicator, "time", time_cb, self); - } else if (!g_strcmp0(property, "icon")) { - indicate_listener_get_property(listener, server, indicator, "icon", icon_cb, self); } return; -- cgit v1.2.3 From 1b0210cbd43099ae96ea48f817a4cef50941c9c2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:03:53 -0500 Subject: Well, you know, Oholoh says that I don't comment enough. Better put some more in. --- src/im-menu-item.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index af4ebb8..2d361ac 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -149,6 +149,8 @@ im_menu_item_finalize (GObject *object) G_OBJECT_CLASS (im_menu_item_parent_class)->finalize (object); } +/* Call back for getting icon data. It just passes it along + to the indicator so that it can visualize it. Not our problem. */ static void icon_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) { @@ -156,6 +158,10 @@ icon_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateL return; } +/* This function takes the time and turns it into the appropriate + string to put on the right side of the menu item. Of course it + doesn't do that if there is a count set. If there's a count then + it gets that space. */ static void update_time (ImMenuItem * self) { @@ -200,6 +206,8 @@ update_time (ImMenuItem * self) return; } +/* This is a wrapper around update_time that matches the prototype + needed to make this a timer callback. Silly. */ static gboolean time_update_cb (gpointer data) { @@ -210,6 +218,10 @@ time_update_cb (gpointer data) return TRUE; } +/* Yet another time function. This one takes the time as formated as + we get it from libindicate and turns it into the seconds that we're + looking for. It should only be called once at the init with a new + indicator and again when the value changes. */ static void time_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, GTimeVal * propertydata, gpointer data) { @@ -240,6 +252,8 @@ time_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateL return; } +/* Callback from libindicate that is for getting the sender information + on a particular indicator. */ static void sender_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) { @@ -260,6 +274,9 @@ sender_cb (IndicateListener * listener, IndicateListenerServer * server, Indicat return; } +/* Callback saying that the count is updated, we need to either put + that on the menu item or just remove it if the count is gone. If + that's the case we can update time. */ static void count_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) { @@ -267,6 +284,9 @@ count_cb (IndicateListener * listener, IndicateListenerServer * server, Indicate } +/* This is getting the attention variable that's looking at whether + this indicator should be calling for attention or not. If we are, + we need to signal that. */ static void attention_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) { @@ -274,6 +294,7 @@ attention_cb (IndicateListener * listener, IndicateListenerServer * server, Indi } +/* Callback when the item gets clicked on from the Messaging Menu */ static void activate_cb (ImMenuItem * self, gpointer data) { @@ -282,6 +303,8 @@ activate_cb (ImMenuItem * self, gpointer data) indicate_listener_display(priv->listener, priv->server, priv->indicator); } +/* Callback when a property gets modified. It figures out which one + got modified and notifies the appropriate person. */ void indicator_modified_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * type, gchar * property, ImMenuItem * self) { -- cgit v1.2.3 From 43f6131be305835947b565d0afcc0dc11660e218 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:06:18 -0500 Subject: oops forgot to remove type from the modified one, oops. --- src/im-menu-item.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 2d361ac..75da527 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -83,7 +83,6 @@ static void activate_cb (ImMenuItem * self, static void indicator_modified_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, - gchar * type, gchar * property, ImMenuItem * self); @@ -306,7 +305,7 @@ activate_cb (ImMenuItem * self, gpointer data) /* Callback when a property gets modified. It figures out which one got modified and notifies the appropriate person. */ void -indicator_modified_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * type, gchar * property, ImMenuItem * self) +indicator_modified_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, ImMenuItem * self) { ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(self); @@ -314,6 +313,8 @@ indicator_modified_cb (IndicateListener * listener, IndicateListenerServer * ser if (INDICATE_LISTENER_INDICATOR_ID(indicator) != INDICATE_LISTENER_INDICATOR_ID(priv->indicator)) return; if (server != priv->server) return; + /* Determine which property has been changed and request the + value go to the appropriate callback. */ if (!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_NAME)) { indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_NAME, sender_cb, self); } else if (!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_TIME)) { -- cgit v1.2.3 From 5c2ee1f5f3604fa095f2e8c401fd71d02650067a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:12:17 -0500 Subject: Making the sender support the name attribute and clean up the code a bit. --- src/im-menu-item.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 75da527..5d397a5 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -258,13 +258,18 @@ sender_cb (IndicateListener * listener, IndicateListenerServer * server, Indicat { g_debug("Got Sender Information"); ImMenuItem * self = IM_MENU_ITEM(data); - if (self == NULL) { - g_error("Menu Item callback called without a menu item"); - return; - } - if (property == NULL || g_strcmp0(property, "sender")) { - g_warning("Sender callback called without being sent the sender. We got '%s' with value '%s'.", property, propertydata); + /* Our data should be right */ + g_return_if_fail(self != NULL); + /* We should have a property name */ + g_return_if_fail(property != NULL); + /* The Property should be sender or name */ + g_return_if_fail(!g_strcmp0(property, "sender") || !g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_NAME)); + + /* We might get the sender variable returning a + null string as it doesn't exist on newer clients + but we don't want to listen to that. */ + if (!g_strcmp0(property, "sender") && property[0] == '\0') { return; } -- cgit v1.2.3 From 1b860bf5516f760774881bbb9dec90cea75109f8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:14:21 -0500 Subject: We're tracking count instead of whether we should show the time as a boolean. --- src/im-menu-item.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 5d397a5..193b1a4 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -47,7 +47,7 @@ struct _ImMenuItemPrivate IndicateListenerIndicator * indicator; glong seconds; - gboolean show_time; + gchar * count; gulong indicator_changed; guint time_update_min; @@ -166,8 +166,7 @@ update_time (ImMenuItem * self) { ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(self); - if (!priv->show_time) { - dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), INDICATOR_MENUITEM_PROP_RIGHT, ""); + if (priv->count != NULL) { return; } @@ -349,7 +348,7 @@ im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, priv->listener = listener; priv->server = server; priv->indicator = indicator; - priv->show_time = TRUE; + priv->count = NULL; priv->time_update_min = 0; dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), "type", INDICATOR_MENUITEM_TYPE); -- cgit v1.2.3 From 567920a040c541ad10dfc53844ca9f5bd1e22a21 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:15:38 -0500 Subject: Ask for all the properties up front. --- src/im-menu-item.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 193b1a4..36ae2f6 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -353,9 +353,12 @@ im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), "type", INDICATOR_MENUITEM_TYPE); + indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_NAME, sender_cb, self); + indicate_listener_get_property_time(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_TIME, time_cb, self); + indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_ICON, icon_cb, self); + indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_COUNT, count_cb, self); + indicate_listener_get_property(listener, server, indicator, INDICATE_INDICATOR_MESSAGES_PROP_ATTENTION, attention_cb, self); indicate_listener_get_property(listener, server, indicator, "sender", sender_cb, self); - indicate_listener_get_property_time(listener, server, indicator, "time", time_cb, self); - indicate_listener_get_property(listener, server, indicator, "icon", icon_cb, self); g_signal_connect(G_OBJECT(self), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), NULL); priv->indicator_changed = g_signal_connect(G_OBJECT(listener), INDICATE_LISTENER_SIGNAL_INDICATOR_MODIFIED, G_CALLBACK(indicator_modified_cb), self); -- cgit v1.2.3 From 5ce56eed0dd09f122f175971a093f07c81741206 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:22:49 -0500 Subject: Fleshing out the count item --- src/im-menu-item.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 36ae2f6..11381cf 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -284,7 +284,36 @@ static void count_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) { g_debug("Got Count Information"); + ImMenuItem * self = IM_MENU_ITEM(data); + /* Our data should be right */ + g_return_if_fail(self != NULL); + /* We should have a property name */ + g_return_if_fail(property != NULL); + /* The Property should be count */ + g_return_if_fail(!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_COUNT)); + + ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(self); + + if (propertydata == NULL || propertydata[0] == '\0') { + /* The count is either being unset or it was never + set in the first place. */ + if (priv->count != NULL) { + g_free(priv->count); + priv->count = NULL; + update_time(self); + } + return; + } + + if (priv->count != NULL) { + g_free(priv->count); + } + + priv->count = g_strdup_printf("(%s)", propertydata); + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), INDICATOR_MENUITEM_PROP_RIGHT, priv->count); + + return; } /* This is getting the attention variable that's looking at whether -- cgit v1.2.3 From c3637d885d7800bbcf045436b4b28d19a4b04fb0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:24:55 -0500 Subject: Adding in a signal for when the attention changes. --- src/im-menu-item.c | 8 ++++++++ src/im-menu-item.h | 2 ++ 2 files changed, 10 insertions(+) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 11381cf..fd93cc7 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -33,6 +33,7 @@ with this program. If not, see . enum { TIME_CHANGED, + ATTENTION_CHANGED, LAST_SIGNAL }; @@ -105,6 +106,13 @@ im_menu_item_class_init (ImMenuItemClass *klass) NULL, NULL, g_cclosure_marshal_VOID__LONG, G_TYPE_NONE, 1, G_TYPE_LONG); + signals[ATTENTION_CHANGED] = g_signal_new(IM_MENU_ITEM_SIGNAL_ATTENTION_CHANGED, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (ImMenuItemClass, attention_changed), + NULL, NULL, + g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, 1, G_TYPE_BOOLEAN); return; } diff --git a/src/im-menu-item.h b/src/im-menu-item.h index 8d0c273..5ae4f82 100644 --- a/src/im-menu-item.h +++ b/src/im-menu-item.h @@ -38,6 +38,7 @@ G_BEGIN_DECLS #define IM_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), IM_MENU_ITEM_TYPE, ImMenuItemClass)) #define IM_MENU_ITEM_SIGNAL_TIME_CHANGED "time-changed" +#define IM_MENU_ITEM_SIGNAL_ATTENTION_CHANGED "attention-changed" typedef struct _ImMenuItem ImMenuItem; typedef struct _ImMenuItemClass ImMenuItemClass; @@ -46,6 +47,7 @@ struct _ImMenuItemClass { DbusmenuMenuitemClass parent_class; void (*time_changed) (glong seconds); + void (*attention_changed) (gboolean requestit); }; struct _ImMenuItem { -- cgit v1.2.3 From 9533ec199b1fb11a911de5d8859f946af6a6f060 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:29:00 -0500 Subject: Adding an attention variable and a function to access it. --- src/im-menu-item.c | 17 +++++++++++++++++ src/im-menu-item.h | 1 + 2 files changed, 18 insertions(+) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index fd93cc7..ee91f71 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -50,6 +50,7 @@ struct _ImMenuItemPrivate glong seconds; gchar * count; gulong indicator_changed; + gboolean attention; guint time_update_min; }; @@ -387,6 +388,7 @@ im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, priv->indicator = indicator; priv->count = NULL; priv->time_update_min = 0; + priv->attention = FALSE; dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), "type", INDICATOR_MENUITEM_TYPE); @@ -403,9 +405,24 @@ im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, return self; } +/* Gets the number of seconds for the creator + of this item. */ glong im_menu_item_get_seconds (ImMenuItem * menuitem) { + g_return_val_if_fail(IS_IM_MENU_ITEM(menuitem), 0); + ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(menuitem); return priv->seconds; } + +/* Gets whether or not this indicator item is + asking for attention or not. */ +gboolean +im_menu_item_get_attention (ImMenuItem * menuitem) +{ + g_return_val_if_fail(IS_IM_MENU_ITEM(menuitem), FALSE); + + ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(menuitem); + return priv->attention; +} diff --git a/src/im-menu-item.h b/src/im-menu-item.h index 5ae4f82..1ec9bf0 100644 --- a/src/im-menu-item.h +++ b/src/im-menu-item.h @@ -57,6 +57,7 @@ struct _ImMenuItem { GType im_menu_item_get_type (void); ImMenuItem * im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator); glong im_menu_item_get_seconds (ImMenuItem * menuitem); +gboolean im_menu_item_get_attention (ImMenuItem * menuitem); G_END_DECLS -- cgit v1.2.3 From e740035a0d5605e07034ea026948cec8da3b3ee7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:32:39 -0500 Subject: Fleshing out the attention_cb to make it record the value and signal on changes. --- src/im-menu-item.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index ee91f71..d64a917 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -332,7 +332,30 @@ static void attention_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) { g_debug("Got Attention Information"); + ImMenuItem * self = IM_MENU_ITEM(data); + + /* Our data should be right */ + g_return_if_fail(self != NULL); + /* We should have a property name */ + g_return_if_fail(property != NULL); + /* The Property should be count */ + g_return_if_fail(!g_strcmp0(property, INDICATE_INDICATOR_MESSAGES_PROP_ATTENTION)); + ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(self); + + gboolean wantit; + if (propertydata == NULL || propertydata[0] == '\0' || !g_strcmp0(propertydata, "false")) { + wantit = FALSE; + } else { + wantit = TRUE; + } + + if (priv->attention != wantit) { + priv->attention = wantit; + g_signal_emit(G_OBJECT(self), signals[ATTENTION_CHANGED], 0, wantit, TRUE); + } + + return; } /* Callback when the item gets clicked on from the Messaging Menu */ -- cgit v1.2.3 From 486c49f150ed875ee1f39a002d6fe95efc7b208f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 16:46:48 -0500 Subject: Setting the property on the dbusmenu menuitem as well --- src/im-menu-item.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 52cf80c..7f82dba 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -478,6 +478,7 @@ im_menu_item_show (ImMenuItem * menuitem, gboolean show) again if we're being shown, otherwise no. */ g_signal_emit(G_OBJECT(menuitem), signals[ATTENTION_CHANGED], 0, priv->show, TRUE); } + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(menuitem), DBUSMENU_MENUITEM_PROP_VISIBLE, priv->show ? "true" : "false"); return; } -- cgit v1.2.3 From e8505fb54db95018b89d29682f507fbb8e56cad2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 4 Sep 2009 17:31:29 -0500 Subject: Adding in a small function to access the show variable. --- src/im-menu-item.c | 12 ++++++++++++ src/im-menu-item.h | 1 + 2 files changed, 13 insertions(+) (limited to 'src/im-menu-item.c') diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 7f82dba..03cea5e 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -482,3 +482,15 @@ im_menu_item_show (ImMenuItem * menuitem, gboolean show) return; } + +/* Check to see if this item is shown. Accessor for the + internal variable. */ +gboolean +im_menu_item_shown (ImMenuItem * menuitem) +{ + g_return_val_if_fail(IS_IM_MENU_ITEM(menuitem), FALSE); + + ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(menuitem); + + return priv->show; +} diff --git a/src/im-menu-item.h b/src/im-menu-item.h index 244c32a..4279c2e 100644 --- a/src/im-menu-item.h +++ b/src/im-menu-item.h @@ -59,6 +59,7 @@ ImMenuItem * im_menu_item_new (IndicateListener * listener, IndicateListenerServ glong im_menu_item_get_seconds (ImMenuItem * menuitem); gboolean im_menu_item_get_attention (ImMenuItem * menuitem); void im_menu_item_show (ImMenuItem * menuitem, gboolean show); +gboolean im_menu_item_shown (ImMenuItem * menuitem); G_END_DECLS -- cgit v1.2.3