Brian and other interested peers, the elm menu changed WRT icon.
Expect more changes soon to the way menus are structured.


---------- 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

Reply via email to