On Thu, Oct 21, 2010 at 6:54 AM, Gustavo Sverzut Barbieri <[email protected]> wrote: > Brian and other interested peers, the elm menu changed WRT icon. > Expect more changes soon to the way menus are structured.
Thanks for the heads-up. I'm glad I'm not affected this time. :-) brian > > > ---------- Forwarded message ---------- > From: Enlightenment SVN <[email protected]> > Date: Wed, Oct 20, 2010 at 7:30 PM > Subject: E SVN: acidx IN trunk/TMP/st/elementary/src: bin lib > To: [email protected] > > > Log: > [Elementary] Use elm_icon_standard_set() on Elm_Menu items. > > This breaks the API *and* the ABI, but this should be consistent with > Elm_Toolbar. We'll probably need a tweak here and there, but I really > think Elm_Menu should be rewritten. > Author: acidx > Date: 2010-10-20 14:30:00 -0700 (Wed, 20 Oct 2010) > New Revision: 53694 > > Modified: > trunk/TMP/st/elementary/src/bin/test_menu.c > trunk/TMP/st/elementary/src/bin/test_toolbar.c > trunk/TMP/st/elementary/src/lib/Elementary.h.in > trunk/TMP/st/elementary/src/lib/elm_menu.c > trunk/TMP/st/elementary/src/lib/elm_toolbar.c > > Modified: trunk/TMP/st/elementary/src/bin/test_menu.c > =================================================================== > --- trunk/TMP/st/elementary/src/bin/test_menu.c 2010-10-20 20:55:42 > UTC (rev 53693) > +++ trunk/TMP/st/elementary/src/bin/test_menu.c 2010-10-20 21:30:00 > UTC (rev 53694) > @@ -4,8 +4,7 @@ > #endif > #ifndef ELM_LIB_QUICKLAUNCH > > -static Evas_Object *win, *bg, *menu, *rect, *ic;; > -static char buf[PATH_MAX]; > +static Evas_Object *win, *bg, *menu, *rect; > > static void > _show(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, > void *event_info) > @@ -18,83 +17,38 @@ > static void > _populate_4(Elm_Menu_Item *item) > { > - Evas_Object *ic; > Elm_Menu_Item *item2; > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - elm_menu_item_add(menu, item, ic, "menu 2", NULL, NULL); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - > - elm_menu_item_add(menu, item, ic, "menu 3", NULL, NULL); > - > + elm_menu_item_add(menu, item, "go-bottom", "menu 2", NULL, NULL); > + elm_menu_item_add(menu, item, "go-first", "menu 3", NULL, NULL); > elm_menu_item_separator_add(menu, item); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - item2 = elm_menu_item_add(menu, item, ic, "Disabled item", NULL, NULL); > + item2 = elm_menu_item_add(menu, item, "go-last", "Disabled item", > NULL, NULL); > elm_menu_item_disabled_set(item2, 1); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - item2 = elm_menu_item_add(menu, item, ic, "Disabled item", NULL, NULL); > + item2 = elm_menu_item_add(menu, item, "go-next", "Disabled item", > NULL, NULL); > elm_menu_item_disabled_set(item2, 1); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - item2 = elm_menu_item_add(menu, item, ic, "Disabled item", NULL, NULL); > + item2 = elm_menu_item_add(menu, item, "go-up", "Disabled item", NULL, > NULL); > elm_menu_item_disabled_set(item2, 1); > } > > static void > _populate_3(Elm_Menu_Item *item) > { > - Evas_Object *ic; > Elm_Menu_Item *item2; > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - elm_menu_item_add(menu, item, ic, "menu 2", NULL, NULL); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - > - elm_menu_item_add(menu, item, ic, "menu 3", NULL, NULL); > - > + elm_menu_item_add(menu, item, "media-eject", "menu 2", NULL, NULL); > + elm_menu_item_add(menu, item, "media-playback-start", "menu 3", NULL, > NULL); > elm_menu_item_separator_add(menu,item); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - item2 = elm_menu_item_add(menu, item, ic, "Disabled item", NULL, NULL); > + item2 = elm_menu_item_add(menu, item, "media-playback-stop", > "Disabled item", NULL, NULL); > elm_menu_item_disabled_set(item2, 1); > } > > static void > _populate_2(Elm_Menu_Item *item) > { > - Evas_Object *ic; > Elm_Menu_Item *item2, *item3; > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - elm_menu_item_add(menu, item, ic, "menu 2", NULL, NULL); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - > - item2 = elm_menu_item_add(menu, item, ic, "menu 3", NULL, NULL); > + elm_menu_item_add(menu, item, "system-reboot", "menu 2", NULL, NULL); > + item2 = elm_menu_item_add(menu, item, "system-shutdown", "menu 3", > NULL, NULL); > > _populate_3(item2); > > @@ -106,18 +60,10 @@ > elm_menu_item_separator_add(menu,item); > elm_menu_item_separator_add(menu,item); > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - > - item2 = elm_menu_item_add(menu, item, ic, "menu 2", NULL, NULL); > - > + item2 = elm_menu_item_add(menu, item, "system-lock-screen", "menu > 2", NULL, NULL); > elm_menu_item_separator_add(menu,item); > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - item3 = elm_menu_item_add(menu, item, ic, "Disabled item", NULL, NULL); > + item3 = elm_menu_item_add(menu, item, "system-run", "Disabled > item", NULL, NULL); > elm_menu_item_disabled_set(item3, 1); > > _populate_4(item2); > @@ -128,10 +74,7 @@ > { > Elm_Menu_Item *item2; > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - item2 = elm_menu_item_add(menu, item, ic, "menu 1", NULL, NULL); > + item2 = elm_menu_item_add(menu, item, "object-rotate-left", "menu > 1", NULL, NULL); > > _populate_2(item2); > } > @@ -158,17 +101,10 @@ > menu = elm_menu_add(win); > elm_menu_item_add(menu, NULL, NULL, "first item", NULL, NULL); > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - > - item = elm_menu_item_add(menu, NULL, ic, "second item", NULL, NULL); > + item = elm_menu_item_add(menu, NULL, "mail-reply-all", "second > item", NULL, NULL); > _populate_1(item); > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - elm_menu_item_add(menu, item, ic, "sub menu", NULL, NULL); > + elm_menu_item_add(menu, item, "window-new", "sub menu", NULL, NULL); > > evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _show, > menu); > > > Modified: trunk/TMP/st/elementary/src/bin/test_toolbar.c > =================================================================== > --- trunk/TMP/st/elementary/src/bin/test_toolbar.c 2010-10-20 > 20:55:42 UTC (rev 53693) > +++ trunk/TMP/st/elementary/src/bin/test_toolbar.c 2010-10-20 > 21:30:00 UTC (rev 53694) > @@ -44,7 +44,7 @@ > void > test_toolbar(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void > *event_info __UNUSED__) > { > - Evas_Object *win, *bg, *bx, *tb, *ic, *ph, *menu; > + Evas_Object *win, *bg, *bx, *tb, *ph, *menu; > Evas_Object *ph1, *ph2, *ph3, *ph4; > Elm_Toolbar_Item *item; > Elm_Menu_Item *menu_item; > @@ -93,30 +93,15 @@ > > item = elm_toolbar_item_add(tb, "refresh", "Menu", NULL, NULL); > elm_toolbar_item_menu_set(item, 1); > - elm_toolbar_item_priority_set(item, 999999); > + elm_toolbar_item_priority_set(item, -999999); > elm_toolbar_menu_parent_set(tb, win); > menu = elm_toolbar_item_menu_get(item); > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - elm_menu_item_add(menu, NULL, ic, "Here", tb_3, ph4); > + elm_menu_item_add(menu, NULL, "edit-cut", "Here", tb_3, ph4); > + menu_item = elm_menu_item_add(menu, NULL, "edit-copy", "Comes", tb_4, > ph4); > + elm_menu_item_add(menu, menu_item, "edit-paste", "Hey ho", tb_4, ph4); > + elm_menu_item_add(menu, NULL, "edit-delete", "Elementary", tb_5, ph4); > > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - menu_item = elm_menu_item_add(menu, NULL, ic, "Comes", tb_4, ph4); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - elm_menu_item_add(menu, menu_item, ic, "hey ho", tb_4, ph4); > - > - ic = elm_icon_add(win); > - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); > - elm_icon_file_set(ic, buf, NULL); > - elm_menu_item_add(menu, NULL, ic, "Elementary", tb_5, ph4); > - > elm_box_pack_end(bx, tb); > evas_object_show(tb); > > > Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in > =================================================================== > --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-20 > 20:55:42 UTC (rev 53693) > +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-20 > 21:30:00 UTC (rev 53694) > @@ -1233,25 +1233,26 @@ > EAPI Eina_Bool elm_cursor_engine_only_set(int engine_only); > > typedef struct _Elm_Menu_Item Elm_Menu_Item; /**< Item of Elm_Menu. > Sub-type of Elm_Widget_Item */ > - EAPI Evas_Object *elm_menu_add(Evas_Object *parent); > - EAPI void elm_menu_parent_set(Evas_Object *obj, > Evas_Object *parent); > - EAPI Evas_Object *elm_menu_parent_get(const Evas_Object *obj); > - EAPI void elm_menu_move(Evas_Object *obj, Evas_Coord x, > Evas_Coord y); > - EAPI Evas_Object *elm_menu_object_get(const Elm_Menu_Item *it); > - EAPI Elm_Menu_Item *elm_menu_item_add(Evas_Object *obj, > Elm_Menu_Item *parent, Evas_Object *icon, const char *label, > Evas_Smart_Cb func, const void *data); > - EAPI void elm_menu_item_label_set(Elm_Menu_Item *item, > const char *label); > - EAPI const char *elm_menu_item_label_get(Elm_Menu_Item *item); > - EAPI void elm_menu_item_icon_set(Elm_Menu_Item *item, > Evas_Object *icon); > - EAPI Evas_Object *elm_menu_item_icon_get(Elm_Menu_Item *item); > - EAPI void elm_menu_item_disabled_set(Elm_Menu_Item > *item, Eina_Bool disabled); > - EAPI Eina_Bool elm_menu_item_disabled_get(Elm_Menu_Item *item); > - EAPI Elm_Menu_Item *elm_menu_item_separator_add(Evas_Object > *obj, Elm_Menu_Item *parent); > - EAPI Eina_Bool elm_menu_item_is_separator(Elm_Menu_Item *item); > - EAPI void elm_menu_item_del(Elm_Menu_Item *item); > - EAPI void elm_menu_item_del_cb_set(Elm_Menu_Item *it, > Evas_Smart_Cb func); > - EAPI void *elm_menu_item_data_get(const Elm_Menu_Item *it); > - EAPI void elm_menu_item_data_set(Elm_Menu_Item *item, > const void *data); > - EAPI const Eina_List *elm_menu_item_subitems_get(Elm_Menu_Item *item); > + EAPI Evas_Object *elm_menu_add(Evas_Object *parent); > + EAPI void elm_menu_parent_set(Evas_Object *obj, > Evas_Object *parent); > + EAPI Evas_Object *elm_menu_parent_get(const Evas_Object *obj); > + EAPI void elm_menu_move(Evas_Object *obj, Evas_Coord > x, Evas_Coord y); > + EAPI Evas_Object *elm_menu_object_get(const Elm_Menu_Item *it); > + EAPI Elm_Menu_Item *elm_menu_item_add(Evas_Object *obj, > Elm_Menu_Item *parent, const char *icon, const char *label, > Evas_Smart_Cb func, const void *data); > + EAPI void elm_menu_item_label_set(Elm_Menu_Item > *item, const char *label); > + EAPI const char *elm_menu_item_label_get(Elm_Menu_Item *item); > + EAPI void elm_menu_item_icon_set(Elm_Menu_Item > *item, const char *icon); > + EAPI const char *elm_menu_item_icon_get(Elm_Menu_Item *item); > + EAPI const Evas_Object *elm_menu_item_object_icon_get(Elm_Menu_Item > *item); > + EAPI void elm_menu_item_disabled_set(Elm_Menu_Item > *item, Eina_Bool disabled); > + EAPI Eina_Bool elm_menu_item_disabled_get(Elm_Menu_Item *item); > + EAPI Elm_Menu_Item *elm_menu_item_separator_add(Evas_Object > *obj, Elm_Menu_Item *parent); > + EAPI Eina_Bool elm_menu_item_is_separator(Elm_Menu_Item *item); > + EAPI void elm_menu_item_del(Elm_Menu_Item *item); > + EAPI void elm_menu_item_del_cb_set(Elm_Menu_Item > *it, Evas_Smart_Cb func); > + EAPI void *elm_menu_item_data_get(const Elm_Menu_Item *it); > + EAPI void elm_menu_item_data_set(Elm_Menu_Item > *item, const void *data); > + EAPI const Eina_List *elm_menu_item_subitems_get(Elm_Menu_Item *item); > /* smart callbacks called: > * "clicked" - the user clicked the empty space in the menu to > dismiss. event_info is NULL. > */ > > Modified: trunk/TMP/st/elementary/src/lib/elm_menu.c > =================================================================== > --- trunk/TMP/st/elementary/src/lib/elm_menu.c 2010-10-20 20:55:42 > UTC (rev 53693) > +++ trunk/TMP/st/elementary/src/lib/elm_menu.c 2010-10-20 21:30:00 > UTC (rev 53694) > @@ -16,20 +16,19 @@ > { > Elm_Widget_Item base; > Elm_Menu_Item *parent; > - > - Eina_Bool separator; > - Eina_Bool disabled; > - > - //if classic item or submenu > Evas_Object *icon; > + const char *icon_str; > const char *label; > - > Evas_Smart_Cb func; > > - //if submenu > - Eina_Bool open; > - Evas_Object *hv, *bx, *location; > - Eina_List *items; > + struct { > + Evas_Object *hv, *bx, *location; > + Eina_List *items; > + Eina_Bool open : 1; > + } submenu; > + > + Eina_Bool separator : 1; > + Eina_Bool disabled : 1; > }; > > struct _Widget_Data > @@ -45,7 +44,6 @@ > 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); > -static void _changed_size_hints(void *data, Evas *e, Evas_Object > *obj, void *event_info); > static void _submenu_hide(Elm_Menu_Item *item); > static void _submenu_open(void *data, Evas_Object *obj, const char > *emission, const char *source); > static void _parent_resize(void *data, Evas *e, Evas_Object *obj, > void *event_info); > @@ -58,12 +56,13 @@ > > elm_widget_item_pre_notify_del(item); > > - EINA_LIST_FREE(item->items, child) > + EINA_LIST_FREE(item->submenu.items, child) > _del_item(child); > > if (item->label) eina_stringshare_del(item->label); > - if (item->hv) evas_object_del(item->hv); > - if (item->location) evas_object_del(item->location); > + if (item->submenu.hv) evas_object_del(item->submenu.hv); > + if (item->submenu.location) evas_object_del(item->submenu.location); > + if (item->icon_str) eina_stringshare_del(item->icon_str); > elm_widget_item_del(item); > } > > @@ -102,24 +101,24 @@ > { > EINA_LIST_FOREACH(l, _l, item) > { > - ll = eina_list_append(ll, item->items); > + ll = eina_list_append(ll, item->submenu.items); > if (item->separator) > _elm_theme_object_set(obj, item->base.view, "menu", "separator", > elm_widget_style_get(obj)); > - else if (item->bx) > + else if (item->submenu.bx) > { > _elm_theme_object_set > (obj, item->base.view, "menu", "item_with_submenu", > elm_widget_style_get(obj)); > elm_menu_item_label_set(item, item->label); > - elm_menu_item_icon_set(item, item->icon); > + elm_menu_item_icon_set(item, item->icon_str); > } > else > { > _elm_theme_object_set(obj, item->base.view, "menu", "item", > elm_widget_style_get(obj)); > elm_menu_item_label_set(item, item->label); > - elm_menu_item_icon_set(item, item->icon); > + elm_menu_item_icon_set(item, item->icon_str); > } > if (item->disabled) > edje_object_signal_emit > @@ -165,7 +164,7 @@ > > EINA_LIST_FOREACH(wd->items,l,item) > { > - if (item->open) _submenu_sizing_eval(item); > + if (item->submenu.open) _submenu_sizing_eval(item); > } > } > > @@ -177,10 +176,10 @@ > Evas_Coord x_p, y_p, w_p, h_p, x2, y2, w2, h2, bx, by, bw, bh, px, > py, pw, ph; > Widget_Data *wd = elm_widget_data_get(parent->base.widget); > if (!wd) return; > - EINA_LIST_FOREACH(parent->items,l,item) _item_sizing_eval(item); > - evas_object_geometry_get(parent->location, &x_p, &y_p, &w_p, &h_p); > + EINA_LIST_FOREACH(parent->submenu.items, l, item) _item_sizing_eval(item); > + evas_object_geometry_get(parent->submenu.location, &x_p, &y_p, &w_p, > &h_p); > evas_object_geometry_get(parent->base.view, &x2, &y2, &w2, &h2); > - evas_object_geometry_get(parent->bx, &bx, &by, &bw, &bh); > + evas_object_geometry_get(parent->submenu.bx, &bx, &by, &bw, &bh); > evas_object_geometry_get(wd->parent, &px, &py, &pw, &ph); > > x_p = x2+w2; > @@ -194,15 +193,15 @@ > if (y_p < py) > y_p += y_p - y_p; > > - evas_object_move(parent->location, x_p, y_p); > - evas_object_resize(parent->location, bw, h_p); > - evas_object_size_hint_min_set(parent->location, bw, h_p); > - evas_object_size_hint_max_set(parent->location, bw, h_p); > - elm_hover_target_set(parent->hv, parent->location); > + evas_object_move(parent->submenu.location, x_p, y_p); > + evas_object_resize(parent->submenu.location, bw, h_p); > + evas_object_size_hint_min_set(parent->submenu.location, bw, h_p); > + evas_object_size_hint_max_set(parent->submenu.location, bw, h_p); > + elm_hover_target_set(parent->submenu.hv, parent->submenu.location); > > - EINA_LIST_FOREACH(parent->items,l,item) > + EINA_LIST_FOREACH(parent->submenu.items, l, item) > { > - if (item->open) > + if (item->submenu.open) > _submenu_sizing_eval(item); > } > } > @@ -221,12 +220,6 @@ > } > > static void > -_changed_size_hints(void *data, Evas *e __UNUSED__, Evas_Object *obj > __UNUSED__, void *event_info __UNUSED__) > -{ > - _sizing_eval(data); > -} > - > -static void > _menu_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj > __UNUSED__, void *event_info __UNUSED__) > { > _sizing_eval(data); > @@ -242,7 +235,7 @@ > _item_move_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj > __UNUSED__, void *event_info __UNUSED__) > { > Elm_Menu_Item *item = data; > - if (item->open) _submenu_sizing_eval(item); > + if (item->submenu.open) _submenu_sizing_eval(item); > } > > static void > @@ -264,7 +257,7 @@ > > EINA_LIST_FOREACH(wd->items, l, item2) > { > - if (item2->open) _submenu_hide(item2); > + if (item2->submenu.open) _submenu_hide(item2); > } > } > > @@ -273,11 +266,11 @@ > { > Eina_List *l; > Elm_Menu_Item *item2; > - evas_object_hide(item->hv); > - item->open = EINA_FALSE; > - EINA_LIST_FOREACH(item->items, l, item2) > + evas_object_hide(item->submenu.hv); > + item->submenu.open = EINA_FALSE; > + EINA_LIST_FOREACH(item->submenu.items, l, item2) > { > - if (item2->open) _submenu_hide(item2); > + if (item2->submenu.open) _submenu_hide(item2); > } > } > > @@ -285,9 +278,9 @@ > _menu_item_select(void *data, Evas_Object *obj __UNUSED__, const char > *emission __UNUSED__, const char *source __UNUSED__) > { > Elm_Menu_Item *it = data; > - if (it->items) > + if (it->submenu.items) > { > - if (!it->open) _submenu_open(it, NULL, NULL, NULL); > + if (!it->submenu.open) _submenu_open(it, NULL, NULL, NULL); > else _submenu_hide(it); > } > else > @@ -304,9 +297,9 @@ > Elm_Menu_Item *item = data; > if (item->parent) > { > - EINA_LIST_FOREACH(item->parent->items, l, item2) > + EINA_LIST_FOREACH(item->parent->submenu.items, l, item2) > { > - if ((item2->open) && (item2 != item)) _submenu_hide(item2); > + if ((item2->submenu.open) && (item2 != item)) > _submenu_hide(item2); > } > } > else > @@ -314,7 +307,7 @@ > Widget_Data *wd = elm_widget_data_get(item->base.widget); > EINA_LIST_FOREACH(wd->items, l, item2) > { > - if ((item2->open) && (item2 != item)) _submenu_hide(item2); > + if ((item2->submenu.open) && (item2 != item)) > _submenu_hide(item2); > } > } > } > @@ -323,8 +316,8 @@ > _submenu_open(void *data, Evas_Object *obj __UNUSED__, const char > *emission __UNUSED__, const char *source __UNUSED__) > { > Elm_Menu_Item *it = data; > - it->open = EINA_TRUE; > - evas_object_show(it->hv); > + it->submenu.open = EINA_TRUE; > + evas_object_show(it->submenu.hv); > _sizing_eval(it->base.widget); > } > > @@ -371,27 +364,27 @@ > { > Widget_Data *wd = elm_widget_data_get(item->base.widget); > if (!wd) return; > - item->location = elm_icon_add(wd->bx); > - item->hv = elm_hover_add(wd->bx); > - elm_hover_target_set(item->hv, item->location); > - elm_hover_parent_set(item->hv, wd->parent); > - elm_object_style_set(item->hv, "submenu"); > + item->submenu.location = elm_icon_add(wd->bx); > + item->submenu.hv = elm_hover_add(wd->bx); > + elm_hover_target_set(item->submenu.hv, item->submenu.location); > + elm_hover_parent_set(item->submenu.hv, wd->parent); > + elm_object_style_set(item->submenu.hv, "submenu"); > > - item->bx = elm_box_add(wd->bx); > - evas_object_size_hint_weight_set(item->bx, EVAS_HINT_EXPAND, > EVAS_HINT_EXPAND); > - evas_object_show(item->bx); > - elm_hover_content_set(item->hv, > elm_hover_best_content_location_get(item->hv, > ELM_HOVER_AXIS_VERTICAL), item->bx); > + item->submenu.bx = elm_box_add(wd->bx); > + evas_object_size_hint_weight_set(item->submenu.bx, > EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); > + evas_object_show(item->submenu.bx); > + elm_hover_content_set(item->submenu.hv, > elm_hover_best_content_location_get(item->submenu.hv, > ELM_HOVER_AXIS_VERTICAL), item->submenu.bx); > > _elm_theme_object_set(item->base.widget, item->base.view, "menu", > "item_with_submenu", elm_widget_style_get(item->base.widget)); > elm_menu_item_label_set(item, item->label); > - elm_menu_item_icon_set(item, item->icon); > + elm_menu_item_icon_set(item, item->icon_str); > > edje_object_signal_callback_add(item->base.view, "elm,action,open", "", > _submenu_open, item); > evas_object_event_callback_add(item->base.view, EVAS_CALLBACK_MOVE, > _item_move_resize, item); > evas_object_event_callback_add(item->base.view, > EVAS_CALLBACK_RESIZE, _item_move_resize, item); > > - evas_object_event_callback_add(item->bx, EVAS_CALLBACK_RESIZE, > _menu_resize, item->base.widget); > + evas_object_event_callback_add(item->submenu.bx, > EVAS_CALLBACK_RESIZE, _menu_resize, item->base.widget); > } > > /** > @@ -469,10 +462,10 @@ > { > EINA_LIST_FOREACH(l, _l, item) > { > - if (item->hv) > + if (item->submenu.hv) > { > - elm_hover_parent_set(item->hv, parent); > - ll = eina_list_append(ll, item->items); > + elm_hover_parent_set(item->submenu.hv, parent); > + ll = eina_list_append(ll, item->submenu.items); > } > } > } > @@ -542,28 +535,39 @@ > * @ingroup Menu > */ > EAPI Elm_Menu_Item * > -elm_menu_item_add(Evas_Object *obj, Elm_Menu_Item *parent, > Evas_Object *icon, const char *label, Evas_Smart_Cb func, const void > *data) > +elm_menu_item_add(Evas_Object *obj, Elm_Menu_Item *parent, const char > *icon, const char *label, Evas_Smart_Cb func, const void *data) > { > Elm_Menu_Item *subitem; > ELM_CHECK_WIDTYPE(obj, widtype) NULL; > Widget_Data *wd = elm_widget_data_get(obj); > + Evas_Object *icon_obj; > > if (!wd) return NULL; > + icon_obj = elm_icon_add(obj); > + if (!icon_obj) return NULL; > subitem = elm_widget_item_new(obj, Elm_Menu_Item); > - if (!subitem) return NULL; > + if (!subitem) > + { > + evas_object_del(icon_obj); > + return NULL; > + } > subitem->base.data = data; > subitem->func = func; > subitem->parent = parent; > + subitem->icon = icon_obj; > > _item_obj_create(subitem); > elm_menu_item_label_set(subitem, label); > + > + elm_widget_sub_object_add(subitem->base.widget, subitem->icon); > + edje_object_part_swallow(subitem->base.view, > "elm.swallow.content", subitem->icon); > elm_menu_item_icon_set(subitem, icon); > > if (parent) > { > - if (!parent->bx) _item_submenu_obj_create(parent); > - elm_box_pack_end(parent->bx, subitem->base.view); > - parent->items = eina_list_append(parent->items, subitem); > + if (!parent->submenu.bx) _item_submenu_obj_create(parent); > + elm_box_pack_end(parent->submenu.bx, subitem->base.view); > + parent->submenu.items = > eina_list_append(parent->submenu.items, subitem); > } > else > { > @@ -624,20 +628,21 @@ > * @ingroup Menu > */ > EAPI void > -elm_menu_item_icon_set(Elm_Menu_Item *item, Evas_Object *icon) > +elm_menu_item_icon_set(Elm_Menu_Item *item, const char *icon) > { > - if(item->icon == icon) return; > - if (item->icon) evas_object_del(item->icon); > - item->icon = icon; > - if (icon) > + char icon_tmp[512]; > + if (!item) return; > + if (!icon || !*icon) return; > + if (item->icon_str && !strcmp(item->icon_str, icon)) return; > + if (snprintf(icon_tmp, sizeof(icon_tmp), "menu/%s", icon) > 0 && > + elm_icon_standard_set(item->icon, icon_tmp)) > { > - elm_widget_sub_object_add(item->base.widget, icon); > - evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, > - _changed_size_hints, > item->base.widget); > - edje_object_part_swallow(item->base.view, "elm.swallow.content", > icon); > + eina_stringshare_replace(&item->icon_str, icon); > edje_object_signal_emit(item->base.view, > "elm,state,icon,visible", "elm"); > - edje_object_message_signal_process(item->base.view); > } > + else > + edje_object_signal_emit(item->base.view, "elm,state,icon,hidden", > "elm"); > + edje_object_message_signal_process(item->base.view); > _sizing_eval(item->base.widget); > } > > @@ -657,7 +662,7 @@ > if (disabled) > { > edje_object_signal_emit(item->base.view, "elm,state,disabled", "elm"); > - if (item->open) _submenu_hide(item); > + if (item->submenu.open) _submenu_hide(item); > } > else > edje_object_signal_emit(item->base.view, "elm,state,enabled", "elm"); > @@ -712,36 +717,42 @@ > } > else > { > - if (!parent->bx) _item_submenu_obj_create(parent); > - elm_box_pack_end(parent->bx, subitem->base.view); > - parent->items = eina_list_append(parent->items, subitem); > + if (!parent->submenu.bx) _item_submenu_obj_create(parent); > + elm_box_pack_end(parent->submenu.bx, subitem->base.view); > + parent->submenu.items = > eina_list_append(parent->submenu.items, subitem); > } > _sizing_eval(obj); > return subitem; > } > > - > /** > - * Deletes an item from the menu. > + * Get the icon object from a menu item > * > - * @param item The item to delete > + * @param it The menu item object > + * @return The icon object or NULL if there's no icon > * > * @ingroup Menu > */ > +EAPI const Evas_Object * > +elm_menu_item_object_icon_get(Elm_Menu_Item *item) > +{ > + if (!item) return NULL; > + return (const Evas_Object *)item->icon; > +} > > /** > - * Get the icon of a menu item > + * Get the string representation from the icon of a menu item > * > * @param it The menu item object. > - * @return The icon object of @p item or NULL > + * @return The string representation of @p item's icon or NULL > * > * @ingroup Menu > */ > -EAPI Evas_Object * > +EAPI const char * > elm_menu_item_icon_get(Elm_Menu_Item *item) > { > if (!item) return NULL; > - return item->icon; > + return item->icon_str; > } > > /** > @@ -759,6 +770,13 @@ > return item->separator; > } > > +/** > + * Deletes an item from the menu. > + * > + * @param item The item to delete. > + * > + * @ingroup Menu > + */ > EAPI void > elm_menu_item_del(Elm_Menu_Item *item) > { > @@ -767,14 +785,14 @@ > if (!item) return; > elm_widget_item_pre_notify_del(item); > > - EINA_LIST_FREE(item->items, _item) elm_menu_item_del(_item); > + EINA_LIST_FREE(item->submenu.items, _item) elm_menu_item_del(_item); > if (item->label) eina_stringshare_del(item->label); > if (item->icon) evas_object_del(item->icon); > - if (item->hv) evas_object_del(item->hv); > - if (item->location) evas_object_del(item->location); > + if (item->submenu.hv) evas_object_del(item->submenu.hv); > + if (item->submenu.location) evas_object_del(item->submenu.location); > > if (item->parent) > - item->parent->items = eina_list_remove(item->parent->items, item); > + item->parent->submenu.items = > eina_list_remove(item->parent->submenu.items, item); > else > { > Widget_Data *wd = elm_widget_data_get(item->base.widget); > @@ -838,5 +856,5 @@ > elm_menu_item_subitems_get(Elm_Menu_Item *item) > { > if (!item) return NULL; > - return item->items; > + return item->submenu.items; > } > > Modified: trunk/TMP/st/elementary/src/lib/elm_toolbar.c > =================================================================== > --- trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2010-10-20 > 20:55:42 UTC (rev 53693) > +++ trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2010-10-20 > 21:30:00 UTC (rev 53694) > @@ -358,14 +358,7 @@ > else > { > Elm_Menu_Item *item; > - Evas_Object *icon = elm_icon_add(menu); > - if (icon && !_item_icon_set(icon, > "menu/", it->icon_str)) > - { > - evas_object_del(icon); > - icon = NULL; > - } > - > - item = elm_menu_item_add(menu, NULL, > icon, it->label, > + item = elm_menu_item_add(menu, NULL, > it->icon_str, it->label, > it->func, it->base.data); > elm_menu_item_disabled_set(item, it->disabled); > } > > > ------------------------------------------------------------------------------ > Nokia and AT&T present the 2010 Calling All Innovators-North America contest > Create new apps & games for the Nokia N8 for consumers in U.S. and Canada > $10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing > Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store > http://p.sf.net/sfu/nokia-dev2dev > _______________________________________________ > enlightenment-svn mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > > > > -- > Gustavo Sverzut Barbieri > http://profusion.mobi embedded systems > -------------------------------------- > MSN: [email protected] > Skype: gsbarbieri > Mobile: +55 (19) 9225-2202 > > ------------------------------------------------------------------------------ > Nokia and AT&T present the 2010 Calling All Innovators-North America contest > Create new apps & games for the Nokia N8 for consumers in U.S. and Canada > $10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing > Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store > http://p.sf.net/sfu/nokia-dev2dev > _______________________________________________ > enlightenment-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- brian ------------------ Cool-Karaoke - The smallest recording studio, in your palm, open-sourced http://cool-idea.com.tw/ iMaGiNaTiOn iS mOrE iMpOrTaNt tHaN kNoWlEdGe ------------------------------------------------------------------------------ Nokia and AT&T present the 2010 Calling All Innovators-North America contest Create new apps & games for the Nokia N8 for consumers in U.S. and Canada $10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store http://p.sf.net/sfu/nokia-dev2dev _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
