Changeset 143275 in webkit


Ignore:
Timestamp:
Feb 18, 2013 4:40:44 PM (11 years ago)
Author:
Christophe Dumez
Message:

[EFL][WK2] Add C API for popup menu and popup item
https://bugs.webkit.org/show_bug.cgi?id=109083

Reviewed by Anders Carlsson.

WK2 EFL delegates display of the popup menu to the browser which causes
us to have a strong interdependency between internal C++ classes
(WebPopupMenuProxyEfl, WebPopupItem) and our EFL API implementation
(EwkView, EwkPopupMenu, EwkPopupMenuItem).

Since we want to remove this interdependency, this patch introduces a
for WebPopupMenuProxyEfl (WKPopupMenuListener) and for WebPopupItem
(WKPopupItem). It also introduces a WKPage client with callbacks for
showPopupMenu and hidePopupMenu.

Note that the popup menu functionality is covered by ewk_popup_menu API
tests and no functionality is lost.

  • PlatformEfl.cmake: Add new files to EFL CMake config.
  • Shared/API/c/efl/WKBaseEfl.h: Add typedefs for WKPopupItemRef and

WKPopupMenuListenerRef.

  • Shared/APIObject.h: Add new TypePopupMenuItem APIObject type for EFL

platform.

  • UIProcess/API/C/efl/WKAPICastEfl.h: Add mapping for WKPopupItemRef

and WKPopupMenuListenerRef API types.
(WebKit):
(WebKit::toAPI):

  • UIProcess/API/C/efl/WKPageEfl.cpp: Added.

(WKPageSetUIPopupMenuClient): Add new C API to set the UI Popup Menu
client on the page.

  • UIProcess/API/C/efl/WKPageEfl.h: Added.
  • UIProcess/API/C/efl/WKPopupItem.cpp: Added. Add C API for WebPopupItem.

(WKPopupItemGetType):
(WKPopupItemGetTextDirection):
(WKPopupItemHasTextDirectionOverride):
(WKPopupItemCopyText):
(WKPopupItemCopyToolTipText):
(WKPopupItemCopyAccessibilityText):
(WKPopupItemIsEnabled):
(WKPopupItemIsLabel):
(WKPopupItemIsSelected):

  • UIProcess/API/C/efl/WKPopupItem.h: Added.
  • UIProcess/API/C/efl/WKPopupMenuListener.cpp: Added. Add C API for

WebPopupMenuListenerEfl (formerly WebPopupMenuProxyEfl) so that the
client can report which popup menu item was selected.
(WKPopupMenuListenerSetSelection):

  • UIProcess/API/C/efl/WKPopupMenuListener.h: Added.
  • UIProcess/API/efl/EwkView.cpp: Remove dependency on internal C++ types

(WebPopupMenuProxyEfl and WebPopupItem) and use C API types instead.
(EwkView::requestPopupMenu):

  • UIProcess/API/efl/EwkView.h:

(WebKit):
(EwkView):

  • UIProcess/API/efl/ewk_popup_menu.cpp: Use C API for Popup menu.

(EwkPopupMenu::EwkPopupMenu):
(EwkPopupMenu::setSelectedIndex):

  • UIProcess/API/efl/ewk_popup_menu_private.h:

(EwkPopupMenu::create):
(EwkPopupMenu):

  • UIProcess/WebPageProxy.cpp: Use WKPageUIPopupMenuClient to show / hide

the popup menu on EFL port instead of asking the WebPopupMenuProxy.
(WebKit::WebPageProxy::close):
(WebKit::WebPageProxy::showPopupMenu):
(WebKit::WebPageProxy::hidePopupMenu):

  • UIProcess/WebPageProxy.h: Add new WKPageUIPopupMenuClient member and

corresponding initialization method.
(WebPageProxy):

  • UIProcess/WebPopupMenuProxy.h: Disable showPopupMenu / hidePopupMenu

virtual methods on EFL port since we go via WKPageUIPopupMenuClient
for this now.
(WebPopupMenuProxy):

  • UIProcess/efl/PageUIClientEfl.cpp:

(WebKit::PageUIClientEfl::PageUIClientEfl): Handle WKPageUIPopupMenuClient
callbacks and call corresponding EwkView methods. Previously, the EwkView
methods were called by the internal WebPageProxyEfl class which is no
longer needed.
(WebKit::PageUIClientEfl::showPopupMenu):
(WebKit):
(WebKit::PageUIClientEfl::hidePopupMenu):

  • UIProcess/efl/PageUIClientEfl.h:

(PageUIClientEfl):

  • UIProcess/efl/WebPageProxyEfl.cpp:

(WebKit::WebPageProxy::initializeUIPopupMenuClient):
(WebKit):

  • UIProcess/efl/WebPopupItemEfl.cpp: Added. Add APIObject wrapper for

WebPopupItem so that we can use it in WKPageUIPopupMenuClient.
(WebKit):
(WebKit::WebPopupItemEfl::WebPopupItemEfl):
(WebKit::WebPopupItemEfl::~WebPopupItemEfl):

  • UIProcess/efl/WebPopupItemEfl.h: Added.

(WebKit):
(WebPopupItemEfl):
(WebKit::WebPopupItemEfl::create):
(WebKit::WebPopupItemEfl::data):
(WebKit::WebPopupItemEfl::itemType):
(WebKit::WebPopupItemEfl::text):
(WebKit::WebPopupItemEfl::textDirection):
(WebKit::WebPopupItemEfl::hasTextDirectionOverride):
(WebKit::WebPopupItemEfl::toolTipText):
(WebKit::WebPopupItemEfl::accessibilityText):
(WebKit::WebPopupItemEfl::isEnabled):
(WebKit::WebPopupItemEfl::isLabel):
(WebKit::WebPopupItemEfl::isSelected):
(WebKit::WebPopupItemEfl::type):

  • UIProcess/efl/WebPopupMenuListenerEfl.cpp: Renamed from Source/WebKit2/UIProcess/efl/WebPopupMenuProxyEfl.cpp.

Use WebPopupMenuListenerEfl name instead of WebPopupMenuProxyEfl since
it more accurately represents its functionality now.
(WebKit):
(WebKit::WebPopupMenuListenerEfl::WebPopupMenuListenerEfl):
(WebKit::WebPopupMenuListenerEfl::valueChanged):

  • UIProcess/efl/WebPopupMenuListenerEfl.h: Renamed from Source/WebKit2/UIProcess/efl/WebPopupMenuProxyEfl.h.

(WebKit):
(WebPopupMenuListenerEfl):
(WebKit::WebPopupMenuListenerEfl::create):

  • UIProcess/efl/WebUIPopupMenuClient.cpp: Added.

(WebUIPopupMenuClient::showPopupMenu):
(WebUIPopupMenuClient::hidePopupMenu):

  • UIProcess/efl/WebUIPopupMenuClient.h: Added.

(WebKit):
(WebUIPopupMenuClient):

  • UIProcess/efl/WebView.cpp:

(WebKit::WebView::createPopupMenuProxy):

Location:
trunk/Source/WebKit2
Files:
10 added
16 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r143273 r143275  
     12013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>
     2
     3        [EFL][WK2] Add C API for popup menu and popup item
     4        https://bugs.webkit.org/show_bug.cgi?id=109083
     5
     6        Reviewed by Anders Carlsson.
     7
     8        WK2 EFL delegates display of the popup menu to the browser which causes
     9        us to have a strong interdependency between internal C++ classes
     10        (WebPopupMenuProxyEfl, WebPopupItem) and our EFL API implementation
     11        (EwkView, EwkPopupMenu, EwkPopupMenuItem).
     12
     13        Since we want to remove this interdependency, this patch introduces a
     14        for WebPopupMenuProxyEfl (WKPopupMenuListener) and for WebPopupItem
     15        (WKPopupItem). It also introduces a WKPage client with callbacks for
     16        showPopupMenu and hidePopupMenu.
     17
     18        Note that the popup menu functionality is covered by ewk_popup_menu API
     19        tests and no functionality is lost.
     20
     21        * PlatformEfl.cmake: Add new files to EFL CMake config.
     22        * Shared/API/c/efl/WKBaseEfl.h: Add typedefs for WKPopupItemRef and
     23        WKPopupMenuListenerRef.
     24        * Shared/APIObject.h: Add new TypePopupMenuItem APIObject type for EFL
     25        platform.
     26        * UIProcess/API/C/efl/WKAPICastEfl.h: Add mapping for WKPopupItemRef
     27        and WKPopupMenuListenerRef API types.
     28        (WebKit):
     29        (WebKit::toAPI):
     30        * UIProcess/API/C/efl/WKPageEfl.cpp: Added.
     31        (WKPageSetUIPopupMenuClient): Add new C API to set the UI Popup Menu
     32        client on the page.
     33        * UIProcess/API/C/efl/WKPageEfl.h: Added.
     34        * UIProcess/API/C/efl/WKPopupItem.cpp: Added. Add C API for WebPopupItem.
     35        (WKPopupItemGetType):
     36        (WKPopupItemGetTextDirection):
     37        (WKPopupItemHasTextDirectionOverride):
     38        (WKPopupItemCopyText):
     39        (WKPopupItemCopyToolTipText):
     40        (WKPopupItemCopyAccessibilityText):
     41        (WKPopupItemIsEnabled):
     42        (WKPopupItemIsLabel):
     43        (WKPopupItemIsSelected):
     44        * UIProcess/API/C/efl/WKPopupItem.h: Added.
     45        * UIProcess/API/C/efl/WKPopupMenuListener.cpp: Added. Add C API for
     46        WebPopupMenuListenerEfl (formerly WebPopupMenuProxyEfl) so that the
     47        client can report which popup menu item was selected.
     48        (WKPopupMenuListenerSetSelection):
     49        * UIProcess/API/C/efl/WKPopupMenuListener.h: Added.
     50        * UIProcess/API/efl/EwkView.cpp: Remove dependency on internal C++ types
     51        (WebPopupMenuProxyEfl and WebPopupItem) and use C API types instead.
     52        (EwkView::requestPopupMenu):
     53        * UIProcess/API/efl/EwkView.h:
     54        (WebKit):
     55        (EwkView):
     56        * UIProcess/API/efl/ewk_popup_menu.cpp: Use C API for Popup menu.
     57        (EwkPopupMenu::EwkPopupMenu):
     58        (EwkPopupMenu::setSelectedIndex):
     59        * UIProcess/API/efl/ewk_popup_menu_private.h:
     60        (EwkPopupMenu::create):
     61        (EwkPopupMenu):
     62        * UIProcess/WebPageProxy.cpp: Use WKPageUIPopupMenuClient to show / hide
     63        the popup menu on EFL port instead of asking the WebPopupMenuProxy.
     64        (WebKit::WebPageProxy::close):
     65        (WebKit::WebPageProxy::showPopupMenu):
     66        (WebKit::WebPageProxy::hidePopupMenu):
     67        * UIProcess/WebPageProxy.h: Add new WKPageUIPopupMenuClient member and
     68        corresponding initialization method.
     69        (WebPageProxy):
     70        * UIProcess/WebPopupMenuProxy.h: Disable showPopupMenu / hidePopupMenu
     71        virtual methods on EFL port since we go via WKPageUIPopupMenuClient
     72        for this now.
     73        (WebPopupMenuProxy):
     74        * UIProcess/efl/PageUIClientEfl.cpp:
     75        (WebKit::PageUIClientEfl::PageUIClientEfl): Handle WKPageUIPopupMenuClient
     76        callbacks and call corresponding EwkView methods. Previously, the EwkView
     77        methods were called by the internal WebPageProxyEfl class which is no
     78        longer needed.
     79        (WebKit::PageUIClientEfl::showPopupMenu):
     80        (WebKit):
     81        (WebKit::PageUIClientEfl::hidePopupMenu):
     82        * UIProcess/efl/PageUIClientEfl.h:
     83        (PageUIClientEfl):
     84        * UIProcess/efl/WebPageProxyEfl.cpp:
     85        (WebKit::WebPageProxy::initializeUIPopupMenuClient):
     86        (WebKit):
     87        * UIProcess/efl/WebPopupItemEfl.cpp: Added. Add APIObject wrapper for
     88        WebPopupItem so that we can use it in WKPageUIPopupMenuClient.
     89        (WebKit):
     90        (WebKit::WebPopupItemEfl::WebPopupItemEfl):
     91        (WebKit::WebPopupItemEfl::~WebPopupItemEfl):
     92        * UIProcess/efl/WebPopupItemEfl.h: Added.
     93        (WebKit):
     94        (WebPopupItemEfl):
     95        (WebKit::WebPopupItemEfl::create):
     96        (WebKit::WebPopupItemEfl::data):
     97        (WebKit::WebPopupItemEfl::itemType):
     98        (WebKit::WebPopupItemEfl::text):
     99        (WebKit::WebPopupItemEfl::textDirection):
     100        (WebKit::WebPopupItemEfl::hasTextDirectionOverride):
     101        (WebKit::WebPopupItemEfl::toolTipText):
     102        (WebKit::WebPopupItemEfl::accessibilityText):
     103        (WebKit::WebPopupItemEfl::isEnabled):
     104        (WebKit::WebPopupItemEfl::isLabel):
     105        (WebKit::WebPopupItemEfl::isSelected):
     106        (WebKit::WebPopupItemEfl::type):
     107        * UIProcess/efl/WebPopupMenuListenerEfl.cpp: Renamed from Source/WebKit2/UIProcess/efl/WebPopupMenuProxyEfl.cpp.
     108        Use WebPopupMenuListenerEfl name instead of WebPopupMenuProxyEfl since
     109        it more accurately represents its functionality now.
     110        (WebKit):
     111        (WebKit::WebPopupMenuListenerEfl::WebPopupMenuListenerEfl):
     112        (WebKit::WebPopupMenuListenerEfl::valueChanged):
     113        * UIProcess/efl/WebPopupMenuListenerEfl.h: Renamed from Source/WebKit2/UIProcess/efl/WebPopupMenuProxyEfl.h.
     114        (WebKit):
     115        (WebPopupMenuListenerEfl):
     116        (WebKit::WebPopupMenuListenerEfl::create):
     117        * UIProcess/efl/WebUIPopupMenuClient.cpp: Added.
     118        (WebUIPopupMenuClient::showPopupMenu):
     119        (WebUIPopupMenuClient::hidePopupMenu):
     120        * UIProcess/efl/WebUIPopupMenuClient.h: Added.
     121        (WebKit):
     122        (WebUIPopupMenuClient):
     123        * UIProcess/efl/WebView.cpp:
     124        (WebKit::WebView::createPopupMenuProxy):
     125
    11262013-02-18  Anders Carlsson  <andersca@apple.com>
    2127
  • trunk/Source/WebKit2/PlatformEfl.cmake

    r143004 r143275  
    3838    UIProcess/API/C/cairo/WKIconDatabaseCairo.cpp
    3939
     40    UIProcess/API/C/efl/WKPageEfl.cpp
     41    UIProcess/API/C/efl/WKPopupItem.cpp
     42    UIProcess/API/C/efl/WKPopupMenuListener.cpp
    4043    UIProcess/API/C/efl/WKView.cpp
    4144
     
    103106    UIProcess/efl/WebInspectorProxyEfl.cpp
    104107    UIProcess/efl/WebPageProxyEfl.cpp
    105     UIProcess/efl/WebPopupMenuProxyEfl.cpp
     108    UIProcess/efl/WebPopupItemEfl.cpp
     109    UIProcess/efl/WebPopupMenuListenerEfl.cpp
    106110    UIProcess/efl/WebPreferencesEfl.cpp
    107111    UIProcess/efl/WebProcessProxyEfl.cpp
     112    UIProcess/efl/WebUIPopupMenuClient.cpp
    108113    UIProcess/efl/WebView.cpp
    109114    UIProcess/efl/WebViewClient.cpp
  • trunk/Source/WebKit2/Shared/API/c/efl/WKBaseEfl.h

    r120925 r143275  
    2626
    2727typedef const struct OpaqueWKView* WKViewRef;
     28typedef const struct OpaqueWKPopupItem* WKPopupItemRef;
     29typedef const struct OpaqueWKPopupMenuListener* WKPopupMenuListenerRef;
    2830
    2931#endif /* WKBaseEfl_h */
  • trunk/Source/WebKit2/Shared/APIObject.h

    r141473 r143275  
    134134        TypeSoupRequestManager,
    135135#endif
     136#if PLATFORM(EFL)
     137        TypePopupMenuItem,
     138#endif
    136139    };
    137140
  • trunk/Source/WebKit2/UIProcess/API/C/efl/WKAPICastEfl.h

    r141836 r143275  
    2525#endif
    2626
     27#include <WebCore/TextDirection.h>
     28#include <WebKit2/WKPopupItem.h>
     29
    2730namespace WebKit {
    2831
    2932class WebView;
     33class WebPopupItemEfl;
     34class WebPopupMenuListenerEfl;
    3035
    3136WK_ADD_API_MAPPING(WKViewRef, WebView)
     37WK_ADD_API_MAPPING(WKPopupItemRef, WebPopupItemEfl)
     38WK_ADD_API_MAPPING(WKPopupMenuListenerRef, WebPopupMenuListenerEfl)
     39
     40// Enum conversions.
     41inline WKPopupItemTextDirection toAPI(WebCore::TextDirection direction)
     42{
     43    WKPopupItemTextDirection wkDirection = kWKPopupItemTextDirectionLTR;
     44
     45    switch (direction) {
     46    case WebCore::RTL:
     47        wkDirection = kWKPopupItemTextDirectionRTL;
     48        break;
     49    case WebCore::LTR:
     50        wkDirection = kWKPopupItemTextDirectionLTR;
     51        break;
     52    }
     53
     54    return wkDirection;
     55}
    3256
    3357}
  • trunk/Source/WebKit2/UIProcess/API/efl/EwkView.cpp

    r143258 r143275  
    4040#include "WKNumber.h"
    4141#include "WKPageGroup.h"
     42#include "WKPopupItem.h"
    4243#include "WKString.h"
    4344#include "WKView.h"
     
    4647#include "WebPageGroup.h"
    4748#include "WebPageProxy.h"
    48 #include "WebPopupMenuProxyEfl.h"
    4949#include "WebPreferences.h"
    5050#include "ewk_back_forward_list_private.h"
     
    915915}
    916916
    917 void EwkView::requestPopupMenu(WebPopupMenuProxyEfl* popupMenuProxy, const IntRect& rect, TextDirection textDirection, double pageScaleFactor, const Vector<WebPopupItem>& items, int32_t selectedIndex)
     917COMPILE_ASSERT_MATCHING_ENUM(EWK_TEXT_DIRECTION_RIGHT_TO_LEFT, kWKPopupItemTextDirectionRTL);
     918COMPILE_ASSERT_MATCHING_ENUM(EWK_TEXT_DIRECTION_LEFT_TO_RIGHT, kWKPopupItemTextDirectionLTR);
     919
     920void EwkView::requestPopupMenu(WKPopupMenuListenerRef popupMenuListener, const WKRect& rect, WKPopupItemTextDirection textDirection, double pageScaleFactor, WKArrayRef items, int32_t selectedIndex)
    918921{
    919922    Ewk_View_Smart_Data* sd = smartData();
    920923    ASSERT(sd->api);
    921924
    922     ASSERT(popupMenuProxy);
     925    ASSERT(popupMenuListener);
    923926
    924927    if (!sd->api->popup_menu_show)
     
    928931        closePopupMenu();
    929932
    930     m_popupMenu = EwkPopupMenu::create(this, popupMenuProxy, items, selectedIndex);
    931 
    932     sd->api->popup_menu_show(sd, rect, static_cast<Ewk_Text_Direction>(textDirection), pageScaleFactor, m_popupMenu.get());
     933    m_popupMenu = EwkPopupMenu::create(this, popupMenuListener, items, selectedIndex);
     934
     935    Eina_Rectangle einaRect;
     936    EINA_RECTANGLE_SET(&einaRect, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
     937
     938    sd->api->popup_menu_show(sd, einaRect, static_cast<Ewk_Text_Direction>(textDirection), pageScaleFactor, m_popupMenu.get());
    933939}
    934940
  • trunk/Source/WebKit2/UIProcess/API/efl/EwkView.h

    r143190 r143275  
    6868class WebPageGroup;
    6969class WebPageProxy;
    70 class WebPopupItem;
    71 class WebPopupMenuProxyEfl;
    7270
    7371#if ENABLE(VIBRATION)
     
    189187    void close();
    190188
    191     void requestPopupMenu(WebKit::WebPopupMenuProxyEfl*, const WebCore::IntRect&, WebCore::TextDirection, double pageScaleFactor, const Vector<WebKit::WebPopupItem>& items, int32_t selectedIndex);
     189    void requestPopupMenu(WKPopupMenuListenerRef, const WKRect&, WKPopupItemTextDirection, double pageScaleFactor, WKArrayRef items, int32_t selectedIndex);
    192190    void closePopupMenu();
    193191
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_popup_menu.cpp

    r140686 r143275  
    2929
    3030#include "EwkView.h"
    31 #include "WebPopupMenuProxyEfl.h"
     31#include "WKAPICast.h"
     32#include "WKArray.h"
     33#include "WKPopupMenuListener.h"
     34#include "WebPopupItemEfl.h"
    3235#include "ewk_popup_menu_item_private.h"
    3336#include "ewk_popup_menu_private.h"
     
    3538using namespace WebKit;
    3639
    37 EwkPopupMenu::EwkPopupMenu(EwkView* view, WebPopupMenuProxyEfl* popupMenuProxy, const Vector<WebKit::WebPopupItem>& items, unsigned selectedIndex)
     40EwkPopupMenu::EwkPopupMenu(EwkView* view, WKPopupMenuListenerRef popupMenuListener, WKArrayRef items, unsigned selectedIndex)
    3841    : m_view(view)
    39     , m_popupMenuProxy(popupMenuProxy)
     42    , m_popupMenuListener(popupMenuListener)
    4043    , m_popupMenuItems(0)
    4144    , m_selectedIndex(selectedIndex)
    4245{
    43     const size_t size = items.size();
    44     for (size_t i = 0; i < size; ++i)
    45         m_popupMenuItems = eina_list_append(m_popupMenuItems, EwkPopupMenuItem::create(items[i]).leakPtr());
     46    size_t size = WKArrayGetSize(items);
     47    for (size_t i = 0; i < size; ++i) {
     48        WKPopupItemRef wkItem = static_cast<WKPopupItemRef>(WKArrayGetItemAtIndex(items, i));
     49        // FIXME: Remove EwkPopupMenuItem dependency on WebPopupItem.
     50        m_popupMenuItems = eina_list_append(m_popupMenuItems, EwkPopupMenuItem::create(toImpl(wkItem)->data()).leakPtr());
     51    }
    4652}
    4753
     
    7076bool EwkPopupMenu::setSelectedIndex(unsigned selectedIndex)
    7177{
    72     if (!m_popupMenuProxy)
     78    if (!m_popupMenuListener)
    7379        return false;
    7480
     
    8086
    8187    m_selectedIndex = selectedIndex;
    82     m_popupMenuProxy->valueChanged(selectedIndex);
     88    WKPopupMenuListenerSetSelection(m_popupMenuListener.get(), selectedIndex);
    8389
    8490    return true;
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_popup_menu_private.h

    r140686 r143275  
    2929
    3030#include <Eina.h>
     31#include <WebKit2/WKBase.h>
    3132#include <wtf/PassOwnPtr.h>
    32 #include <wtf/Vector.h>
    33 
    34 namespace WebKit {
    35 class WebPopupItem;
    36 class WebPopupMenuProxyEfl;
    37 }
    3833
    3934class EwkView;
     
    4136class EwkPopupMenu {
    4237public:
    43     static PassOwnPtr<EwkPopupMenu> create(EwkView* view, WebKit::WebPopupMenuProxyEfl* popupMenuProxy, const Vector<WebKit::WebPopupItem>& items, unsigned selectedIndex)
     38    static PassOwnPtr<EwkPopupMenu> create(EwkView* view, WKPopupMenuListenerRef popupMenuListener, WKArrayRef items, unsigned selectedIndex)
    4439    {
    45         return adoptPtr(new EwkPopupMenu(view, popupMenuProxy, items, selectedIndex));
     40        return adoptPtr(new EwkPopupMenu(view, popupMenuListener, items, selectedIndex));
    4641    }
    4742    ~EwkPopupMenu();
     
    5550
    5651private:
    57     EwkPopupMenu(EwkView* viewImpl, WebKit::WebPopupMenuProxyEfl*, const Vector<WebKit::WebPopupItem>& items, unsigned selectedIndex);
     52    EwkPopupMenu(EwkView* viewImpl, WKPopupMenuListenerRef, WKArrayRef items, unsigned selectedIndex);
    5853
    5954    EwkView* m_view;
    60     WebKit::WebPopupMenuProxyEfl* m_popupMenuProxy;
     55    WKRetainPtr<WKPopupMenuListenerRef> m_popupMenuListener;
    6156    Eina_List* m_popupMenuItems;
    6257    unsigned m_selectedIndex;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r143273 r143275  
    539539    m_policyClient.initialize(0);
    540540    m_uiClient.initialize(0);
     541#if PLATFORM(EFL)
     542    m_uiPopupMenuClient.initialize(0);
     543#endif
    541544
    542545    m_drawingArea = nullptr;
     
    29772980{
    29782981    if (m_activePopupMenu) {
     2982#if PLATFORM(EFL)
     2983        m_uiPopupMenuClient.hidePopupMenu(this);
     2984#else
    29792985        m_activePopupMenu->hidePopupMenu();
     2986#endif
    29802987        m_activePopupMenu->invalidate();
    29812988        m_activePopupMenu = 0;
     
    29902997    m_process->responsivenessTimer()->stop();
    29912998
     2999#if PLATFORM(EFL)
     3000    UNUSED_PARAM(data);
     3001    m_uiPopupMenuClient.showPopupMenu(this, m_activePopupMenu.get(), rect, static_cast<TextDirection>(textDirection), m_pageScaleFactor, items, selectedIndex);
     3002#else
    29923003    RefPtr<WebPopupMenuProxy> protectedActivePopupMenu = m_activePopupMenu;
    29933004
     
    29953006
    29963007    // Since Qt and Efl doesn't use a nested mainloop to show the popup and get the answer, we need to keep the client pointer valid.
    2997 #if !PLATFORM(QT) && !PLATFORM(EFL)
     3008#if !PLATFORM(QT)
    29983009    protectedActivePopupMenu->invalidate();
    29993010#endif
    30003011    protectedActivePopupMenu = 0;
     3012#endif
    30013013}
    30023014
     
    30063018        return;
    30073019
     3020#if PLATFORM(EFL)
     3021    m_uiPopupMenuClient.hidePopupMenu(this);
     3022#else
    30083023    m_activePopupMenu->hidePopupMenu();
     3024#endif
    30093025    m_activePopupMenu->invalidate();
    30103026    m_activePopupMenu = 0;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r142839 r143275  
    8181
    8282#if PLATFORM(EFL)
     83#include "WKPageEfl.h"
     84#include "WebUIPopupMenuClient.h"
    8385#include <Evas.h>
    8486#endif
     
    272274    void initializePolicyClient(const WKPagePolicyClient*);
    273275    void initializeUIClient(const WKPageUIClient*);
     276#if PLATFORM(EFL)
     277    void initializeUIPopupMenuClient(const WKPageUIPopupMenuClient*);
     278#endif
    274279
    275280    void initializeWebPage();
     
    10251030    WebFormClient m_formClient;
    10261031    WebUIClient m_uiClient;
     1032#if PLATFORM(EFL)
     1033    WebUIPopupMenuClient m_uiPopupMenuClient;
     1034#endif
    10271035    WebFindClient m_findClient;
    10281036    WebFindMatchesClient m_findMatchesClient;
  • trunk/Source/WebKit2/UIProcess/WebPopupMenuProxy.h

    r128683 r143275  
    6767    }
    6868
     69#if !PLATFORM(EFL)
    6970    virtual void showPopupMenu(const WebCore::IntRect& rect, WebCore::TextDirection, double pageScaleFactor, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex) = 0;
    7071    virtual void hidePopupMenu() = 0;
     72#endif
    7173
    7274    void invalidate() { m_client = 0; }
  • trunk/Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp

    r141978 r143275  
    3131#include "WKAPICast.h"
    3232#include "WKEvent.h"
     33#include "WKPageEfl.h"
    3334#include "WKString.h"
    3435#include "ewk_file_chooser_request_private.h"
     
    8586
    8687    WKPageSetPageUIClient(pageRef, &uiClient);
     88
     89    // Popup Menu UI client.
     90    WKPageUIPopupMenuClient uiPopupMenuClient;
     91    memset(&uiPopupMenuClient, 0, sizeof(WKPageUIPopupMenuClient));
     92    uiPopupMenuClient.version = kWKPageUIPopupMenuClientCurrentVersion;
     93    uiPopupMenuClient.clientInfo = this;
     94    uiPopupMenuClient.showPopupMenu = showPopupMenu;
     95    uiPopupMenuClient.hidePopupMenu = hidePopupMenu;
     96    WKPageSetUIPopupMenuClient(pageRef, &uiPopupMenuClient);
    8797}
    8898
     
    232242#endif
    233243
     244void PageUIClientEfl::showPopupMenu(WKPageRef, WKPopupMenuListenerRef menuListenerRef, WKRect rect, WKPopupItemTextDirection textDirection, double pageScaleFactor, WKArrayRef itemsRef, int32_t selectedIndex, const void* clientInfo)
     245{
     246    return toPageUIClientEfl(clientInfo)->m_view->requestPopupMenu(menuListenerRef, rect, textDirection, pageScaleFactor, itemsRef, selectedIndex);
     247}
     248
     249void PageUIClientEfl::hidePopupMenu(WKPageRef, const void* clientInfo)
     250{
     251    return toPageUIClientEfl(clientInfo)->m_view->closePopupMenu();
     252}
     253
    234254} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/efl/PageUIClientEfl.h

    r141848 r143275  
    2929
    3030#include "WKPage.h"
     31#include "WKPopupItem.h"
    3132#include <WebKit2/WKBase.h>
    3233#include <wtf/PassOwnPtr.h>
     
    7475#endif
    7576
     77    static void showPopupMenu(WKPageRef, WKPopupMenuListenerRef, WKRect, WKPopupItemTextDirection, double pageScaleFactor, WKArrayRef itemsRef, int32_t selectedIndex, const void* clientInfo);
     78    static void hidePopupMenu(WKPageRef, const void* clientInfo);
     79
    7680    EwkView* m_view;
    7781};
  • trunk/Source/WebKit2/UIProcess/efl/WebPageProxyEfl.cpp

    r143004 r143275  
    125125}
    126126
     127void WebPageProxy::initializeUIPopupMenuClient(const WKPageUIPopupMenuClient* client)
     128{
     129    m_uiPopupMenuClient.initialize(client);
     130}
     131
    127132} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/efl/WebPopupMenuListenerEfl.cpp

    r143274 r143275  
    2525
    2626#include "config.h"
    27 #include "WebPopupMenuProxyEfl.h"
    28 
    29 #include "EwkView.h"
    30 #include "NativeWebMouseEvent.h"
    31 #include "WebPopupItem.h"
    32 #include "ewk_view.h"
    33 #include <wtf/text/CString.h>
    34 
    35 using namespace WebCore;
     27#include "WebPopupMenuListenerEfl.h"
    3628
    3729namespace WebKit {
    3830
    39 WebPopupMenuProxyEfl::WebPopupMenuProxyEfl(EwkView* view, WebPopupMenuProxy::Client* client)
     31WebPopupMenuListenerEfl::WebPopupMenuListenerEfl(WebPopupMenuProxy::Client* client)
    4032    : WebPopupMenuProxy(client)
    41     , m_view(view)
    4233{
    4334}
    4435
    45 void WebPopupMenuProxyEfl::showPopupMenu(const IntRect& rect, TextDirection textDirection, double pageScaleFactor, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex)
     36void WebPopupMenuListenerEfl::valueChanged(int newSelectedIndex)
    4637{
    47     m_view->requestPopupMenu(this, rect, textDirection, pageScaleFactor, items, selectedIndex);
    48 }
     38    if (!m_client)
     39        return;
    4940
    50 void WebPopupMenuProxyEfl::hidePopupMenu()
    51 {
    52     m_view->closePopupMenu();
    53 }
    54 
    55 void WebPopupMenuProxyEfl::valueChanged(int newSelectedIndex)
    56 {
    5741    m_client->valueChangedForPopupMenu(this, newSelectedIndex);
     42    invalidate();
    5843}
    5944
  • trunk/Source/WebKit2/UIProcess/efl/WebPopupMenuListenerEfl.h

    r143274 r143275  
    2424 */
    2525
    26 #ifndef WebPopupMenuProxyEfl_h
    27 #define WebPopupMenuProxyEfl_h
     26#ifndef WebPopupMenuListenerEfl_h
     27#define WebPopupMenuListenerEfl_h
    2828
    2929#include "WebPopupMenuProxy.h"
    3030
    31 namespace WebCore {
    32 class IntRect;
    33 }
    34 
    35 class EwkView;
    36 
    3731namespace WebKit {
    3832
    39 class WebPageProxy;
    40 
    41 class WebPopupMenuProxyEfl : public WebPopupMenuProxy {
     33class WebPopupMenuListenerEfl : public WebPopupMenuProxy {
    4234public:
    43     static PassRefPtr<WebPopupMenuProxyEfl> create(EwkView* viewImpl, WebPopupMenuProxy::Client* client)
     35    static PassRefPtr<WebPopupMenuListenerEfl> create(WebPopupMenuProxy::Client* client)
    4436    {
    45         return adoptRef(new WebPopupMenuProxyEfl(viewImpl, client));
     37        return adoptRef(new WebPopupMenuListenerEfl(client));
    4638    }
    47 
    48     void showPopupMenu(const WebCore::IntRect&, WebCore::TextDirection, double pageScaleFactor, const Vector<WebPopupItem>&, const PlatformPopupMenuData&, int32_t selectedIndex);
    49     void hidePopupMenu();
    5039
    5140    void valueChanged(int newSelectedIndex);
    5241
    5342private:
    54     WebPopupMenuProxyEfl(EwkView*, WebPopupMenuProxy::Client*);
    55 
    56     EwkView* m_view;
     43    WebPopupMenuListenerEfl(WebPopupMenuProxy::Client*);
    5744};
    5845
    5946} // namespace WebKit
    6047
    61 #endif // WebPopupMenuProxyEfl_h
     48#endif // WebPopupMenuListenerEfl_h
  • trunk/Source/WebKit2/UIProcess/efl/WebView.cpp

    r143004 r143275  
    3737#include "WebContextMenuProxyEfl.h"
    3838#include "WebPageProxy.h"
    39 #include "WebPopupMenuProxyEfl.h"
     39#include "WebPopupMenuListenerEfl.h"
    4040#include "ewk_context_private.h"
    4141
     
    303303PassRefPtr<WebPopupMenuProxy> WebView::createPopupMenuProxy(WebPageProxy* page)
    304304{
    305     return WebPopupMenuProxyEfl::create(m_ewkView, page);
     305    return WebPopupMenuListenerEfl::create(page);
    306306}
    307307
Note: See TracChangeset for help on using the changeset viewer.