Changeset 88803 in webkit
- Timestamp:
- Jun 14, 2011 8:03:51 AM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r88802 r88803 1 2011-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 1 18 2011-06-14 Carlos Garcia Campos <cgarcia@igalia.com> 2 19 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
r88646 r88803 57 57 GtkClickCounter clickCounter; 58 58 CString tooltipText; 59 IntPoint lastPopupPosition;60 59 }; 61 60 … … 387 386 } 388 387 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 47 47 void webkitWebViewBaseSetTooltipText(WebKitWebViewBase*, const char*); 48 48 49 void webkitWebViewBaseShowContextMenu(WebKitWebViewBase*, GtkMenu*, const WebCore::IntPoint&);50 51 49 G_END_DECLS 52 50 -
trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp
r88634 r88803 27 27 #include "WebContextMenuProxyGtk.h" 28 28 29 #include "IntPoint.h"30 29 #include "WebContextMenuItemData.h" 31 #include "WebKitWebViewBasePrivate.h"32 30 #include "WebPageProxy.h" 33 31 #include <WebCore/ContextMenu.h> 32 #include <WebCore/GtkUtilities.h> 34 33 #include <gtk/gtk.h> 35 34 #include <wtf/text/CString.h> … … 79 78 return; 80 79 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); 82 85 } 83 86 84 87 void WebContextMenuProxyGtk::hideContextMenu() 85 88 { 89 gtk_menu_popdown(m_popup); 86 90 } 87 91 … … 89 93 : m_webView(webView) 90 94 , m_page(page) 95 , m_popup(0) 91 96 { 92 97 } … … 94 99 WebContextMenuProxyGtk::~WebContextMenuProxyGtk() 95 100 { 101 if (m_popup) 102 gtk_widget_destroy(GTK_WIDGET(m_popup)); 103 } 104 105 void 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; 96 124 } 97 125 -
trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h
r88634 r88803 28 28 29 29 #include "WebContextMenuProxy.h" 30 #include <WebCore/IntPoint.h> 30 31 31 32 namespace WebKit { … … 49 50 GtkMenu* createGtkMenu(const Vector<WebContextMenuItemData>&); 50 51 52 static void menuPositionFunction(GtkMenu*, gint*, gint*, gboolean*, WebContextMenuProxyGtk*); 53 51 54 GtkWidget* m_webView; 52 55 WebPageProxy* m_page; 56 GtkMenu* m_popup; 57 WebCore::IntPoint m_popupPosition; 53 58 }; 54 59
Note: See TracChangeset
for help on using the changeset viewer.