diff options
author | Ted Gould <ted@canonical.com> | 2009-04-07 21:51:37 -0500 |
---|---|---|
committer | Ted Gould <ted@canonical.com> | 2009-04-07 21:51:37 -0500 |
commit | fd8d087eb9d3c45a6fe54cb3ecde05f8ce333b81 (patch) | |
tree | a54a6f27de6666dfeddae85a081a2904f9f20c5e | |
parent | c04ffad1771f5d498b1f307ee9499659fe79a0ec (diff) | |
parent | a4d47b2561f84ab6ace9cd6ba5c17f15ca22ba41 (diff) | |
download | ayatana-indicator-messages-fd8d087eb9d3c45a6fe54cb3ecde05f8ce333b81.tar.gz ayatana-indicator-messages-fd8d087eb9d3c45a6fe54cb3ecde05f8ce333b81.tar.bz2 ayatana-indicator-messages-fd8d087eb9d3c45a6fe54cb3ecde05f8ce333b81.zip |
* Fixing bugs, much better.
* Making the menu item lie like it's FUSA
-rw-r--r-- | debian/changelog | 2 | ||||
-rw-r--r-- | src/im-menu-item.c | 10 | ||||
-rw-r--r-- | src/indicator-messages.c | 16 |
3 files changed, 19 insertions, 9 deletions
diff --git a/debian/changelog b/debian/changelog index 0db04d4..6808747 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ indicator-messages (0.1.4-0ubuntu2~ppa4) UNRELEASED; urgency=low * g_strcmp0 * Ah, leaks! * Incrementing + * Fixing bugs, much better. + * Making the menu item lie like it's FUSA -- Ted Gould <ted@ubuntu.com> Fri, 03 Apr 2009 16:32:49 -0500 diff --git a/src/im-menu-item.c b/src/im-menu-item.c index 737c609..6e3a461 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -44,6 +44,7 @@ struct _ImMenuItemPrivate glong seconds; gboolean show_time; + gulong indicator_changed; guint time_update_min; @@ -171,6 +172,11 @@ im_menu_item_dispose (GObject *object) if (priv->time_update_min != 0) { g_source_remove(priv->time_update_min); } + + g_signal_handler_disconnect(priv->listener, priv->indicator_changed); + priv->indicator_changed = 0; + + return; } static void @@ -326,7 +332,7 @@ indicator_modified_cb (IndicateListener * listener, IndicateListenerServer * ser /* Not meant for us */ if (INDICATE_LISTENER_INDICATOR_ID(indicator) != INDICATE_LISTENER_INDICATOR_ID(priv->indicator)) return; - if (g_strcmp0(INDICATE_LISTENER_SERVER_DBUS_NAME(server), INDICATE_LISTENER_SERVER_DBUS_NAME(priv->server))) return; + if (server != priv->server) return; if (!g_strcmp0(property, "sender")) { indicate_listener_get_property(listener, server, indicator, "sender", sender_cb, self); @@ -358,7 +364,7 @@ im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, indicate_listener_get_property_icon(listener, server, indicator, "icon", icon_cb, self); g_signal_connect(G_OBJECT(self), "activate", G_CALLBACK(activate_cb), NULL); - g_signal_connect(G_OBJECT(listener), INDICATE_LISTENER_SIGNAL_INDICATOR_MODIFIED, G_CALLBACK(indicator_modified_cb), self); + priv->indicator_changed = g_signal_connect(G_OBJECT(listener), INDICATE_LISTENER_SIGNAL_INDICATOR_MODIFIED, G_CALLBACK(indicator_modified_cb), self); return self; } diff --git a/src/indicator-messages.c b/src/indicator-messages.c index b988537..3df1329 100644 --- a/src/indicator-messages.c +++ b/src/indicator-messages.c @@ -81,6 +81,7 @@ struct _imList_t { IndicateListenerServer * server; IndicateListenerIndicator * indicator; GtkWidget * menuitem; + gulong timechange_cb; }; static gboolean @@ -380,7 +381,7 @@ subtype_cb (IndicateListener * listener, IndicateListenerServer * server, Indica g_debug("Adding to IM List"); sl_item->imList = g_list_insert_sorted(sl_item->imList, listItem, imList_sort); - g_signal_connect(G_OBJECT(menuitem), IM_MENU_ITEM_SIGNAL_TIME_CHANGED, G_CALLBACK(im_time_changed), sl_item); + listItem->timechange_cb = g_signal_connect(G_OBJECT(menuitem), IM_MENU_ITEM_SIGNAL_TIME_CHANGED, G_CALLBACK(im_time_changed), sl_item); g_debug("Placing in Shell"); menushell_location_t msl; @@ -444,19 +445,19 @@ indicator_removed (IndicateListener * listener, IndicateListenerServer * server, GList * listItem = g_list_find_custom(sl_item->imList, &listData, imList_equal); GtkWidget * menuitem = NULL; + imList_t * ilt = NULL; if (listItem != NULL) { - menuitem = ((imList_t *)listItem->data)->menuitem; + ilt = (imList_t *)listItem->data; + menuitem = ilt->menuitem; } if (!removed && menuitem != NULL) { - g_object_ref(menuitem); - g_free(listItem->data); - sl_item->imList = g_list_remove(sl_item->imList, listItem->data); + sl_item->imList = g_list_remove(sl_item->imList, ilt); + g_signal_handler_disconnect(menuitem, ilt->timechange_cb); + g_free(ilt); gtk_widget_hide(menuitem); gtk_container_remove(GTK_CONTAINER(data), menuitem); - - g_object_unref(menuitem); removed = TRUE; } @@ -476,6 +477,7 @@ get_menu_item (void) serverList = NULL; main_menu = gtk_menu_item_new(); + gtk_widget_set_name(main_menu, "fast-user-switch-menuitem"); main_image = gtk_image_new_from_icon_name("indicator-messages", DESIGN_TEAM_SIZE); gtk_widget_show(main_image); |