From: Viktor Kojouharov Date: Mon, 21 Aug 2006 20:03:09 +0000 (+0000) Subject: removed e_menu_item_icon_object_set as it could have never worked properly. X-Git-Tag: submit/efl/20131021.015651~13093 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d0751b32589220a5d6dc3c4c6aed745a3388a964;p=platform%2Fupstream%2Fenlightenment.git removed e_menu_item_icon_object_set as it could have never worked properly. now, the menu icon can be set properly upon realization with the e_menu_item_realize_callback_set function. rewrote the clients menu to use the border icon, and be sorted like the winselector. SVN revision: 25026 --- diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index 6e6177c..d4f14db 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -37,8 +37,10 @@ static void _e_int_menus_config_pre_cb (void *data, E_Menu *m); static void _e_int_menus_config_free_hook (void *obj); static void _e_int_menus_config_item_cb (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_clients_pre_cb (void *data, E_Menu *m); +static void _e_int_menus_clients_item_create (E_Border *bd, E_Menu *m); static void _e_int_menus_clients_free_hook (void *obj); static void _e_int_menus_clients_item_cb (void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_int_menus_clients_icon_cb (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_clients_cleanup_cb (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_desktops_pre_cb (void *data, E_Menu *m); static void _e_int_menus_desktops_item_cb (void *data, E_Menu *m, E_Menu_Item *mi); @@ -685,21 +687,23 @@ static void _e_int_menus_clients_pre_cb(void *data, E_Menu *m) { E_Menu_Item *mi; - Evas_List *l, *borders = NULL; - E_Menu *root; + Evas_List *l, *borders = NULL, *alt = NULL; E_Zone *zone = NULL; + E_Desk *desk = NULL; const char *s; e_menu_pre_activate_callback_set(m, NULL, NULL); - root = e_menu_root_get(m); /* get the current clients */ - if (root) - zone = root->zone; + zone = + e_zone_current_get(e_container_current_get(e_manager_current_get())); + desk = e_desk_current_get(zone); for (l = e_border_client_list(); l; l = l->next) { E_Border *border; border = l->data; + if (border->client.netwm.state.skip_taskbar) continue; + if (border->user_skip_winlist) continue; if ((border->zone == zone) || (border->iconic)) borders = evas_list_append(borders, border); } @@ -714,31 +718,22 @@ _e_int_menus_clients_pre_cb(void *data, E_Menu *m) for (l = borders; l; l = l->next) { E_Border *bd = l->data; - E_App *a; - const char *title; - - title = e_border_name_get(bd); - mi = e_menu_item_new(m); - e_menu_item_check_set(mi, 1); - if ((title) && (title[0])) - e_menu_item_label_set(mi, title); - else - e_menu_item_label_set(mi, _("No name!!")); - /* ref the border as we implicitly unref it in the callback */ - e_object_ref(E_OBJECT(bd)); -// e_object_breadcrumb_add(E_OBJECT(bd), "clients_menu"); - e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd); - if (!bd->iconic) e_menu_item_toggle_set(mi, 1); - a = bd->app; - if (a) + + if (bd->desk != desk) { - if (!((a->icon_class) && - (e_util_menu_item_edje_icon_list_set(mi, a->icon_class)))) - { - e_menu_item_icon_edje_set(mi, a->path, "icon"); - if (a->icon_path) e_menu_item_icon_path_set(mi, a->icon_path); - } + alt = evas_list_append(alt, bd); + continue; } + _e_int_menus_clients_item_create(bd, m); + } + mi = e_menu_item_new(m); + e_menu_item_separator_set(mi, 1); + + for (l = alt; l; l = l->next) + { + E_Border *bd = l->data; + + _e_int_menus_clients_item_create(bd, m); } mi = e_menu_item_new(m); e_menu_item_separator_set(mi, 1); @@ -755,6 +750,27 @@ _e_int_menus_clients_pre_cb(void *data, E_Menu *m) } static void +_e_int_menus_clients_item_create(E_Border *bd, E_Menu *m) +{ + E_Menu_Item *mi; + const char *title; + + title = e_border_name_get(bd); + mi = e_menu_item_new(m); + e_menu_item_check_set(mi, 1); + if ((title) && (title[0])) + e_menu_item_label_set(mi, title); + else + e_menu_item_label_set(mi, _("No name!!")); + /* ref the border as we implicitly unref it in the callback */ + e_object_ref(E_OBJECT(bd)); +/* e_object_breadcrumb_add(E_OBJECT(bd), "clients_menu");*/ + e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd); + e_menu_item_realize_callback_set(mi, _e_int_menus_clients_icon_cb, bd); + if (!bd->iconic) e_menu_item_toggle_set(mi, 1); +} + +static void _e_int_menus_clients_free_hook(void *obj) { E_Menu *m; @@ -799,6 +815,21 @@ _e_int_menus_clients_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) } static void +_e_int_menus_clients_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Border *bd; + Evas_Object *o; + + bd = data; + E_OBJECT_CHECK(bd); + + o = e_icon_add(m->evas); + e_icon_object_set(o, e_border_icon_add(bd, m->evas)); + + mi->icon_object = o; +} + +static void _e_int_menus_clients_cleanup_cb(void *data, E_Menu *m, E_Menu_Item *mi) { E_Zone *zone; diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c index c624250..a2b53b1 100644 --- a/src/bin/e_menu.c +++ b/src/bin/e_menu.c @@ -47,6 +47,7 @@ static void _e_menu_submenu_activate (E_Menu_Item *mi); static void _e_menu_submenu_deactivate (E_Menu_Item *mi); static void _e_menu_reposition (E_Menu *m); static int _e_menu_active_call (void); +static int _e_menu_realize_call (E_Menu_Item *mi); static void _e_menu_item_activate_next (void); static void _e_menu_item_activate_previous (void); static void _e_menu_item_activate_first (void); @@ -599,19 +600,6 @@ e_menu_item_icon_edje_set(E_Menu_Item *mi, const char *icon, const char *key) mi->menu->changed = 1; } -EAPI void -e_menu_item_icon_object_set(E_Menu_Item *mi, Evas_Object *obj) -{ - E_OBJECT_CHECK(mi); - E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE); - if (((mi->icon_object) && (obj) && (mi->icon_object == obj)) || - ((!mi->icon_object) && (!obj))) - return; - mi->icon_object = obj; - mi->changed = 1; - mi->menu->changed = 1; -} - EAPI void e_menu_item_label_set(E_Menu_Item *mi, const char *label) { @@ -762,6 +750,15 @@ e_menu_item_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, } EAPI void +e_menu_item_realize_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data) +{ + E_OBJECT_CHECK(mi); + E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE); + mi->realize_cb.func = func; + mi->realize_cb.data = data; +} + +EAPI void e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data) { E_OBJECT_CHECK(mi); @@ -1199,7 +1196,7 @@ _e_menu_item_realize(E_Menu_Item *mi) evas_object_pass_events_set(o, 1); e_box_pack_end(mi->container_object, o); } - if (mi->icon || mi->icon_object) + if (mi->icon || mi->realize_cb.func) { int icon_w, icon_h; @@ -1213,17 +1210,7 @@ _e_menu_item_realize(E_Menu_Item *mi) else evas_object_del(o); - /* FIXME: This should be cleaned up a bit. */ - if (mi->icon_object) - { - o = e_icon_add(mi->menu->evas); - e_icon_object_set(o, mi->icon_object); - e_icon_fill_inside_set(o, 1); - e_icon_size_get(o, &icon_w, &icon_h); - - mi->icon_object = o; - } - else if (mi->icon) + if (mi->icon) { /* Try a the usual suspects first. */ if (!mi->icon_key) @@ -1259,6 +1246,12 @@ _e_menu_item_realize(E_Menu_Item *mi) e_icon_size_get(mi->icon_object, &icon_w, &icon_h); } } + if (_e_menu_realize_call(mi)) + { + o = mi->icon_object; + e_icon_fill_inside_set(o, 1); + e_icon_size_get(o, &icon_w, &icon_h); + } evas_object_pass_events_set(o, 1); evas_object_show(o); @@ -1896,6 +1889,20 @@ _e_menu_active_call(void) return -1; } +static int +_e_menu_realize_call(E_Menu_Item *mi) +{ + if (mi) + { + if (mi->realize_cb.func) + { + mi->realize_cb.func(mi->realize_cb.data, mi->menu, mi); + return 1; + } + } + return 0; +} + static void _e_menu_item_activate_next(void) { diff --git a/src/bin/e_menu.h b/src/bin/e_menu.h index f28c740..92da0b1 100644 --- a/src/bin/e_menu.h +++ b/src/bin/e_menu.h @@ -113,7 +113,12 @@ struct _E_Menu_Item struct { void *data; void (*func) (void *data, E_Menu *m, E_Menu_Item *mi); - } cb; + } cb; /* Callback for menu item activation */ + + struct { + void *data; + void (*func) (void *data, E_Menu *m, E_Menu_Item *mi); + } realize_cb; /* Callback for menu item icon realization */ struct { void *data; @@ -173,7 +178,6 @@ EAPI int e_menu_item_num_get(E_Menu_Item *mi); EAPI void e_menu_item_icon_path_set(E_Menu_Item *mi, const char *icon); EAPI void e_menu_item_icon_file_set(E_Menu_Item *mi, const char *icon); EAPI void e_menu_item_icon_edje_set(E_Menu_Item *mi, const char *icon, const char *key); -EAPI void e_menu_item_icon_object_set(E_Menu_Item *mi, Evas_Object *obj); EAPI void e_menu_item_label_set(E_Menu_Item *mi, const char *label); EAPI void e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub); EAPI void e_menu_item_separator_set(E_Menu_Item *mi, int sep); @@ -183,6 +187,7 @@ EAPI void e_menu_item_radio_group_set(E_Menu_Item *mi, int radg); EAPI void e_menu_item_toggle_set(E_Menu_Item *mi, int tog); EAPI int e_menu_item_toggle_get(E_Menu_Item *mi); EAPI void e_menu_item_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); +EAPI void e_menu_item_realize_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); EAPI void e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); EAPI void e_menu_item_submenu_post_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); EAPI void e_menu_item_active_set(E_Menu_Item *mi, int active);