Changeset 88803 in webkit


Ignore:
Timestamp:
Jun 14, 2011 8:03:51 AM (13 years ago)
Author:
Carlos Garcia Campos
Message:

2011-06-14 Carlos Garcia Campos <cgarcia@igalia.com>

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:
Location:
trunk/Source/WebKit2
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r88802 r88803  
     12011-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        Reviewed by Martin Robinson.
     4
     5        [GTK] Move the code to show the context menu from WebKitWebViewBase to WebContextMenuProxyGtk
     6        https://bugs.webkit.org/show_bug.cgi?id=62627
     7
     8        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
     9        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
     10        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
     11        (WebKit::WebContextMenuProxyGtk::showContextMenu):
     12        (WebKit::WebContextMenuProxyGtk::hideContextMenu):
     13        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
     14        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
     15        (WebKit::WebContextMenuProxyGtk::menuPositionFunction):
     16        * UIProcess/gtk/WebContextMenuProxyGtk.h:
     17
    1182011-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>
    219
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp

    r88646 r88803  
    5757    GtkClickCounter clickCounter;
    5858    CString tooltipText;
    59     IntPoint lastPopupPosition;
    6059};
    6160
     
    387386}
    388387
    389 static IntPoint globalPointForClientPoint(GdkWindow* window, const IntPoint& clientPoint)
    390 {
    391     int x, y;
    392     gdk_window_get_origin(window, &x, &y);
    393     return clientPoint + IntSize(x, y);
    394 }
    395 
    396 static void popupMenuPositionFunction(GtkMenu* menu, gint* x, gint* y, gboolean* pushIn, gpointer userData)
    397 {
    398     WebKitWebViewBase* view = WEBKIT_WEB_VIEW_BASE(userData);
    399     WebKitWebViewBasePrivate* priv = view->priv;
    400     GdkScreen* screen = gtk_widget_get_screen(GTK_WIDGET(view));
    401     GtkRequisition menuSize;
    402 
    403 #ifdef GTK_API_VERSION_2
    404     gtk_widget_size_request(GTK_WIDGET(menu), &menuSize);
    405 #else
    406     gtk_widget_get_preferred_size(GTK_WIDGET(menu), &menuSize, 0);
    407 #endif
    408 
    409     *x = priv->lastPopupPosition.x();
    410     if ((*x + menuSize.width) >= gdk_screen_get_width(screen))
    411         *x -= menuSize.width;
    412 
    413     *y = priv->lastPopupPosition.y();
    414     if ((*y + menuSize.height) >= gdk_screen_get_height(screen))
    415         *y -= menuSize.height;
    416 
    417     *pushIn = FALSE;
    418 }
    419 
    420 void webkitWebViewBaseShowContextMenu(WebKitWebViewBase* webViewBase, GtkMenu* menu, const IntPoint& position)
    421 {
    422     webViewBase->priv->lastPopupPosition = globalPointForClientPoint(gtk_widget_get_window(GTK_WIDGET(webViewBase)), position);
    423 
    424     // Display menu initiated by right click (mouse button pressed = 3).
    425     gtk_menu_popup(menu, 0, 0, &popupMenuPositionFunction, webViewBase, 3, gtk_get_current_event_time());
    426 }
     388
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h

    r88634 r88803  
    4747void webkitWebViewBaseSetTooltipText(WebKitWebViewBase*, const char*);
    4848
    49 void webkitWebViewBaseShowContextMenu(WebKitWebViewBase*, GtkMenu*, const WebCore::IntPoint&);
    50 
    5149G_END_DECLS
    5250
  • trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp

    r88634 r88803  
    2727#include "WebContextMenuProxyGtk.h"
    2828
    29 #include "IntPoint.h"
    3029#include "WebContextMenuItemData.h"
    31 #include "WebKitWebViewBasePrivate.h"
    3230#include "WebPageProxy.h"
    3331#include <WebCore/ContextMenu.h>
     32#include <WebCore/GtkUtilities.h>
    3433#include <gtk/gtk.h>
    3534#include <wtf/text/CString.h>
     
    7978        return;
    8079
    81     webkitWebViewBaseShowContextMenu(WEBKIT_WEB_VIEW_BASE(m_webView), createGtkMenu(items), position);
     80    m_popup = createGtkMenu(items);
     81    m_popupPosition = convertWidgetPointToScreenPoint(m_webView, position);
     82
     83    // Display menu initiated by right click (mouse button pressed = 3).
     84    gtk_menu_popup(m_popup, 0, 0, reinterpret_cast<GtkMenuPositionFunc>(menuPositionFunction), this, 3, GDK_CURRENT_TIME);
    8285}
    8386
    8487void WebContextMenuProxyGtk::hideContextMenu()
    8588{
     89    gtk_menu_popdown(m_popup);
    8690}
    8791
     
    8993    : m_webView(webView)
    9094    , m_page(page)
     95    , m_popup(0)
    9196{
    9297}
     
    9499WebContextMenuProxyGtk::~WebContextMenuProxyGtk()
    95100{
     101    if (m_popup)
     102        gtk_widget_destroy(GTK_WIDGET(m_popup));
     103}
     104
     105void WebContextMenuProxyGtk::menuPositionFunction(GtkMenu* menu, gint* x, gint* y, gboolean* pushIn, WebContextMenuProxyGtk* popupMenu)
     106{
     107    GtkRequisition menuSize;
     108#ifdef GTK_API_VERSION_2
     109    gtk_widget_size_request(GTK_WIDGET(menu), &menuSize);
     110#else
     111    gtk_widget_get_preferred_size(GTK_WIDGET(menu), &menuSize, 0);
     112#endif
     113
     114    GdkScreen* screen = gtk_widget_get_screen(popupMenu->m_webView);
     115    *x = popupMenu->m_popupPosition.x();
     116    if ((*x + menuSize.width) >= gdk_screen_get_width(screen))
     117        *x -= menuSize.width;
     118
     119    *y = popupMenu->m_popupPosition.y();
     120    if ((*y + menuSize.height) >= gdk_screen_get_height(screen))
     121        *y -= menuSize.height;
     122
     123    *pushIn = FALSE;
    96124}
    97125
  • trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h

    r88634 r88803  
    2828
    2929#include "WebContextMenuProxy.h"
     30#include <WebCore/IntPoint.h>
    3031
    3132namespace WebKit {
     
    4950    GtkMenu* createGtkMenu(const Vector<WebContextMenuItemData>&);
    5051
     52    static void menuPositionFunction(GtkMenu*, gint*, gint*, gboolean*, WebContextMenuProxyGtk*);
     53
    5154    GtkWidget* m_webView;
    5255    WebPageProxy* m_page;
     56    GtkMenu* m_popup;
     57    WebCore::IntPoint m_popupPosition;
    5358};
    5459
Note: See TracChangeset for help on using the changeset viewer.