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