Tools/ChangeLog

 12013-01-25 Michał Pakuła vel Rutka <m.pakula@samsung.com>
 2
 3 [EFL][WK2] Implement context menu in MiniBrowser
 4 https://bugs.webkit.org/show_bug.cgi?id=102932
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Added context menu support for EFL port using Elementary context popup.
 9
 10 * MiniBrowser/efl/main.c:
 11 (_Browser_Window):
 12 (context_popup_item_selected_cb):
 13 (fill_context_popup_items):
 14 (on_context_menu_show):
 15 (on_context_menu_hide):
 16 (window_create):
 17
1182013-01-25 Sheriff Bot <webkit.review.bot@gmail.com>
219
320 Unreviewed, rolling out r140774.

Tools/MiniBrowser/efl/main.c

@@typedef struct _Browser_Window {
9191 Evas_Object *forward_button;
9292 int current_zoom_level;
9393 Tooltip_Information tooltip;
 94 Evas_Object *context_popup;
9495} Browser_Window;
9596
9697typedef struct _File_Selector_Data {

@@on_window_close(Ewk_View_Smart_Data *smartData)
900901 window_close(window);
901902}
902903
 904
 905static void
 906fill_context_popup_items(Browser_Window *window, Ewk_Context_Menu *ewk_menu);
 907
 908static void
 909context_popup_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
 910{
 911 if (!data)
 912 return;
 913
 914 Ewk_Context_Menu_Item *ewk_item = (Ewk_Context_Menu_Item *)data;
 915 ewk_context_menu_item_select(ewk_context_menu_item_parent_menu_get(ewk_item), ewk_item);
 916 ewk_context_menu_hide(ewk_context_menu_item_parent_menu_get(ewk_item));
 917}
 918
 919static void
 920fill_context_popup_items(Browser_Window *window, Ewk_Context_Menu *ewk_menu)
 921{
 922 const Eina_List *list = ewk_context_menu_items_get(ewk_menu);
 923 const Eina_List *l;
 924 void *data;
 925
 926 Ewk_Context_Menu_Item *ewk_item;
 927 Elm_Object_Item *elm_popup_item;
 928 Evas_Object *elm_check_item;
 929
 930 EINA_LIST_FOREACH(list, l, data) {
 931 ewk_item = (Ewk_Context_Menu_Item *)data;
 932 switch (ewk_context_menu_item_type_get(ewk_item)) {
 933 case EWK_ACTION_TYPE:
 934 elm_popup_item = elm_ctxpopup_item_append(window->context_popup, ewk_context_menu_item_title_get(ewk_item), NULL, context_popup_item_selected_cb, ewk_item);
 935 break;
 936 case EWK_CHECKABLE_ACTION_TYPE:
 937 elm_check_item = elm_check_add(window->context_popup);
 938 elm_popup_item = elm_ctxpopup_item_append(window->context_popup, ewk_context_menu_item_title_get(ewk_item), NULL, context_popup_item_selected_cb, ewk_item);
 939 elm_object_item_content_set(elm_popup_item, elm_check_item);
 940 elm_check_state_set(elm_check_item, ewk_context_menu_item_checked_get(ewk_item));
 941 break;
 942 default:
 943 continue;
 944 }
 945 elm_object_item_disabled_set(elm_popup_item, !ewk_context_menu_item_enabled_get(ewk_item));
 946 }
 947}
 948
 949static Eina_Bool
 950on_context_menu_show(Ewk_View_Smart_Data *sd, Evas_Coord x, Evas_Coord y, Ewk_Context_Menu *menu)
 951{
 952 Browser_Window *window = window_find_with_ewk_view(sd->self);
 953
 954 if (!window || !menu)
 955 return EINA_FALSE;
 956
 957 window->context_popup = elm_ctxpopup_add(window->elm_window);
 958
 959 if (!window->context_popup)
 960 return EINA_FALSE;
 961
 962 fill_context_popup_items(window, menu);
 963
 964 evas_object_move(window->context_popup, x, y);
 965 evas_object_show(window->context_popup);
 966
 967 return EINA_TRUE;
 968}
 969
 970static Eina_Bool
 971on_context_menu_hide(Ewk_View_Smart_Data *sd)
 972{
 973 Browser_Window *window = window_find_with_ewk_view(sd->self);
 974
 975 if (!window || !window->context_popup)
 976 return EINA_FALSE;
 977
 978 elm_ctxpopup_dismiss(window->context_popup);
 979 evas_object_del(window->context_popup);
 980 window->context_popup = NULL;
 981
 982 return EINA_TRUE;
 983}
 984
903985static void
904986auth_popup_close(Auth_Data *auth_data)
905987{

@@static Browser_Window *window_create(Evas_Object *opener, const char *url, int w
10921174 window->tooltip.text_set = EINA_FALSE;
10931175 window->tooltip.shown = EINA_FALSE;
10941176
 1177 window->context_popup = NULL;
 1178
10951179 /* Create window */
10961180 window->elm_window = elm_win_add(NULL, "minibrowser-window", ELM_WIN_BASIC);
10971181 elm_win_title_set(window->elm_window, APP_NAME);

@@static Browser_Window *window_create(Evas_Object *opener, const char *url, int w
11781262 ewkViewClass->fullscreen_exit = on_fullscreen_exit;
11791263 ewkViewClass->window_create = on_window_create;
11801264 ewkViewClass->window_close = on_window_close;
 1265 ewkViewClass->context_menu_show = on_context_menu_show;
 1266 ewkViewClass->context_menu_hide = on_context_menu_hide;
11811267
11821268 Evas *evas = evas_object_evas_get(window->elm_window);
11831269 if (legacy_behavior_enabled) {