summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp')
-rw-r--r--Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp50
1 files changed, 31 insertions, 19 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp
index ea5e42757..6671dc93a 100644
--- a/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp
+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp
@@ -20,32 +20,44 @@
#include "config.h"
#include "WebKitContextMenuClient.h"
-#include "WebKitPrivate.h"
+#include "APIContextMenuClient.h"
+#include "WebContextMenuItem.h"
#include "WebKitWebViewBasePrivate.h"
#include "WebKitWebViewPrivate.h"
using namespace WebKit;
-static void getContextMenuFromProposedMenu(WKPageRef, WKArrayRef proposedMenu, WKArrayRef*, WKHitTestResultRef hitTestResult, WKTypeRef userData, const void* clientInfo)
-{
- webkitWebViewPopulateContextMenu(WEBKIT_WEB_VIEW(clientInfo), toImpl(proposedMenu), toImpl(hitTestResult));
-}
+class ContextMenuClient final: public API::ContextMenuClient {
+public:
+ explicit ContextMenuClient(WebKitWebView* webView)
+ : m_webView(webView)
+ {
+ }
+
+private:
+ bool getContextMenuFromProposedMenu(WebPageProxy&, const Vector<RefPtr<WebContextMenuItem>>& proposedMenu, Vector<RefPtr<WebContextMenuItem>>&, const WebHitTestResultData& hitTestResultData, API::Object* userData) override
+ {
+ GRefPtr<GVariant> variant;
+ if (userData) {
+ ASSERT(userData->type() == API::Object::Type::String);
+ CString userDataString = static_cast<API::String*>(userData)->string().utf8();
+ variant = adoptGRef(g_variant_parse(nullptr, userDataString.data(), userDataString.data() + userDataString.length(), nullptr, nullptr));
+ }
+
+ Vector<WebContextMenuItemData> menuItems;
+ menuItems.reserveInitialCapacity(proposedMenu.size());
+ for (auto& item : proposedMenu)
+ menuItems.uncheckedAppend(item->data());
+ webkitWebViewPopulateContextMenu(m_webView, menuItems, hitTestResultData, variant.get());
+ return true;
+ }
+
+ WebKitWebView* m_webView;
+};
void attachContextMenuClientToView(WebKitWebView* webView)
{
- WKPageContextMenuClientV3 wkContextMenuClient = {
- {
- 3, // version
- webView, // clientInfo
- },
- 0, // getContextMenuFromProposedMenu_deprecatedForUseWithV0
- 0, // customContextMenuItemSelected
- 0, // contextMenuDismissed
- getContextMenuFromProposedMenu,
- 0, // showContextMenu
- 0, // hideContextMenu
- };
- WKPageRef wkPage = toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)));
- WKPageSetPageContextMenuClient(wkPage, &wkContextMenuClient.base);
+ WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
+ page->setContextMenuClient(std::make_unique<ContextMenuClient>(webView));
}