From cf2ae7397e3bd0821cd4e64f69ce07602b24c0ec Mon Sep 17 00:00:00 2001 From: Andrii Kroitor Date: Sat, 16 Nov 2013 09:50:32 +0900 Subject: [PATCH] Elm_menu: fixed item disable hook for elm_dbus_menu Summary: Menu items in dbus-mode (in Ubunut/Unity) were not updated on disabled/enabled state changes. They were applied only after adding/removing an item. Reviewers: cedric, seoz, raster Reviewed By: raster CC: reutskiy.v.v Differential Revision: https://phab.enlightenment.org/D333 --- legacy/elementary/src/bin/test_main_menu.c | 9 +++++---- legacy/elementary/src/lib/elm_dbus_menu.c | 1 + legacy/elementary/src/lib/elm_menu.c | 5 ++++- legacy/elementary/src/lib/elm_priv.h | 1 + legacy/elementary/src/lib/elm_widget_menu.h | 1 + 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/legacy/elementary/src/bin/test_main_menu.c b/legacy/elementary/src/bin/test_main_menu.c index e21f4cb5af..846cc71733 100644 --- a/legacy/elementary/src/bin/test_main_menu.c +++ b/legacy/elementary/src/bin/test_main_menu.c @@ -2,13 +2,14 @@ # include "elementary_config.h" #endif #include - - static void -_click_me(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, +_click_me(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { + Elm_Object_Item *it = (Elm_Object_Item *)data; fputs(":-)\n", stderr); + int disabled = elm_object_item_disabled_get(it); + elm_object_item_disabled_set(it, !disabled); } void @@ -68,7 +69,7 @@ test_main_menu(void *data EINA_UNUSED, menu_it1 = elm_menu_item_add(menu, menu_it, NULL, "disabled item", NULL, NULL); elm_object_item_disabled_set(menu_it1, EINA_TRUE); elm_menu_item_separator_add(menu, menu_it); - elm_menu_item_add(menu, menu_it, NULL, "click me :-)", _click_me, NULL); + elm_menu_item_add(menu, menu_it, NULL, "click me :-)", _click_me, menu_it1); elm_menu_item_add(menu, menu_it, "applications-email-panel", "third item", NULL, NULL); menu_it1 = elm_menu_item_add(menu, menu_it, NULL, "sub menu", NULL, NULL); elm_menu_item_add(menu, menu_it1, NULL, "first item", NULL, NULL); diff --git a/legacy/elementary/src/lib/elm_dbus_menu.c b/legacy/elementary/src/lib/elm_dbus_menu.c index 9c2287bc52..798ff1375c 100644 --- a/legacy/elementary/src/lib/elm_dbus_menu.c +++ b/legacy/elementary/src/lib/elm_dbus_menu.c @@ -1032,5 +1032,6 @@ _elm_dbus_menu_item_delete(Elm_DBus_Menu *dbus_menu, int id) void _elm_dbus_menu_update(Elm_DBus_Menu *dbus_menu) { + dbus_menu->timestamp++; _layout_signal(dbus_menu); } diff --git a/legacy/elementary/src/lib/elm_menu.c b/legacy/elementary/src/lib/elm_menu.c index 97411884dd..d0e31de401 100644 --- a/legacy/elementary/src/lib/elm_menu.c +++ b/legacy/elementary/src/lib/elm_menu.c @@ -84,6 +84,7 @@ _item_disable_hook(Elm_Object_Item *it) else elm_layout_signal_emit(VIEW(item), "elm,state,enabled", "elm"); + if (item->dbus_menu) _elm_dbus_menu_update(item->dbus_menu); edje_object_message_signal_process(elm_layout_edje_get(VIEW(item))); } @@ -985,8 +986,10 @@ _item_add(Eo *obj, void *_pd, va_list *list) _elm_menu_item_add_helper(obj, (Elm_Menu_Item *)parent, subitem, sd); if (sd->dbus_menu) + { subitem->dbus_idx = _elm_dbus_menu_item_add(sd->dbus_menu, (Elm_Object_Item *)subitem); - + subitem->dbus_menu = sd->dbus_menu; + } *ret = (Elm_Object_Item *)subitem; } diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h index 8b5846694f..110b615ee0 100644 --- a/legacy/elementary/src/lib/elm_priv.h +++ b/legacy/elementary/src/lib/elm_priv.h @@ -437,6 +437,7 @@ const char *_elm_dbus_menu_register(Eo *obj); void _elm_dbus_menu_unregister(Eo *obj); int _elm_dbus_menu_item_add(Elm_DBus_Menu *dbus_menu, Elm_Object_Item *item); +void _elm_dbus_menu_update(Elm_DBus_Menu *dbus_menu); void _elm_dbus_menu_item_delete(Elm_DBus_Menu *dbus_menu, int id); diff --git a/legacy/elementary/src/lib/elm_widget_menu.h b/legacy/elementary/src/lib/elm_widget_menu.h index 03e3ef0c8c..2bde15bc5a 100644 --- a/legacy/elementary/src/lib/elm_widget_menu.h +++ b/legacy/elementary/src/lib/elm_widget_menu.h @@ -40,6 +40,7 @@ struct _Elm_Menu_Item const char *label; Evas_Smart_Cb func; unsigned int idx; + Elm_DBus_Menu *dbus_menu; int dbus_idx; struct