raster pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=e89f620324750aae8de9b4d968ee706df5fb4144

commit e89f620324750aae8de9b4d968ee706df5fb4144
Author: Andrii Kroitor <an.kroi...@samsung.com>
Date:   Sat Nov 16 09:50:32 2013 +0900

    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
---
 src/bin/test_main_menu.c  | 9 +++++----
 src/lib/elm_dbus_menu.c   | 1 +
 src/lib/elm_menu.c        | 5 ++++-
 src/lib/elm_priv.h        | 1 +
 src/lib/elm_widget_menu.h | 1 +
 5 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/bin/test_main_menu.c b/src/bin/test_main_menu.c
index e21f4cb..846cc71 100644
--- a/src/bin/test_main_menu.c
+++ b/src/bin/test_main_menu.c
@@ -2,13 +2,14 @@
 # include "elementary_config.h"
 #endif
 #include <Elementary.h>
-
-
 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/src/lib/elm_dbus_menu.c b/src/lib/elm_dbus_menu.c
index 9c2287b..798ff13 100644
--- a/src/lib/elm_dbus_menu.c
+++ b/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/src/lib/elm_menu.c b/src/lib/elm_menu.c
index 9741188..d0e31de 100644
--- a/src/lib/elm_menu.c
+++ b/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/src/lib/elm_priv.h b/src/lib/elm_priv.h
index 8b58466..110b615 100644
--- a/src/lib/elm_priv.h
+++ b/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/src/lib/elm_widget_menu.h b/src/lib/elm_widget_menu.h
index 03e3ef0..2bde15b 100644
--- a/src/lib/elm_widget_menu.h
+++ b/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

-- 


Reply via email to