From 49233e234e5c787396cadb2cea33b31ae0cd65c1 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 20 Jun 2012 13:01:08 +0200 Subject: Imported WebKit commit 3a8c29f35d00659d2ce7a0ccdfa8304f14e82327 (http://svn.webkit.org/repository/webkit/trunk@120813) New snapshot with Windows build fixes --- .../UIProcess/gtk/WebContextMenuProxyGtk.cpp | 58 ++++++++++++---------- 1 file changed, 33 insertions(+), 25 deletions(-) (limited to 'Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp') diff --git a/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp b/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp index d85b3dda2..d80f24ce7 100644 --- a/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp +++ b/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp @@ -26,10 +26,12 @@ #include "config.h" #include "WebContextMenuProxyGtk.h" +#if ENABLE(CONTEXT_MENUS) + #include "NativeWebMouseEvent.h" #include "WebContextMenuItemData.h" +#include "WebKitWebViewBasePrivate.h" #include "WebPageProxy.h" -#include #include #include #include @@ -51,59 +53,64 @@ static void contextMenuItemActivatedCallback(GtkAction* action, WebPageProxy* pa page->contextMenuItemSelected(item); } -GtkMenu* WebContextMenuProxyGtk::createGtkMenu(const Vector& items) +void WebContextMenuProxyGtk::append(ContextMenuItem& menuItem) +{ + GtkAction* action = menuItem.gtkAction(); + + if (action && (menuItem.type() == ActionType || menuItem.type() == CheckableActionType)) { + g_object_set_data(G_OBJECT(action), gContextMenuActionId, GINT_TO_POINTER(menuItem.action())); + g_signal_connect(action, "activate", G_CALLBACK(contextMenuItemActivatedCallback), m_page); + } + + m_menu.appendItem(menuItem); +} + +void WebContextMenuProxyGtk::populate(Vector& items) +{ + for (size_t i = 0; i < items.size(); i++) + append(items.at(i)); +} + +void WebContextMenuProxyGtk::populate(const Vector& items) { - ContextMenu menu; for (size_t i = 0; i < items.size(); i++) { - const WebContextMenuItemData& item = items.at(i); - ContextMenuItem menuItem(item.type(), item.action(), item.title(), item.enabled(), item.checked()); - GtkAction* action = menuItem.gtkAction(); - - if (action && (item.type() == WebCore::ActionType || item.type() == WebCore::CheckableActionType)) { - g_object_set_data(G_OBJECT(action), gContextMenuActionId, GINT_TO_POINTER(item.action())); - g_signal_connect(action, "activate", G_CALLBACK(contextMenuItemActivatedCallback), m_page); - } - - if (item.type() == WebCore::SubmenuType) { - ContextMenu subMenu(createGtkMenu(item.submenu())); - menuItem.setSubMenu(&subMenu); - } - menu.appendItem(menuItem); + ContextMenuItem menuitem = items.at(i).core(); + append(menuitem); } - return menu.releasePlatformDescription(); } void WebContextMenuProxyGtk::showContextMenu(const WebCore::IntPoint& position, const Vector& items) { - if (items.isEmpty()) + if (!items.isEmpty()) + populate(items); + + if (!m_menu.itemCount()) return; - m_popup = createGtkMenu(items); m_popupPosition = convertWidgetPointToScreenPoint(m_webView, position); // Display menu initiated by right click (mouse button pressed = 3). NativeWebMouseEvent* mouseEvent = m_page->currentlyProcessedMouseDownEvent(); const GdkEvent* event = mouseEvent ? mouseEvent->nativeEvent() : 0; - gtk_menu_popup(m_popup, 0, 0, reinterpret_cast(menuPositionFunction), this, + gtk_menu_popup(m_menu.platformDescription(), 0, 0, reinterpret_cast(menuPositionFunction), this, event ? event->button.button : 3, event ? event->button.time : GDK_CURRENT_TIME); } void WebContextMenuProxyGtk::hideContextMenu() { - gtk_menu_popdown(m_popup); + gtk_menu_popdown(m_menu.platformDescription()); } WebContextMenuProxyGtk::WebContextMenuProxyGtk(GtkWidget* webView, WebPageProxy* page) : m_webView(webView) , m_page(page) - , m_popup(0) { + webkitWebViewBaseSetActiveContextMenuProxy(WEBKIT_WEB_VIEW_BASE(m_webView), this); } WebContextMenuProxyGtk::~WebContextMenuProxyGtk() { - if (m_popup) - gtk_widget_destroy(GTK_WIDGET(m_popup)); + webkitWebViewBaseSetActiveContextMenuProxy(WEBKIT_WEB_VIEW_BASE(m_webView), 0); } void WebContextMenuProxyGtk::menuPositionFunction(GtkMenu* menu, gint* x, gint* y, gboolean* pushIn, WebContextMenuProxyGtk* popupMenu) @@ -124,3 +131,4 @@ void WebContextMenuProxyGtk::menuPositionFunction(GtkMenu* menu, gint* x, gint* } } // namespace WebKit +#endif // ENABLE(CONTEXT_MENUS) -- cgit v1.2.1