diff options
author | Kristian Monsen <kristianm@google.com> | 2010-07-30 10:46:49 +0100 |
---|---|---|
committer | Kristian Monsen <kristianm@google.com> | 2010-08-04 13:01:34 +0100 |
commit | 0617145a89917ae7735fe1c9538688ab9a577df5 (patch) | |
tree | 56206078694427c37ed7bdf27eb5221398b833c0 /WebKitTools/DumpRenderTree/gtk | |
parent | ef1adcdfc805d4d13103f6f15cc5b4d96828a60f (diff) | |
download | external_webkit-0617145a89917ae7735fe1c9538688ab9a577df5.zip external_webkit-0617145a89917ae7735fe1c9538688ab9a577df5.tar.gz external_webkit-0617145a89917ae7735fe1c9538688ab9a577df5.tar.bz2 |
Merge WebKit at r64264 : Initial merge by git.
Change-Id: Ic42bef02efef8217a0f84c47176a9c617c28d1f1
Diffstat (limited to 'WebKitTools/DumpRenderTree/gtk')
4 files changed, 69 insertions, 5 deletions
diff --git a/WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp b/WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp index fbdbd23..a09ad2a 100644 --- a/WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp +++ b/WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp @@ -499,6 +499,18 @@ JSStringRef AccessibilityUIElement::stringForRange(unsigned, unsigned) return JSStringCreateWithCharacters(0, 0); } +JSStringRef AccessibilityUIElement::attributedStringForRange(unsigned, unsigned) +{ + // FIXME: implement + return JSStringCreateWithCharacters(0, 0); +} + +bool AccessibilityUIElement::attributedStringRangeIsMisspelled(unsigned location, unsigned length) +{ + // FIXME: implement + return false; +} + AccessibilityUIElement AccessibilityUIElement::cellForColumnAndRow(unsigned column, unsigned row) { // FIXME: implement diff --git a/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp b/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp index 2812224..bd9c0c9 100644 --- a/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp +++ b/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp @@ -886,6 +886,10 @@ static WebKitWebView* createWebView() "signal::document-load-finished", webViewDocumentLoadFinished, 0, "signal::geolocation-policy-decision-requested", geolocationPolicyDecisionRequested, 0, "signal::onload-event", webViewOnloadEvent, 0, + "signal::drag-begin", dragBeginCallback, 0, + "signal::drag-end", dragEndCallback, 0, + "signal::drag-failed", dragFailedCallback, 0, + NULL); g_signal_connect(view, diff --git a/WebKitTools/DumpRenderTree/gtk/EventSender.cpp b/WebKitTools/DumpRenderTree/gtk/EventSender.cpp index 4936fe5..b95fec2 100644 --- a/WebKitTools/DumpRenderTree/gtk/EventSender.cpp +++ b/WebKitTools/DumpRenderTree/gtk/EventSender.cpp @@ -45,8 +45,6 @@ #include <gdk/gdkkeysyms.h> #include <string.h> -// FIXME: Implement support for synthesizing drop events. - extern "C" { extern void webkit_web_frame_layout(WebKitWebFrame* frame); } @@ -62,6 +60,7 @@ static int lastClickTimeOffset; static int lastClickButton; static int buttonCurrentlyDown; static int clickCount; +GdkDragContext* currentDragSourceContext; struct DelayedMessage { GdkEvent event; @@ -359,13 +358,36 @@ static void dispatchEvent(GdkEvent event) return; gtk_main_do_event(&event); + + if (!currentDragSourceContext) + return; + + if (event.type == GDK_MOTION_NOTIFY) { + // WebKit has called gtk_drag_start(), but because the main loop isn't + // running GDK internals don't know that the drag has started yet. Pump + // the main loop a little bit so that GDK is in the correct state. + while (gtk_events_pending()) + gtk_main_iteration(); + + // Simulate a drag motion on the top-level GDK window. + GtkWidget* parentWidget = gtk_widget_get_parent(GTK_WIDGET(view)); + GdkWindow* parentWidgetWindow = parentWidget->window; + gdk_drag_motion(currentDragSourceContext, parentWidgetWindow, GDK_DRAG_PROTO_XDND, + event.motion.x_root, event.motion.y_root, + currentDragSourceContext->action, currentDragSourceContext->actions, GDK_CURRENT_TIME); + + } else if (currentDragSourceContext && event.type == GDK_BUTTON_RELEASE) { + // We've released the mouse button, we should just be able to spin the + // event loop here and have GTK+ send the appropriate notifications for + // the end of the drag. + while (gtk_events_pending()) + gtk_main_iteration(); + } + } void replaySavedEvents() { - // FIXME: Eventually we may need to have more sophisticated logic to - // track drag-and-drop operations. - // First send all the events that are ready to be sent while (startOfQueue < endOfQueue) { if (msgQueue[startOfQueue].delay) { @@ -631,7 +653,26 @@ JSObjectRef makeEventSender(JSContextRef context, bool isTopFrame) endOfQueue = 0; startOfQueue = 0; + + currentDragSourceContext = 0; } return JSObjectMake(context, getClass(context), 0); } + +void dragBeginCallback(GtkWidget*, GdkDragContext* context, gpointer) +{ + currentDragSourceContext = context; +} + +void dragEndCallback(GtkWidget*, GdkDragContext* context, gpointer) +{ + currentDragSourceContext = 0; +} + +gboolean dragFailedCallback(GtkWidget*, GdkDragContext* context, gpointer) +{ + // Return TRUE here to disable the stupid GTK+ drag failed animation, + // which introduces asynchronous behavior into our drags. + return TRUE; +} diff --git a/WebKitTools/DumpRenderTree/gtk/EventSender.h b/WebKitTools/DumpRenderTree/gtk/EventSender.h index ce33ccc..e9b758d 100644 --- a/WebKitTools/DumpRenderTree/gtk/EventSender.h +++ b/WebKitTools/DumpRenderTree/gtk/EventSender.h @@ -32,8 +32,15 @@ typedef const struct OpaqueJSContext* JSContextRef; typedef struct OpaqueJSValue* JSObjectRef; +typedef struct _GtkWidget GtkWidget; +typedef struct _GdkDragContext GdkDragContext; +typedef void* gpointer; +typedef int gboolean; JSObjectRef makeEventSender(JSContextRef context, bool isTopFrame); void replaySavedEvents(); +void dragBeginCallback(GtkWidget*, GdkDragContext*, gpointer); +void dragEndCallback(GtkWidget*, GdkDragContext*, gpointer); +gboolean dragFailedCallback(GtkWidget*, GdkDragContext*, gpointer); #endif |