Source/WebKit2/ChangeLog

 12013-02-15 Michał Pakuła vel Rutka <m.pakula@samsung.com>
 2
 3 [EFL][WK2] Add an API for getting context menu item's parent menu
 4 https://bugs.webkit.org/show_bug.cgi?id=107510
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Added parent menu support and API for Ewk_Context_Menu_Item, to
 9 allow selecting context menus using Elementary widgets.
 10 Context menu unit test updated with new function.
 11
 12 * UIProcess/API/efl/ewk_context_menu.cpp:
 13 (EwkContextMenu::EwkContextMenu):
 14 * UIProcess/API/efl/ewk_context_menu_item.cpp:
 15 (EwkContextMenuItem::EwkContextMenuItem):
 16 (ewk_context_menu_item_new):
 17 (ewk_context_menu_item_new_with_submenu):
 18 (ewk_context_menu_item_parent_menu_get):
 19 * UIProcess/API/efl/ewk_context_menu_item.h:
 20 * UIProcess/API/efl/ewk_context_menu_item_private.h:
 21 (EwkContextMenuItem::create):
 22 (EwkContextMenuItem::parentMenu):
 23 (EwkContextMenuItem::setParentMenu):
 24 (EwkContextMenuItem):
 25 * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
 26 (showContextMenu):
 27
1282013-02-15 Allan Sandfeld Jensen <allan.jensen@digia.com>
229
330 Simplify hitTestResultAtPoint and nodesFromRect APIs

Source/WebKit2/UIProcess/API/efl/ewk_context_menu.cpp

@@EwkContextMenu::EwkContextMenu(EwkView* view, WKArrayRef items)
4343{
4444 const size_t size = WKArrayGetSize(items);
4545 for (size_t i = 0; i < size; ++i)
46  m_contextMenuItems = eina_list_append(m_contextMenuItems, Ewk_Context_Menu_Item::create(static_cast<WKContextMenuItemRef>(WKArrayGetItemAtIndex(items, i))).leakPtr());
 46 m_contextMenuItems = eina_list_append(m_contextMenuItems, Ewk_Context_Menu_Item::create(static_cast<WKContextMenuItemRef>(WKArrayGetItemAtIndex(items, i)), this).leakPtr());
4747}
4848
4949EwkContextMenu::EwkContextMenu()

@@EwkContextMenu::EwkContextMenu(Eina_List* items)
5858{
5959 Eina_List* l;
6060 void* data;
61  EINA_LIST_FOREACH(items, l, data)
62  m_contextMenuItems = eina_list_append(m_contextMenuItems, static_cast<EwkContextMenuItem*>(data));
 61 EINA_LIST_FOREACH(items, l, data) {
 62 if (!data)
 63 continue;
 64 EwkContextMenuItem* item = static_cast<EwkContextMenuItem*>(data);
 65 item->setParentMenu(this);
 66 m_contextMenuItems = eina_list_append(m_contextMenuItems, item);
 67 }
6368}
6469
6570EwkContextMenu::~EwkContextMenu()

Source/WebKit2/UIProcess/API/efl/ewk_context_menu_item.cpp

3333
3434using namespace WebKit;
3535
36 EwkContextMenuItem::EwkContextMenuItem(WKContextMenuItemRef item)
 36EwkContextMenuItem::EwkContextMenuItem(WKContextMenuItemRef item, Ewk_Context_Menu* parentMenu)
3737 : m_type(static_cast<Ewk_Context_Menu_Item_Type>(WKContextMenuItemGetType(item)))
3838 , m_action(static_cast<Ewk_Context_Menu_Item_Action>(WKContextMenuItemGetTag(item)))
3939 , m_title(WKEinaSharedString(WKContextMenuItemCopyTitle(item)))

@@EwkContextMenuItem::EwkContextMenuItem(WKContextMenuItemRef item)
4444{
4545}
4646
47 EwkContextMenuItem::EwkContextMenuItem(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, Ewk_Context_Menu* subMenu)
 47EwkContextMenuItem::EwkContextMenuItem(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, Ewk_Context_Menu* subMenu, Ewk_Context_Menu* parentMenu)
4848 : m_type(type)
4949 , m_action(action)
5050 , m_title(title)

@@EwkContextMenuItem::EwkContextMenuItem(Ewk_Context_Menu_Item_Type type, Ewk_Cont
5757
5858Ewk_Context_Menu_Item* ewk_context_menu_item_new(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled)
5959{
60  return Ewk_Context_Menu_Item::create(type, action, title, checked, enabled, 0).leakPtr();
 60 return Ewk_Context_Menu_Item::create(type, action, title, checked, enabled, 0, 0).leakPtr();
6161}
6262
6363Ewk_Context_Menu_Item* ewk_context_menu_item_new_with_submenu(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, Ewk_Context_Menu* subMenu)
6464{
65  return Ewk_Context_Menu_Item::create(type, action, title, checked, enabled, subMenu).leakPtr();
 65 return Ewk_Context_Menu_Item::create(type, action, title, checked, enabled, subMenu, 0).leakPtr();
6666}
6767
6868Ewk_Context_Menu_Item_Type ewk_context_menu_item_type_get(const Ewk_Context_Menu_Item* item)

@@Eina_Bool ewk_context_menu_item_enabled_set(Ewk_Context_Menu_Item* item, Eina_Bo
145145 return true;
146146}
147147
 148Ewk_Context_Menu* ewk_context_menu_item_parent_menu_get(const Ewk_Context_Menu_Item* item)
 149{
 150 EINA_SAFETY_ON_NULL_RETURN_VAL(item, 0);
 151
 152 return const_cast<Ewk_Context_Menu_Item*>(item)->parentMenu();
 153}
 154
148155COMPILE_ASSERT_MATCHING_ENUM(EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION, kWKContextMenuItemTagNoAction);
149156COMPILE_ASSERT_MATCHING_ENUM(EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK_IN_NEW_WINDOW, kWKContextMenuItemTagOpenLinkInNewWindow);
150157COMPILE_ASSERT_MATCHING_ENUM(EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_LINK_TO_DISK, kWKContextMenuItemTagDownloadLinkToDisk);

Source/WebKit2/UIProcess/API/efl/ewk_context_menu_item.h

@@EAPI Eina_Bool ewk_context_menu_item_enabled_get(const Ewk_Context_Menu_Item *o)
274274 */
275275EAPI Eina_Bool ewk_context_menu_item_enabled_set(Ewk_Context_Menu_Item *o, Eina_Bool enabled);
276276
 277/**
 278 * Gets the parent menu for the item.
 279 *
 280 * @param o item to get the parent
 281 *
 282 * @return the pointer to parent menu on success or @c NULL on failure
 283 */
 284EAPI Ewk_Context_Menu *ewk_context_menu_item_parent_menu_get(const Ewk_Context_Menu_Item *o);
 285
277286#ifdef __cplusplus
278287}
279288#endif

Source/WebKit2/UIProcess/API/efl/ewk_context_menu_item_private.h

3838 */
3939class EwkContextMenuItem {
4040public:
41  static PassOwnPtr<EwkContextMenuItem> create(WKContextMenuItemRef item)
 41 static PassOwnPtr<EwkContextMenuItem> create(WKContextMenuItemRef item, EwkContextMenu* parentMenu)
4242 {
43  return adoptPtr(new EwkContextMenuItem(item));
 43 return adoptPtr(new EwkContextMenuItem(item, parentMenu));
4444 }
4545
46  static PassOwnPtr<EwkContextMenuItem> create(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, EwkContextMenu* subMenu)
 46 static PassOwnPtr<EwkContextMenuItem> create(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, EwkContextMenu* subMenu, EwkContextMenu* parentMenu)
4747 {
48  return adoptPtr(new EwkContextMenuItem(type, action, title, checked, enabled, subMenu));
 48 return adoptPtr(new EwkContextMenuItem(type, action, title, checked, enabled, subMenu, parentMenu));
4949 }
5050
5151 Ewk_Context_Menu_Item_Action action() const { return m_action; }

@@public:
6363 bool enabled() const { return m_isEnabled; }
6464 void setEnabled(bool enabled) { m_isEnabled = enabled; }
6565
 66 EwkContextMenu* parentMenu() { return m_parentMenu; }
 67 void setParentMenu(EwkContextMenu* parentMenu) { m_parentMenu = parentMenu; }
 68
6669private:
67  explicit EwkContextMenuItem(WKContextMenuItemRef);
68  EwkContextMenuItem(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, EwkContextMenu* subMenu);
 70 EwkContextMenuItem(WKContextMenuItemRef, EwkContextMenu* parentMenu);
 71 EwkContextMenuItem(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, EwkContextMenu* subMenu, EwkContextMenu* parentMenu);
6972
7073 Ewk_Context_Menu_Item_Type m_type;
7174 Ewk_Context_Menu_Item_Action m_action;

Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context_menu.cpp

@@static Eina_Bool showContextMenu(Ewk_View_Smart_Data* smartData, Evas_Coord x, E
4646 Ewk_Context_Menu_Item* item = static_cast<Ewk_Context_Menu_Item*>(eina_list_nth(list, 0));
4747 checkBasicContextMenuItem(item, EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_GO_BACK, "Go Back", false, true);
4848
 49 // Check if parent menu equals when context menu items where created by WebKit.
 50 EXPECT_EQ(contextMenu, ewk_context_menu_item_parent_menu_get(item));
 51
4952 item = static_cast<Ewk_Context_Menu_Item*>(eina_list_nth(list, 1));
5053 checkBasicContextMenuItem(item, EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_GO_FORWARD, "Go Forward", false, true);
5154 ewk_context_menu_item_enabled_set(item, false);

@@static Eina_Bool showContextMenu(Ewk_View_Smart_Data* smartData, Evas_Coord x, E
6366
6467 // Makes new context menu items.
6568 Ewk_Context_Menu_Item* newItem = ewk_context_menu_item_new(EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_OTHER, "New Custom Item", false, true);
 69 // Check if parent menu equals 0 when context menu items where created using ewk_context_menu_item_new.
 70 EXPECT_EQ(0, ewk_context_menu_item_parent_menu_get(newItem));
6671 ewk_context_menu_item_append(contextMenu, newItem);
6772
 73 // Check if parent menu equals when context menu items where created using ewk_context_menu_item_new and added using ewk_context_menu_item_append.
 74 EXPECT_EQ(contextMenu, ewk_context_menu_item_parent_menu_get(newItem));
 75
6876 Eina_List* subMenuItemList = 0;
6977 Ewk_Context_Menu_Item* subMenuItem1 = ewk_context_menu_item_new(EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_OTHER, "New SubMenu Item 1", false, true);
7078 Ewk_Context_Menu_Item* subMenuItem2 = ewk_context_menu_item_new(EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_OTHER, "New SubMenu Item 2", false, true);

@@static Eina_Bool showContextMenu(Ewk_View_Smart_Data* smartData, Evas_Coord x, E
7381 subMenuItemList = eina_list_append(subMenuItemList, subMenuItem2);
7482 subMenuItemList = eina_list_append(subMenuItemList, subMenuItem3);
7583 Ewk_Context_Menu* subMenu = ewk_context_menu_new_with_items(subMenuItemList);
 84
 85 // Check if parent menu equals when context menu items where created using ewk_context_menu_new_with_items
 86 EXPECT_EQ(subMenu, ewk_context_menu_item_parent_menu_get(subMenuItem1));
 87
7688 Ewk_Context_Menu_Item* newItem2 = ewk_context_menu_item_new_with_submenu(EWK_SUBMENU_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_OTHER, "New Custom Item 2", false, true, subMenu);
 89 // Check if parent menu equals 0 when context menu items where created using ewk_context_menu_item_new_with_submenu.
 90 EXPECT_EQ(0, ewk_context_menu_item_parent_menu_get(newItem));
7791 ewk_context_menu_item_append(contextMenu, newItem2);
7892
 93 // Check if parent menu equals when context menu items where created using ewk_context_menu_item_new_with_submenu and added using ewk_context_menu_item_append.
 94 EXPECT_EQ(contextMenu, ewk_context_menu_item_parent_menu_get(newItem));
 95
7996 Ewk_Context_Menu* subMenu2 = ewk_context_menu_new();
8097 Ewk_Context_Menu_Item* newItem3 = ewk_context_menu_item_new_with_submenu(EWK_SUBMENU_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_OTHER, "New Custom Item 3", false, true, subMenu2);
8198 ewk_context_menu_item_append(contextMenu, newItem3);