diff --git a/legacy/elementary/src/bin/test_menu.c b/legacy/elementary/src/bin/test_menu.c index 47c17def93..03e965f83c 100644 --- a/legacy/elementary/src/bin/test_menu.c +++ b/legacy/elementary/src/bin/test_menu.c @@ -24,13 +24,13 @@ _populate_4(Elm_Object_Item *menu_it) elm_menu_item_separator_add(menu, menu_it); menu_it2 = elm_menu_item_add(menu, menu_it, "go-last", "Disabled item", NULL, NULL); - elm_menu_item_disabled_set(menu_it2, EINA_TRUE); + elm_object_item_disabled_set(menu_it2, EINA_TRUE); menu_it2 = elm_menu_item_add(menu, menu_it, "go-next", "Disabled item", NULL, NULL); - elm_menu_item_disabled_set(menu_it2, EINA_TRUE); + elm_object_item_disabled_set(menu_it2, EINA_TRUE); menu_it2 = elm_menu_item_add(menu, menu_it, "go-up", "Disabled item", NULL, NULL); - elm_menu_item_disabled_set(menu_it2, EINA_TRUE); + elm_object_item_disabled_set(menu_it2, EINA_TRUE); } static void @@ -44,7 +44,7 @@ _populate_3(Elm_Object_Item *menu_it) elm_menu_item_separator_add(menu, menu_it); menu_it2 = elm_menu_item_add(menu, menu_it, "media-playback-stop", "Disabled item", NULL, NULL); - elm_menu_item_disabled_set(menu_it2, EINA_TRUE); + elm_object_item_disabled_set(menu_it2, EINA_TRUE); } static void @@ -71,7 +71,7 @@ _populate_2(Elm_Object_Item *menu_it) menu_it3 = elm_menu_item_add(menu, menu_it, "system-run", "Disabled item", NULL, NULL); - elm_menu_item_disabled_set(menu_it3, EINA_TRUE); + elm_object_item_disabled_set(menu_it3, EINA_TRUE); _populate_4(menu_it2); } diff --git a/legacy/elementary/src/examples/menu_example_01.c b/legacy/elementary/src/examples/menu_example_01.c index 5761797107..257eb19610 100644 --- a/legacy/elementary/src/examples/menu_example_01.c +++ b/legacy/elementary/src/examples/menu_example_01.c @@ -59,7 +59,7 @@ elm_main(int argc, char **argv) elm_menu_item_add(menu, menu_it, "window-new", "sub menu", NULL, NULL); menu_it = elm_menu_item_add(menu, NULL, NULL, "third item", NULL, NULL); - elm_menu_item_disabled_set(menu_it, EINA_TRUE); + elm_object_item_disabled_set(menu_it, EINA_TRUE); evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _show, menu); evas_object_show(menu); diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index d46106a666..55edaef4a3 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -15973,8 +15973,13 @@ extern "C" { * * Signals that you can add callbacks for are: * @li "clicked" - the user clicked the empty space in the menu to dismiss. - * event_info is NULL. * + * Default contents parts of the menu items that you can use for are: + * @li "default" - A main content of the menu item + * + * Default text parts of the menu items that you can use for are: + * @li "default" - label in the menu item + * * @see @ref tutorial_menu * @{ */ @@ -16033,10 +16038,11 @@ extern "C" { /** * @brief Get the Evas_Object of an Elm_Menu_Item * - * @param item The menu item object. + * @param it The menu item object. * @return The edje object containing the swallowed content * * @warning Don't manipulate this object! + * */ EAPI Evas_Object *elm_menu_item_object_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); /** @@ -16073,15 +16079,18 @@ extern "C" { * * @warning Don't use this funcion on items created with * elm_menu_item_add_object() or elm_menu_item_separator_add(). + * + * @deprecated Use elm_object_item_text_set() instead */ - EAPI void elm_menu_item_label_set(Elm_Object_Item *it, const char *label) EINA_ARG_NONNULL(1); + EINA_DEPRECATED EAPI void elm_menu_item_label_set(Elm_Object_Item *it, const char *label) EINA_ARG_NONNULL(1); /** * @brief Get the label of a menu item * * @param it The menu item object. * @return The label of @p item + * @deprecated Use elm_object_item_text_get() instead */ - EAPI const char *elm_menu_item_label_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); + EINA_DEPRECATED EAPI const char *elm_menu_item_label_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); /** * @brief Set the icon of a menu item to the standard icon with name @p icon * @@ -16109,8 +16118,10 @@ extern "C" { * * Use this function to change the object swallowed by a menu item, deleting * any previously swallowed object. + * + * @deprecated Use elm_object_item_content_set() instead */ - EAPI Eina_Bool elm_menu_item_object_content_set(Elm_Object_Item *it, Evas_Object *obj) EINA_ARG_NONNULL(1); + EINA_DEPRECATED EAPI Eina_Bool elm_menu_item_object_content_set(Elm_Object_Item *it, Evas_Object *obj) EINA_ARG_NONNULL(1); /** * @brief Get the content object of a menu item * @@ -16121,8 +16132,10 @@ extern "C" { * icon object. * * @see elm_menu_item_object_content_set() + * + * @deprecated Use elm_object_item_content_get() instead */ - EAPI Evas_Object *elm_menu_item_object_content_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); + EINA_DEPRECATED EAPI Evas_Object *elm_menu_item_object_content_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); /** * @brief Set the selected state of @p item. * @@ -16144,8 +16157,9 @@ extern "C" { * * @param it The menu item object. * @param disabled The enabled/disabled state of the item + * @deprecated Use elm_object_item_disabled_set() instead */ - EAPI void elm_menu_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled) EINA_ARG_NONNULL(1); + EINA_DEPRECATED EAPI void elm_menu_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled) EINA_ARG_NONNULL(1); /** * @brief Get the disabled state of @p item. * @@ -16153,8 +16167,9 @@ extern "C" { * @return The enabled/disabled state of the item * * @see elm_menu_item_disabled_set() + * @deprecated Use elm_object_item_disabled_get() instead */ - EAPI Eina_Bool elm_menu_item_disabled_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); + EINA_DEPRECATED EAPI Eina_Bool elm_menu_item_disabled_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); /** * @brief Add a separator item to menu @p obj under @p parent. * @@ -16199,15 +16214,19 @@ extern "C" { * @return The data associated with @p item or NULL if none was set. * * This is the data set with elm_menu_add() or elm_menu_item_data_set(). + * + * @deprecated Use elm_object_item_data_get() instead */ - EAPI void *elm_menu_item_data_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); + EINA_DEPRECATED EAPI void *elm_menu_item_data_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); /** * @brief Sets the data to be associated with menu item @p item. * * @param it The item * @param data The data to be associated with @p item + * + * @deprecated Use elm_object_item_data_set() instead */ - EAPI void elm_menu_item_data_set(Elm_Object_Item *it, const void *data) EINA_ARG_NONNULL(1); + EINA_DEPRECATED EAPI void elm_menu_item_data_set(Elm_Object_Item *it, const void *data) EINA_ARG_NONNULL(1); /** * @brief Returns a list of @p item's subitems. diff --git a/legacy/elementary/src/lib/elm_menu.c b/legacy/elementary/src/lib/elm_menu.c index a1e25c980a..fc2e678aa4 100644 --- a/legacy/elementary/src/lib/elm_menu.c +++ b/legacy/elementary/src/lib/elm_menu.c @@ -21,7 +21,6 @@ struct _Elm_Menu_Item } submenu; Eina_Bool separator : 1; - Eina_Bool disabled : 1; Eina_Bool selected : 1; Eina_Bool object_item : 1; }; @@ -36,6 +35,7 @@ struct _Widget_Data static const char *widtype = NULL; static void _del_hook(Evas_Object *obj); static void _theme_hook(Evas_Object *obj); +static void _item_disable_set_hook(Elm_Object_Item *it); static void _sizing_eval(Evas_Object *obj); static void _submenu_sizing_eval(Elm_Menu_Item *parent); static void _item_sizing_eval(Elm_Menu_Item *item); @@ -117,8 +117,8 @@ _theme_hook(Evas_Object *obj) _elm_theme_object_set (obj, VIEW(item), "menu", "item_with_submenu", elm_widget_style_get(obj)); - elm_menu_item_label_set((Elm_Object_Item *) item, - item->label); + elm_object_item_text_set((Elm_Object_Item *) item, + item->label); elm_menu_item_object_icon_name_set((Elm_Object_Item *) item, item->icon_str); } @@ -126,18 +126,12 @@ _theme_hook(Evas_Object *obj) { _elm_theme_object_set(obj, VIEW(item), "menu", "item", elm_widget_style_get(obj)); - elm_menu_item_label_set((Elm_Object_Item *) item, - item->label); + elm_object_item_text_set((Elm_Object_Item *) item, + item->label); elm_menu_item_object_icon_name_set((Elm_Object_Item *) item, item->icon_str); } - if (item->disabled) - edje_object_signal_emit - (VIEW(item), "elm,state,disabled", "elm"); - else - edje_object_signal_emit - (VIEW(item), "elm,state,enabled", "elm"); - edje_object_message_signal_process(VIEW(item)); + _item_disable_set_hook((Elm_Object_Item *) item); edje_object_scale_set(VIEW(item), elm_widget_scale_get(obj) * _elm_config->scale); } @@ -145,6 +139,88 @@ _theme_hook(Evas_Object *obj) _sizing_eval(obj); } +static void +_item_text_set_hook(Elm_Object_Item *it, + const char *part, + const char *label) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it); + Elm_Menu_Item *item; + + if (part && strcmp(part, "default")) return; + + item = (Elm_Menu_Item *) it; + + eina_stringshare_replace(&item->label, label); + + if (label) + edje_object_signal_emit(VIEW(item), "elm,state,text,visible", "elm"); + else + edje_object_signal_emit(VIEW(item), "elm,state,text,hidden", "elm"); + + edje_object_message_signal_process(VIEW(item)); + edje_object_part_text_set(VIEW(item), "elm.text", label); + _sizing_eval(WIDGET(item)); +} + +static const char * +_item_text_get_hook(const Elm_Object_Item *it, const char *part) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); + if (part && strcmp(part, "default")) return NULL; + return ((Elm_Menu_Item *) it)->label; +} + +static void +_item_content_set_hook(Elm_Object_Item *it, + const char *part, + Evas_Object *content) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it); + Elm_Menu_Item *item; + + if (part && strcmp(part, "default")) return; + + item = (Elm_Menu_Item *) it; + + if (item->content) + { + elm_widget_sub_object_del(WIDGET(item), item->content); + evas_object_del(item->content); + } + + item->content = content; + + elm_widget_sub_object_add(WIDGET(item), item->content); + edje_object_part_swallow(VIEW(item), "elm.swallow.content", item->content); + _sizing_eval(WIDGET(item)); +} + +static Evas_Object * +_item_content_get_hook(const Elm_Object_Item *it, const char *part) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); + if (part && strcmp(part, "default")) return NULL; + return ((Elm_Menu_Item *) it)->content; +} + +static void +_item_disable_set_hook(Elm_Object_Item *it) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it); + Elm_Menu_Item *item = (Elm_Menu_Item *) it; + + if (elm_widget_item_disabled_get(item)) + { + edje_object_signal_emit(VIEW(item), "elm,state,disabled", "elm"); + if (item->submenu.open) _submenu_hide(item); + } + else + edje_object_signal_emit(VIEW(item), "elm,state,enabled", "elm"); + + edje_object_message_signal_process(VIEW(item)); +} + static void _sizing_eval(Evas_Object *obj) { @@ -426,8 +502,8 @@ _item_submenu_obj_create(Elm_Menu_Item *item) edje_object_mirrored_set(VIEW(item), elm_widget_mirrored_get(WIDGET(item))); _elm_theme_object_set(WIDGET(item), VIEW(item), "menu", "item_with_submenu", elm_widget_style_get(WIDGET(item))); - elm_menu_item_label_set((Elm_Object_Item *) item, - item->label); + elm_object_item_text_set((Elm_Object_Item *) item, + item->label); if (item->icon_str) elm_menu_item_object_icon_name_set((Elm_Object_Item *) item, item->icon_str); @@ -556,7 +632,6 @@ elm_menu_close(Evas_Object *obj) EAPI Evas_Object * elm_menu_item_object_get(const Elm_Object_Item *it) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); return VIEW(((Elm_Menu_Item *) it)); } @@ -576,7 +651,8 @@ _item_clone(Evas_Object *obj, Elm_Menu_Item *parent, Elm_Menu_Item *item) item->label, item->func, item->base.data); - elm_menu_item_disabled_set(new_item, item->disabled); + elm_object_item_disabled_set(new_item, + elm_widget_item_disabled_get(item)); EINA_LIST_FOREACH(item->submenu.items, iter, subitem) _item_clone(obj, (Elm_Menu_Item *) new_item, subitem); @@ -633,13 +709,20 @@ elm_menu_item_add(Evas_Object *obj, Elm_Object_Item *parent, const char *icon, c evas_object_del(icon_obj); return NULL; } + + elm_widget_item_disable_set_hook_set(subitem, _item_disable_set_hook); + elm_widget_item_text_set_hook_set(subitem, _item_text_set_hook); + elm_widget_item_text_get_hook_set(subitem, _item_text_get_hook); + elm_widget_item_content_set_hook_set(subitem, _item_content_set_hook); + elm_widget_item_content_get_hook_set(subitem, _item_content_get_hook); + subitem->base.data = data; subitem->func = func; subitem->parent = (Elm_Menu_Item *) parent; subitem->content = icon_obj; _item_obj_create(subitem); - elm_menu_item_label_set((Elm_Object_Item *) subitem, label); + elm_object_item_text_set((Elm_Object_Item *) subitem, label); elm_widget_sub_object_add(WIDGET(subitem), subitem->content); edje_object_part_swallow(VIEW(subitem), "elm.swallow.content", subitem->content); @@ -662,6 +745,12 @@ elm_menu_item_add_object(Evas_Object *obj, Elm_Object_Item *parent, Evas_Object subitem = elm_widget_item_new(obj, Elm_Menu_Item); if (!subitem) return NULL; + elm_widget_item_disable_set_hook_set(subitem, _item_disable_set_hook); + elm_widget_item_text_set_hook_set(subitem, _item_text_set_hook); + elm_widget_item_text_get_hook_set(subitem, _item_text_get_hook); + elm_widget_item_content_set_hook_set(subitem, _item_content_set_hook); + elm_widget_item_content_get_hook_set(subitem, _item_content_get_hook); + subitem->base.data = data; subitem->func = func; subitem->parent = (Elm_Menu_Item *) parent; @@ -689,26 +778,13 @@ elm_menu_item_index_get(const Elm_Object_Item *it) EAPI void elm_menu_item_label_set(Elm_Object_Item *it, const char *label) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Menu_Item *item = (Elm_Menu_Item *) it; - - eina_stringshare_replace(&item->label, label); - - if (label) - edje_object_signal_emit(VIEW(item), "elm,state,text,visible", "elm"); - else - edje_object_signal_emit(VIEW(item), "elm,state,text,hidden", "elm"); - - edje_object_message_signal_process(VIEW(item)); - edje_object_part_text_set(VIEW(item), "elm.text", label); - _sizing_eval(WIDGET(item)); + _item_text_set_hook(it, NULL, label); } EAPI const char * elm_menu_item_label_get(const Elm_Object_Item *it) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - return ((Elm_Menu_Item *) it)->label; + return _item_text_get_hook(it, NULL); } EAPI void @@ -737,26 +813,13 @@ elm_menu_item_object_icon_name_set(Elm_Object_Item *it, const char *icon) EAPI void elm_menu_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Menu_Item *item = (Elm_Menu_Item *) it; - - if (disabled == item->disabled) return; - item->disabled = !!disabled; - if (disabled) - { - edje_object_signal_emit(VIEW(item), "elm,state,disabled", "elm"); - if (item->submenu.open) _submenu_hide(item); - } - else - edje_object_signal_emit(VIEW(item), "elm,state,enabled", "elm"); - edje_object_message_signal_process(VIEW(item)); + elm_object_item_disabled_set(it, disabled); } EAPI Eina_Bool elm_menu_item_disabled_get(const Elm_Object_Item *it) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); - return ((Elm_Menu_Item *) it)->disabled; + return elm_object_item_disabled_get(it); } EAPI Elm_Object_Item * @@ -776,8 +839,14 @@ elm_menu_item_separator_add(Evas_Object *obj, Elm_Object_Item *parent) subitem = elm_widget_item_new(obj, Elm_Menu_Item); if (!subitem) return NULL; - WIDGET(subitem) = obj; - subitem->separator = 1; + + elm_widget_item_disable_set_hook_set(subitem, _item_disable_set_hook); + elm_widget_item_text_set_hook_set(subitem, _item_text_set_hook); + elm_widget_item_text_get_hook_set(subitem, _item_text_get_hook); + elm_widget_item_content_set_hook_set(subitem, _item_content_set_hook); + elm_widget_item_content_get_hook_set(subitem, _item_content_get_hook); + + subitem->separator = EINA_TRUE; _item_separator_obj_create(subitem); if (!p_item) { @@ -798,28 +867,14 @@ elm_menu_item_separator_add(Evas_Object *obj, Elm_Object_Item *parent) EAPI Eina_Bool elm_menu_item_object_content_set(Elm_Object_Item *it, Evas_Object *obj) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); - Elm_Menu_Item *item = (Elm_Menu_Item *) it; - - if (item->content) - { - elm_widget_sub_object_del(WIDGET(item), item->content); - evas_object_del(item->content); - } - - item->content = obj; - - elm_widget_sub_object_add(WIDGET(item), item->content); - edje_object_part_swallow(VIEW(item), "elm.swallow.content", item->content); - _sizing_eval(WIDGET(item)); + _item_content_set_hook(it, NULL, obj); return EINA_TRUE; } EAPI Evas_Object * elm_menu_item_object_content_get(const Elm_Object_Item *it) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - return ((Elm_Menu_Item *) it)->content; + return _item_content_get_hook(it, NULL); } EAPI const char *