From abdb9c6e7bd033e8a9aa29a467e9f2e69cb6af2b Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Mon, 26 Nov 2012 17:10:04 +0100 Subject: Remove sections and "Clear All" when no sources or messages are available --- src/im-phone-menu.c | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) (limited to 'src/im-phone-menu.c') diff --git a/src/im-phone-menu.c b/src/im-phone-menu.c index f1a5074..7842920 100644 --- a/src/im-phone-menu.c +++ b/src/im-phone-menu.c @@ -59,6 +59,33 @@ im_phone_menu_foreach_item_with_action (GMenuModel *menu, } } +static void +im_phone_menu_update_toplevel (ImPhoneMenu *menu) +{ + if (g_menu_model_get_n_items (G_MENU_MODEL (menu->message_section)) || + g_menu_model_get_n_items (G_MENU_MODEL (menu->source_section))) + { + if (g_menu_model_get_n_items (G_MENU_MODEL (menu->toplevel_menu)) == 0) + { + GMenuItem *item; + + g_menu_append_section (menu->toplevel_menu, NULL, G_MENU_MODEL (menu->message_section)); + g_menu_append_section (menu->toplevel_menu, NULL, G_MENU_MODEL (menu->source_section)); + + item = g_menu_item_new ("Clear All", "remove-all"); + g_menu_item_set_attribute (item, "x-canonical-type", "s", "com.canonical.indicator.button"); + g_menu_append_item (menu->toplevel_menu, item); + + g_object_unref (item); + } + } + else + { + while (g_menu_model_get_n_items (G_MENU_MODEL (menu->toplevel_menu))) + g_menu_remove (menu->toplevel_menu, 0); + } +} + static void im_phone_menu_dispose (GObject *object) { @@ -89,20 +116,16 @@ im_phone_menu_class_init (ImPhoneMenuClass *klass) static void im_phone_menu_init (ImPhoneMenu *menu) { - GMenuItem *item; - + menu->toplevel_menu = g_menu_new (); menu->message_section = g_menu_new (); menu->source_section = g_menu_new (); - menu->toplevel_menu = g_menu_new (); - g_menu_append_section (menu->toplevel_menu, NULL, G_MENU_MODEL (menu->message_section)); - g_menu_append_section (menu->toplevel_menu, NULL, G_MENU_MODEL (menu->source_section)); - - item = g_menu_item_new ("Clear All", "remove-all"); - g_menu_item_set_attribute (item, "x-canonical-type", "s", "com.canonical.indicator.button"); - g_menu_append_item (menu->toplevel_menu, item); + g_signal_connect_swapped (menu->message_section, "items-changed", + G_CALLBACK (im_phone_menu_update_toplevel), menu); + g_signal_connect_swapped (menu->source_section, "items-changed", + G_CALLBACK (im_phone_menu_update_toplevel), menu); - g_object_unref (item); + im_phone_menu_update_toplevel (menu); } ImPhoneMenu * -- cgit v1.2.3