summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-06-20 13:01:08 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-06-20 13:01:08 +0200
commit49233e234e5c787396cadb2cea33b31ae0cd65c1 (patch)
tree5410cb9a8fd53168bb60d62c54b654d86f03c38d /Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp
parentb211c645d8ab690f713515dfdc84d80b11c27d2c (diff)
downloadqtwebkit-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/gtk/WebContextMenuProxyGtk.cpp')
-rw-r--r--Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp58
1 files changed, 33 insertions, 25 deletions
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 <WebCore/ContextMenu.h>
#include <WebCore/GtkUtilities.h>
#include <gtk/gtk.h>
#include <wtf/text/CString.h>
@@ -51,59 +53,64 @@ static void contextMenuItemActivatedCallback(GtkAction* action, WebPageProxy* pa
page->contextMenuItemSelected(item);
}
-GtkMenu* WebContextMenuProxyGtk::createGtkMenu(const Vector<WebContextMenuItemData>& 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<ContextMenuItem>& items)
+{
+ for (size_t i = 0; i < items.size(); i++)
+ append(items.at(i));
+}
+
+void WebContextMenuProxyGtk::populate(const Vector<WebContextMenuItemData>& 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<WebContextMenuItemData>& 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<GtkMenuPositionFunc>(menuPositionFunction), this,
+ gtk_menu_popup(m_menu.platformDescription(), 0, 0, reinterpret_cast<GtkMenuPositionFunc>(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)