diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-20 13:01:08 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-20 13:01:08 +0200 |
commit | 49233e234e5c787396cadb2cea33b31ae0cd65c1 (patch) | |
tree | 5410cb9a8fd53168bb60d62c54b654d86f03c38d /Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp | |
parent | b211c645d8ab690f713515dfdc84d80b11c27d2c (diff) | |
download | qtwebkit-49233e234e5c787396cadb2cea33b31ae0cd65c1.tar.gz |
Imported WebKit commit 3a8c29f35d00659d2ce7a0ccdfa8304f14e82327 (http://svn.webkit.org/repository/webkit/trunk@120813)
New snapshot with Windows build fixes
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp index 938f95fd1..7f5764e7d 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp @@ -21,7 +21,10 @@ #include "config.h" #include "WebKitWebView.h" +#include "WebContextMenuItem.h" +#include "WebContextMenuItemData.h" #include "WebKitBackForwardListPrivate.h" +#include "WebKitContextMenuClient.h" #include "WebKitEnumTypes.h" #include "WebKitError.h" #include "WebKitFullscreenClient.h" @@ -295,6 +298,7 @@ static void webkitWebViewConstructed(GObject* object) attachPolicyClientToPage(webView); attachResourceLoadClientToView(webView); attachFullScreenClientToView(webView); + attachContextMenuClientToView(webView); WebPageProxy* page = webkitWebViewBaseGetPage(webViewBase); priv->backForwardList = adoptGRef(webkitBackForwardListCreate(WKPageGetBackForwardList(toAPI(page)))); @@ -1168,6 +1172,54 @@ void webkitWebViewRunFileChooserRequest(WebKitWebView* webView, WebKitFileChoose g_signal_emit(webView, signals[RUN_FILE_CHOOSER], 0, request, &returnValue); } +static void webkitWebViewCreateAndAppendDefaultMenuItems(WebKitWebView* webView, WKArrayRef wkProposedMenu, Vector<ContextMenuItem>& contextMenuItems) +{ + for (size_t i = 0; i < WKArrayGetSize(wkProposedMenu); ++i) { + WKContextMenuItemRef wkItem = static_cast<WKContextMenuItemRef>(WKArrayGetItemAtIndex(wkProposedMenu, i)); + contextMenuItems.append(toImpl(wkItem)->data()->core()); + } +} + +static bool webkitWebViewShouldShowInputMethodsMenu(WebKitWebView* webView) +{ + GtkSettings* settings = gtk_widget_get_settings(GTK_WIDGET(webView)); + if (!settings) + return true; + + gboolean showInputMethodMenu; + g_object_get(settings, "gtk-show-input-method-menu", &showInputMethodMenu, NULL); + return showInputMethodMenu; +} + +static void webkitWebViewCreateAndAppendInputMethodsMenuItem(WebKitWebView* webView, Vector<ContextMenuItem>& contextMenuItems) +{ + if (!webkitWebViewShouldShowInputMethodsMenu(webView)) + return; + + GtkIMContext* imContext = webkitWebViewBaseGetIMContext(WEBKIT_WEB_VIEW_BASE(webView)); + GtkMenu* imContextMenu = GTK_MENU(gtk_menu_new()); + gtk_im_multicontext_append_menuitems(GTK_IM_MULTICONTEXT(imContext), GTK_MENU_SHELL(imContextMenu)); + ContextMenu subMenu(imContextMenu); + + ContextMenuItem separator(SeparatorType, ContextMenuItemTagNoAction, String()); + contextMenuItems.append(separator); + ContextMenuItem menuItem(SubmenuType, ContextMenuItemTagNoAction, _("Input _Methods"), &subMenu); + contextMenuItems.append(menuItem); +} + +void webkitWebViewPopulateContextMenu(WebKitWebView* webView, WKArrayRef wkProposedMenu, WKHitTestResultRef wkHitTestResult) +{ + WebContextMenuProxyGtk* contextMenu = webkitWebViewBaseGetActiveContextMenuProxy(WEBKIT_WEB_VIEW_BASE(webView)); + ASSERT(contextMenu); + + Vector<ContextMenuItem> contextMenuItems; + webkitWebViewCreateAndAppendDefaultMenuItems(webView, wkProposedMenu, contextMenuItems); + if (WKHitTestResultIsContentEditable(wkHitTestResult)) + webkitWebViewCreateAndAppendInputMethodsMenuItem(webView, contextMenuItems); + + contextMenu->populate(contextMenuItems); +} + /** * webkit_web_view_new: * |