diff options
author | Ted Gould <ted@canonical.com> | 2009-03-15 12:05:07 -0500 |
---|---|---|
committer | Ted Gould <ted@canonical.com> | 2009-03-15 12:05:07 -0500 |
commit | e6a8b5ceaa942985c67663da288a68346fea8a38 (patch) | |
tree | 8b5afea5cf91736399db31e1260099b94dfd81d7 /src/indicator-messages.c | |
parent | 772b8553ed4c398ce4e73b37198444745febf64e (diff) | |
download | ayatana-indicator-messages-e6a8b5ceaa942985c67663da288a68346fea8a38.tar.gz ayatana-indicator-messages-e6a8b5ceaa942985c67663da288a68346fea8a38.tar.bz2 ayatana-indicator-messages-e6a8b5ceaa942985c67663da288a68346fea8a38.zip |
Putting in a sorting function to make sure that the individual indicators are always below the server that they're associated with.
Diffstat (limited to 'src/indicator-messages.c')
-rw-r--r-- | src/indicator-messages.c | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/src/indicator-messages.c b/src/indicator-messages.c index 9a4ce6f..0d20468 100644 --- a/src/indicator-messages.c +++ b/src/indicator-messages.c @@ -94,8 +94,8 @@ server_added (IndicateListener * listener, IndicateListenerServer * server, gcha g_hash_table_insert(serverHash, servername, menuitem); gtk_menu_shell_prepend(menushell, GTK_WIDGET(menuitem)); - gtk_widget_show(menuitem); - gtk_widget_show(main_menu); + gtk_widget_show(GTK_WIDGET(menuitem)); + gtk_widget_show(GTK_WIDGET(main_menu)); return; } @@ -119,7 +119,7 @@ server_count_changed (AppMenuItem * appitem, guint count, gpointer data) if (count != 0) { g_debug("Setting image to 'new'"); showing_new_icon = TRUE; - gtk_image_set_from_icon_name(main_image, "indicator-messages-new", DESIGN_TEAM_SIZE); + gtk_image_set_from_icon_name(GTK_IMAGE(main_image), "indicator-messages-new", DESIGN_TEAM_SIZE); return; } @@ -140,7 +140,7 @@ server_count_changed (AppMenuItem * appitem, guint count, gpointer data) if (!we_have_indicators) { g_debug("Setting image to boring"); showing_new_icon = FALSE; - gtk_image_set_from_icon_name(main_image, "indicator-messages", DESIGN_TEAM_SIZE); + gtk_image_set_from_icon_name(GTK_IMAGE(main_image), "indicator-messages", DESIGN_TEAM_SIZE); } return; @@ -175,6 +175,29 @@ server_removed (IndicateListener * listener, IndicateListenerServer * server, gc return; } +typedef struct _menushell_location menushell_location_t; +struct _menushell_location { + const IndicateListenerServer * server; + gint position; + gboolean found; +}; + +static void +menushell_foreach_cb (gpointer data_mi, gpointer data_ms) { + menushell_location_t * msl = (menushell_location_t *)data_ms; + + if (msl->found) return; + + msl->position++; + + AppMenuItem * appmenu = APP_MENU_ITEM(data_mi); + if (!g_strcmp0(INDICATE_LISTENER_SERVER_DBUS_NAME(msl->server), INDICATE_LISTENER_SERVER_DBUS_NAME(app_menu_item_get_server(appmenu)))) { + msl->found = TRUE; + } + + return; +} + static void subtype_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data) { @@ -213,7 +236,18 @@ subtype_cb (IndicateListener * listener, IndicateListenerServer * server, Indica imList = g_list_append(imList, listItem); g_debug("Placing in Shell"); - gtk_menu_shell_prepend(menushell, GTK_WIDGET(menuitem)); + menushell_location_t msl; + msl.found = FALSE; + msl.position = 0; + msl.server = server; + + gtk_container_foreach(GTK_CONTAINER(menushell), menushell_foreach_cb, &msl); + if (msl.found) { + gtk_menu_shell_insert(menushell, GTK_WIDGET(menuitem), msl.position); + } else { + g_warning("Unable to find server menu item"); + gtk_menu_shell_append(menushell, GTK_WIDGET(menuitem)); + } } return; |