diff options
Diffstat (limited to 'WebKitTools/DumpRenderTree/win/EventSender.cpp')
-rw-r--r-- | WebKitTools/DumpRenderTree/win/EventSender.cpp | 63 |
1 files changed, 59 insertions, 4 deletions
diff --git a/WebKitTools/DumpRenderTree/win/EventSender.cpp b/WebKitTools/DumpRenderTree/win/EventSender.cpp index ca897fb..721b238 100644 --- a/WebKitTools/DumpRenderTree/win/EventSender.cpp +++ b/WebKitTools/DumpRenderTree/win/EventSender.cpp @@ -151,7 +151,30 @@ static JSValueRef mouseDownCallback(JSContextRef context, JSObjectRef function, framePrivate->layout(); down = true; - MSG msg = makeMsg(webViewWindow, WM_LBUTTONDOWN, 0, MAKELPARAM(lastMousePosition.x, lastMousePosition.y)); + int mouseType = WM_LBUTTONDOWN; + if (argumentCount == 1) { + int mouseNumber = JSValueToNumber(context, arguments[0], exception); + switch (mouseNumber) { + case 0: + mouseType = WM_LBUTTONDOWN; + break; + case 1: + mouseType = WM_MBUTTONDOWN; + break; + case 2: + mouseType = WM_RBUTTONDOWN; + break; + case 3: + // fast/events/mouse-click-events expects the 4th button has event.button = 1, so send an WM_BUTTONDOWN + mouseType = WM_MBUTTONDOWN; + break; + default: + mouseType = WM_LBUTTONDOWN; + break; + } + } + + MSG msg = makeMsg(webViewWindow, mouseType, 0, MAKELPARAM(lastMousePosition.x, lastMousePosition.y)); if (!msgQueue[endOfQueue].delay) dispatchMessage(&msg); else { @@ -196,18 +219,42 @@ static void doMouseUp(MSG msg) if (hr == DRAGDROP_S_DROP && effect != DROPEFFECT_NONE) { DWORD effect = 0; webViewDropTarget->Drop(draggingInfo->dataObject(), 0, pointl(screenPoint), &effect); + draggingInfo->setPerformedDropEffect(effect); } else webViewDropTarget->DragLeave(); - delete draggingInfo; - draggingInfo = 0; + // Reset didDragEnter so that another drag started within the same frame works properly. + didDragEnter = false; } } } static JSValueRef mouseUpCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { - MSG msg = makeMsg(webViewWindow, WM_LBUTTONUP, 0, MAKELPARAM(lastMousePosition.x, lastMousePosition.y)); + int mouseType = WM_LBUTTONUP; + if (argumentCount == 1) { + int mouseNumber = JSValueToNumber(context, arguments[0], exception); + switch (mouseNumber) { + case 0: + mouseType = WM_LBUTTONUP; + break; + case 1: + mouseType = WM_MBUTTONUP; + break; + case 2: + mouseType = WM_RBUTTONUP; + break; + case 3: + // fast/events/mouse-click-events expects the 4th button has event.button = 1, so send an WM_MBUTTONUP + mouseType = WM_MBUTTONUP; + break; + default: + mouseType = WM_LBUTTONUP; + break; + } + } + + MSG msg = makeMsg(webViewWindow, mouseType, 0, MAKELPARAM(lastMousePosition.x, lastMousePosition.y)); if ((dragMode && !replayingSavedEvents) || msgQueue[endOfQueue].delay) { msgQueue[endOfQueue++].msg = msg; @@ -277,12 +324,16 @@ void replaySavedEvents() msg = msgQueue[startOfQueue++].msg; switch (msg.message) { case WM_LBUTTONUP: + case WM_RBUTTONUP: + case WM_MBUTTONUP: doMouseUp(msg); break; case WM_MOUSEMOVE: doMouseMove(msg); break; case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + case WM_MBUTTONDOWN: dispatchMessage(&msg); break; default: @@ -317,12 +368,16 @@ void replaySavedEvents() msg = msgQueue[startOfQueue++].msg; switch (msg.message) { case WM_LBUTTONUP: + case WM_RBUTTONUP: + case WM_MBUTTONUP: doMouseUp(msg); break; case WM_MOUSEMOVE: doMouseMove(msg); break; case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + case WM_MBUTTONDOWN: dispatchMessage(&msg); break; default: |