diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-20 13:01:08 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-20 13:01:08 +0200 |
commit | 49233e234e5c787396cadb2cea33b31ae0cd65c1 (patch) | |
tree | 5410cb9a8fd53168bb60d62c54b654d86f03c38d /Source/WebKit2/UIProcess/gtk | |
parent | b211c645d8ab690f713515dfdc84d80b11c27d2c (diff) | |
download | qtwebkit-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')
-rw-r--r-- | Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp | 58 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h | 11 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp | 9 |
3 files changed, 51 insertions, 27 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) diff --git a/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h b/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h index b6a95778b..8e187166e 100644 --- a/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h +++ b/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h @@ -26,7 +26,10 @@ #ifndef WebContextMenuProxyGtk_h #define WebContextMenuProxyGtk_h +#if ENABLE(CONTEXT_MENUS) + #include "WebContextMenuProxy.h" +#include <WebCore/ContextMenu.h> #include <WebCore/IntPoint.h> namespace WebKit { @@ -45,19 +48,23 @@ public: virtual void showContextMenu(const WebCore::IntPoint&, const Vector<WebContextMenuItemData>&); virtual void hideContextMenu(); + void populate(Vector<WebCore::ContextMenuItem>&); + private: WebContextMenuProxyGtk(GtkWidget*, WebPageProxy*); - GtkMenu* createGtkMenu(const Vector<WebContextMenuItemData>&); + void append(WebCore::ContextMenuItem&); + void populate(const Vector<WebContextMenuItemData>&); static void menuPositionFunction(GtkMenu*, gint*, gint*, gboolean*, WebContextMenuProxyGtk*); GtkWidget* m_webView; WebPageProxy* m_page; - GtkMenu* m_popup; + WebCore::ContextMenu m_menu; WebCore::IntPoint m_popupPosition; }; } // namespace WebKit +#endif // ENABLE(CONTEXT_MENUS) #endif // WebContextMenuProxyGtk_h diff --git a/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp b/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp index dc8235210..ac26c0cb8 100644 --- a/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp +++ b/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp @@ -31,6 +31,8 @@ #include "NotImplemented.h" #include "PageClientImpl.h" #include "WebKitWebViewBasePrivate.h" +#include "WebPageMessages.h" +#include "WebProcessProxy.h" #include <gtk/gtkx.h> namespace WebKit { @@ -107,4 +109,11 @@ void WebPageProxy::windowedPluginGeometryDidChange(const WebCore::IntRect& frame webkitWebViewBaseChildMoveResize(WEBKIT_WEB_VIEW_BASE(viewWidget()), plugin, frameRect); } +#if USE(TEXTURE_MAPPER_GL) +void WebPageProxy::widgetMapped(uint64_t nativeWindowId) +{ + process()->send(Messages::WebPage::WidgetMapped(nativeWindowId), m_pageID); +} +#endif + } // namespace WebKit |