Changeset 145564 in webkit
- Timestamp:
- Mar 12, 2013 11:02:05 AM (11 years ago)
- Location:
- trunk/Tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r145552 r145564 1 2013-03-12 Christophe Dumez <ch.dumez@sisa.samsung.com> 2 3 [EFL][WK2] Add popup menu support to MiniBrowser 4 https://bugs.webkit.org/show_bug.cgi?id=108934 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 Implement popup menu support in MiniBrowser by handling popup_menu_show 9 and popup_menu_hide smart functions on the view and using the Ewk popup 10 menu API. 11 12 * MiniBrowser/efl/main.c: 13 (_Browser_Window): 14 (on_popup_menu_discarded): 15 (on_popup_menu_item_clicked): 16 (popup_menu_populate): 17 (on_popup_menu_show): 18 (on_popup_menu_hide): 19 (window_create): Use calloc() instead of malloc() to allocate memory for 20 Browser_Window. This makes sure all the structs members are initialized 21 to 0 (such as the new elm_popup_menu pointer). 22 1 23 2013-03-12 Zan Dobersek <zdobersek@igalia.com> 2 24 -
trunk/Tools/MiniBrowser/efl/main.c
r143190 r145564 92 92 Evas_Object *back_button; 93 93 Evas_Object *forward_button; 94 struct { 95 Evas_Object *elm_menu; 96 Ewk_Popup_Menu *ewk_menu; 97 } popup; 94 98 int current_zoom_level; 95 99 Tooltip_Information tooltip; … … 782 786 } 783 787 788 static void 789 on_popup_menu_discarded(void *user_data, Evas_Object *obj, void *event_info) 790 { 791 // The user clicked outside the menu to discard it. 792 info("Popup menu was discarded.\n"); 793 Browser_Window *window = (Browser_Window *)user_data; 794 ewk_popup_menu_close(window->popup.ewk_menu); 795 } 796 797 static void 798 on_popup_menu_item_clicked(void *user_data, Evas_Object *obj, void *event_info) 799 { 800 Browser_Window *window = (Browser_Window *)user_data; 801 Elm_Object_Item *item = (Elm_Object_Item *)event_info; 802 803 info("Selected popup menu index: %u\n", elm_menu_item_index_get(item)); 804 ewk_popup_menu_selected_index_set(window->popup.ewk_menu, elm_menu_item_index_get(item)); 805 806 // Close popup menu. 807 ewk_popup_menu_close(window->popup.ewk_menu); 808 } 809 810 static void 811 popup_menu_populate(Evas_Object *elm_menu, Ewk_Popup_Menu *ewk_menu, void *user_data) 812 { 813 const Eina_List* ewk_items = ewk_popup_menu_items_get(ewk_menu); 814 815 void *data; 816 const Eina_List *l; 817 EINA_LIST_FOREACH(ewk_items, l, data) { 818 Ewk_Popup_Menu_Item *ewk_item = (Ewk_Popup_Menu_Item *)data; 819 switch (ewk_popup_menu_item_type_get(ewk_item)) { 820 case EWK_POPUP_MENU_SEPARATOR: 821 elm_menu_item_separator_add(elm_menu, NULL); 822 break; 823 case EWK_POPUP_MENU_ITEM: 824 if (ewk_popup_menu_item_is_label_get(ewk_item)) { 825 Elm_Object_Item *item = elm_menu_item_add(elm_menu, NULL, NULL, ewk_popup_menu_item_text_get(ewk_item), NULL, NULL); 826 elm_object_item_disabled_set(item, EINA_TRUE); 827 } else { 828 Elm_Object_Item *item = elm_menu_item_add(elm_menu, NULL, NULL, ewk_popup_menu_item_text_get(ewk_item), on_popup_menu_item_clicked, user_data); 829 elm_object_item_tooltip_text_set(item, ewk_popup_menu_item_tooltip_get(ewk_item)); 830 elm_object_item_disabled_set(item, !ewk_popup_menu_item_enabled_get(ewk_item)); 831 elm_menu_item_selected_set(item, ewk_popup_menu_item_selected_get(ewk_item)); 832 } 833 break; 834 default: 835 info("Unrecognized popup menu item type!\n"); 836 break; 837 } 838 } 839 } 840 841 static Eina_Bool 842 on_popup_menu_show(Ewk_View_Smart_Data *smartData, Eina_Rectangle rect, Ewk_Text_Direction text_direction, double page_scale_factor, Ewk_Popup_Menu *ewk_menu) 843 { 844 Browser_Window *window = window_find_with_ewk_view(smartData->self); 845 846 if (window->popup.elm_menu) 847 evas_object_del(window->popup.elm_menu); 848 849 window->popup.elm_menu = elm_menu_add(window->elm_window); 850 window->popup.ewk_menu = ewk_menu; 851 evas_object_smart_callback_add(window->popup.elm_menu, "clicked", on_popup_menu_discarded, window); 852 853 popup_menu_populate(window->popup.elm_menu, ewk_menu, window); 854 855 info("Showing popup menu at (%d, %d)\n", rect.x, rect.y); 856 elm_menu_move(window->popup.elm_menu, rect.x, rect.y); 857 evas_object_show(window->popup.elm_menu); 858 859 return EINA_TRUE; 860 } 861 862 static Eina_Bool 863 on_popup_menu_hide(Ewk_View_Smart_Data *smartData) 864 { 865 Browser_Window *window = window_find_with_ewk_view(smartData->self); 866 867 if (!window->popup.elm_menu) 868 return EINA_FALSE; 869 870 elm_menu_close(window->popup.elm_menu); 871 872 return EINA_TRUE; 873 } 874 784 875 static Eina_Bool on_window_geometry_get(Ewk_View_Smart_Data *sd, Evas_Coord *x, Evas_Coord *y, Evas_Coord *width, Evas_Coord *height) 785 876 { … … 1083 1174 static Browser_Window *window_create(Evas_Object *opener, const char *url, int width, int height, Eina_Bool view_mode) 1084 1175 { 1085 Browser_Window *window = malloc(sizeof(Browser_Window));1176 Browser_Window *window = calloc(1, sizeof(Browser_Window)); 1086 1177 if (!window) { 1087 1178 info("ERROR: could not create browser window.\n"); … … 1181 1272 ewkViewClass->window_create = on_window_create; 1182 1273 ewkViewClass->window_close = on_window_close; 1274 ewkViewClass->popup_menu_show = on_popup_menu_show; 1275 ewkViewClass->popup_menu_hide = on_popup_menu_hide; 1183 1276 1184 1277 Evas *evas = evas_object_evas_get(window->elm_window);
Note: See TracChangeset
for help on using the changeset viewer.