diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-24 16:36:50 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-24 16:36:50 +0100 |
commit | ad0d549d4cc13433f77c1ac8f0ab379c83d93f28 (patch) | |
tree | b34b0daceb7c8e7fdde4b4ec43650ab7caadb0a9 /Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp | |
parent | 03e12282df9aa1e1fb05a8b90f1cfc2e08764cec (diff) | |
download | qtwebkit-ad0d549d4cc13433f77c1ac8f0ab379c83d93f28.tar.gz |
Imported WebKit commit bb52bf3c0119e8a128cd93afe5572413a8617de9 (http://svn.webkit.org/repository/webkit/trunk@108790)
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp index 20895eccb..00d3b3e20 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp @@ -21,15 +21,20 @@ #include "config.h" #include "WebViewTest.h" +#include <WebCore/GOwnPtrGtk.h> + WebViewTest::WebViewTest() : m_webView(WEBKIT_WEB_VIEW(g_object_ref_sink(webkit_web_view_new()))) , m_mainLoop(g_main_loop_new(0, TRUE)) + , m_parentWindow(0) { assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webView)); } WebViewTest::~WebViewTest() { + if (m_parentWindow) + gtk_widget_destroy(m_parentWindow); g_object_unref(m_webView); g_main_loop_unref(m_mainLoop); } @@ -130,3 +135,48 @@ void WebViewTest::waitUntilLoadFinished() g_signal_connect(m_webView, "load-changed", G_CALLBACK(loadChanged), this); g_main_loop_run(m_mainLoop); } + +static gboolean parentWindowMapped(GtkWidget* widget, GdkEvent*, WebViewTest* test) +{ + g_signal_handlers_disconnect_by_func(widget, reinterpret_cast<void*>(parentWindowMapped), test); + g_main_loop_quit(test->m_mainLoop); + + return FALSE; +} + +void WebViewTest::showInWindowAndWaitUntilMapped() +{ + g_assert(!m_parentWindow); + m_parentWindow = gtk_window_new(GTK_WINDOW_POPUP); + gtk_container_add(GTK_CONTAINER(m_parentWindow), GTK_WIDGET(m_webView)); + gtk_widget_show(GTK_WIDGET(m_webView)); + + g_signal_connect(m_parentWindow, "map-event", G_CALLBACK(parentWindowMapped), this); + gtk_widget_show(m_parentWindow); + g_main_loop_run(m_mainLoop); +} + +void WebViewTest::mouseMoveTo(int x, int y, unsigned int mouseModifiers) +{ + g_assert(m_parentWindow); + GtkWidget* viewWidget = GTK_WIDGET(m_webView); + g_assert(gtk_widget_get_realized(viewWidget)); + + GOwnPtr<GdkEvent> event(gdk_event_new(GDK_MOTION_NOTIFY)); + event->motion.x = x; + event->motion.y = y; + + event->motion.time = GDK_CURRENT_TIME; + event->motion.window = gtk_widget_get_window(viewWidget); + g_object_ref(event->motion.window); + event->button.device = gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gtk_widget_get_display(viewWidget))); + event->motion.state = mouseModifiers; + event->motion.axes = 0; + + int xRoot, yRoot; + gdk_window_get_root_coords(gtk_widget_get_window(viewWidget), x, y, &xRoot, &yRoot); + event->motion.x_root = xRoot; + event->motion.y_root = yRoot; + gtk_main_do_event(event.get()); +} + |