aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/im-desktop-menu.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/im-desktop-menu.c b/src/im-desktop-menu.c
index 25c83a4..e8dff6f 100644
--- a/src/im-desktop-menu.c
+++ b/src/im-desktop-menu.c
@@ -159,6 +159,22 @@ im_desktop_menu_source_removed (ImApplicationList *applist,
g_free (action);
}
+static void
+im_desktop_menu_remove_all (ImApplicationList *applist,
+ gpointer user_data)
+{
+ ImDesktopMenu *menu = user_data;
+ GHashTableIter it;
+ GMenu *section;
+
+ g_hash_table_iter_init (&it, menu->source_sections);
+ while (g_hash_table_iter_next (&it, NULL, (gpointer *) &section))
+ {
+ while (g_menu_model_get_n_items (G_MENU_MODEL (section)) > 0)
+ g_menu_remove (section, 0);
+ }
+}
+
static GMenu *
create_status_section (void)
{
@@ -237,6 +253,7 @@ im_desktop_menu_constructed (GObject *object)
g_signal_connect (applist, "app-added", G_CALLBACK (im_desktop_menu_app_added), menu);
g_signal_connect (applist, "source-added", G_CALLBACK (im_desktop_menu_source_added), menu);
g_signal_connect (applist, "source-removed", G_CALLBACK (im_desktop_menu_source_removed), menu);
+ g_signal_connect (applist, "remove-all", G_CALLBACK (im_desktop_menu_remove_all), menu);
G_OBJECT_CLASS (im_desktop_menu_parent_class)->constructed (object);
}