Diff
Modified: trunk/Source/WebKit2/ChangeLog (88802 => 88803)
--- trunk/Source/WebKit2/ChangeLog 2011-06-14 14:58:30 UTC (rev 88802)
+++ trunk/Source/WebKit2/ChangeLog 2011-06-14 15:03:51 UTC (rev 88803)
@@ -2,6 +2,23 @@
Reviewed by Martin Robinson.
+ [GTK] Move the code to show the context menu from WebKitWebViewBase to WebContextMenuProxyGtk
+ https://bugs.webkit.org/show_bug.cgi?id=62627
+
+ * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+ * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
+ * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
+ (WebKit::WebContextMenuProxyGtk::showContextMenu):
+ (WebKit::WebContextMenuProxyGtk::hideContextMenu):
+ (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
+ (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
+ (WebKit::WebContextMenuProxyGtk::menuPositionFunction):
+ * UIProcess/gtk/WebContextMenuProxyGtk.h:
+
+2011-06-14 Carlos Garcia Campos <[email protected]>
+
+ Reviewed by Martin Robinson.
+
[GTK] Rename convertWidgetRectToScreenRect() to convertWidgetPointToScreenPoint()
https://bugs.webkit.org/show_bug.cgi?id=62626
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp (88802 => 88803)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp 2011-06-14 14:58:30 UTC (rev 88802)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp 2011-06-14 15:03:51 UTC (rev 88803)
@@ -56,7 +56,6 @@
GtkIMContext* imContext;
GtkClickCounter clickCounter;
CString tooltipText;
- IntPoint lastPopupPosition;
};
G_DEFINE_TYPE(WebKitWebViewBase, webkit_web_view_base, GTK_TYPE_CONTAINER)
@@ -386,41 +385,4 @@
#endif
}
-static IntPoint globalPointForClientPoint(GdkWindow* window, const IntPoint& clientPoint)
-{
- int x, y;
- gdk_window_get_origin(window, &x, &y);
- return clientPoint + IntSize(x, y);
-}
-static void popupMenuPositionFunction(GtkMenu* menu, gint* x, gint* y, gboolean* pushIn, gpointer userData)
-{
- WebKitWebViewBase* view = WEBKIT_WEB_VIEW_BASE(userData);
- WebKitWebViewBasePrivate* priv = view->priv;
- GdkScreen* screen = gtk_widget_get_screen(GTK_WIDGET(view));
- GtkRequisition menuSize;
-
-#ifdef GTK_API_VERSION_2
- gtk_widget_size_request(GTK_WIDGET(menu), &menuSize);
-#else
- gtk_widget_get_preferred_size(GTK_WIDGET(menu), &menuSize, 0);
-#endif
-
- *x = priv->lastPopupPosition.x();
- if ((*x + menuSize.width) >= gdk_screen_get_width(screen))
- *x -= menuSize.width;
-
- *y = priv->lastPopupPosition.y();
- if ((*y + menuSize.height) >= gdk_screen_get_height(screen))
- *y -= menuSize.height;
-
- *pushIn = FALSE;
-}
-
-void webkitWebViewBaseShowContextMenu(WebKitWebViewBase* webViewBase, GtkMenu* menu, const IntPoint& position)
-{
- webViewBase->priv->lastPopupPosition = globalPointForClientPoint(gtk_widget_get_window(GTK_WIDGET(webViewBase)), position);
-
- // Display menu initiated by right click (mouse button pressed = 3).
- gtk_menu_popup(menu, 0, 0, &popupMenuPositionFunction, webViewBase, 3, gtk_get_current_event_time());
-}
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h (88802 => 88803)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h 2011-06-14 14:58:30 UTC (rev 88802)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h 2011-06-14 15:03:51 UTC (rev 88803)
@@ -46,8 +46,6 @@
void webkitWebViewBaseSetTooltipText(WebKitWebViewBase*, const char*);
-void webkitWebViewBaseShowContextMenu(WebKitWebViewBase*, GtkMenu*, const WebCore::IntPoint&);
-
G_END_DECLS
#endif // WebKitWebViewBasePrivate_h
Modified: trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp (88802 => 88803)
--- trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp 2011-06-14 14:58:30 UTC (rev 88802)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp 2011-06-14 15:03:51 UTC (rev 88803)
@@ -26,11 +26,10 @@
#include "config.h"
#include "WebContextMenuProxyGtk.h"
-#include "IntPoint.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>
@@ -78,21 +77,50 @@
if (items.isEmpty())
return;
- webkitWebViewBaseShowContextMenu(WEBKIT_WEB_VIEW_BASE(m_webView), createGtkMenu(items), position);
+ m_popup = createGtkMenu(items);
+ m_popupPosition = convertWidgetPointToScreenPoint(m_webView, position);
+
+ // Display menu initiated by right click (mouse button pressed = 3).
+ gtk_menu_popup(m_popup, 0, 0, reinterpret_cast<GtkMenuPositionFunc>(menuPositionFunction), this, 3, GDK_CURRENT_TIME);
}
void WebContextMenuProxyGtk::hideContextMenu()
{
+ gtk_menu_popdown(m_popup);
}
WebContextMenuProxyGtk::WebContextMenuProxyGtk(GtkWidget* webView, WebPageProxy* page)
: m_webView(webView)
, m_page(page)
+ , m_popup(0)
{
}
WebContextMenuProxyGtk::~WebContextMenuProxyGtk()
{
+ if (m_popup)
+ gtk_widget_destroy(GTK_WIDGET(m_popup));
}
+void WebContextMenuProxyGtk::menuPositionFunction(GtkMenu* menu, gint* x, gint* y, gboolean* pushIn, WebContextMenuProxyGtk* popupMenu)
+{
+ GtkRequisition menuSize;
+#ifdef GTK_API_VERSION_2
+ gtk_widget_size_request(GTK_WIDGET(menu), &menuSize);
+#else
+ gtk_widget_get_preferred_size(GTK_WIDGET(menu), &menuSize, 0);
+#endif
+
+ GdkScreen* screen = gtk_widget_get_screen(popupMenu->m_webView);
+ *x = popupMenu->m_popupPosition.x();
+ if ((*x + menuSize.width) >= gdk_screen_get_width(screen))
+ *x -= menuSize.width;
+
+ *y = popupMenu->m_popupPosition.y();
+ if ((*y + menuSize.height) >= gdk_screen_get_height(screen))
+ *y -= menuSize.height;
+
+ *pushIn = FALSE;
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h (88802 => 88803)
--- trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h 2011-06-14 14:58:30 UTC (rev 88802)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h 2011-06-14 15:03:51 UTC (rev 88803)
@@ -27,6 +27,7 @@
#define WebContextMenuProxyGtk_h
#include "WebContextMenuProxy.h"
+#include <WebCore/IntPoint.h>
namespace WebKit {
@@ -48,8 +49,12 @@
WebContextMenuProxyGtk(GtkWidget*, WebPageProxy*);
GtkMenu* createGtkMenu(const Vector<WebContextMenuItemData>&);
+ static void menuPositionFunction(GtkMenu*, gint*, gint*, gboolean*, WebContextMenuProxyGtk*);
+
GtkWidget* m_webView;
WebPageProxy* m_page;
+ GtkMenu* m_popup;
+ WebCore::IntPoint m_popupPosition;
};