Title: [88803] trunk/Source/WebKit2
Revision
88803
Author
[email protected]
Date
2011-06-14 08:03:51 -0700 (Tue, 14 Jun 2011)

Log Message

2011-06-14  Carlos Garcia Campos  <[email protected]>

        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:

Modified Paths

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;
 };
 
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to