void EventSenderProxy::sendOrQueueEvent(const WTREvent& event) { if (m_eventQueue.isEmpty() || !m_eventQueue.last().delay) { dispatchEvent(event); return; } m_eventQueue.append(event); replaySavedEvents(); }
void EventSenderProxy::sendOrQueueEvent(GdkEvent* event) { if (m_eventQueue.isEmpty() || !m_eventQueue.last().delay) { dispatchEvent(event); return; } m_eventQueue.last().event = event; replaySavedEvents(); }
static JSValueRef mouseDownCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame); if (!view) return JSValueMakeUndefined(context); down = true; GdkEvent event; memset(&event, 0, sizeof(event)); event.type = GDK_BUTTON_PRESS; event.button.button = 1; if (argumentCount == 1) { event.button.button = (int)JSValueToNumber(context, arguments[0], exception) + 1; g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); } currentEventButton = event.button.button; event.button.x = lastMousePositionX; event.button.y = lastMousePositionY; event.button.window = GTK_WIDGET(view)->window; event.button.time = GDK_CURRENT_TIME; event.button.device = gdk_device_get_core_pointer(); int x_root, y_root; #if GTK_CHECK_VERSION(2,17,3) gdk_window_get_root_coords(GTK_WIDGET(view)->window, lastMousePositionX, lastMousePositionY, &x_root, &y_root); #else getRootCoords(GTK_WIDGET(view), &x_root, &y_root); #endif event.button.x_root = x_root; event.button.y_root = y_root; updateClickCount(event.button.button); if (!msgQueue[endOfQueue].delay) { webkit_web_frame_layout(mainFrame); gboolean return_val; g_signal_emit_by_name(view, "button_press_event", &event, &return_val); if (clickCount == 2) { event.type = GDK_2BUTTON_PRESS; g_signal_emit_by_name(view, "button_press_event", &event, &return_val); } } else { // replaySavedEvents should have the required logic to make leapForward delays work msgQueue[endOfQueue++].event = event; replaySavedEvents(); } return JSValueMakeUndefined(context); }
void EventSenderProxy::sendOrQueueEvent(QEvent* event) { if (!endOfQueue && !eventQueue[endOfQueue].m_delay) { m_testController->mainWebView()->sendEvent(event); delete event; return; } eventQueue[endOfQueue++].m_event = event; replaySavedEvents(); }
static JSValueRef mouseUpCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame); if (!view) return JSValueMakeUndefined(context); GdkEvent event; memset(&event, 0, sizeof(event)); event.type = GDK_BUTTON_RELEASE; event.button.button = 1; if (argumentCount == 1) { event.button.button = (int)JSValueToNumber(context, arguments[0], exception) + 1; g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); } currentEventButton = event.button.button; event.button.x = lastMousePositionX; event.button.y = lastMousePositionY; event.button.window = GTK_WIDGET(view)->window; event.button.time = GDK_CURRENT_TIME; event.button.device = gdk_device_get_core_pointer(); event.button.state = getStateFlags(); down = false; int x_root, y_root; #if GTK_CHECK_VERSION(2,17,3) gdk_window_get_root_coords(GTK_WIDGET(view)->window, lastMousePositionX, lastMousePositionY, &x_root, &y_root); #else getRootCoords(GTK_WIDGET(view), &x_root, &y_root); #endif event.button.x_root = x_root; event.button.y_root = y_root; if ((dragMode && !replayingSavedEvents) || msgQueue[endOfQueue].delay) { msgQueue[endOfQueue].event = event; msgQueue[endOfQueue++].isDragEvent = true; replaySavedEvents(); } else { webkit_web_frame_layout(mainFrame); gboolean return_val; g_signal_emit_by_name(view, "button_release_event", &event, &return_val); } lastClickPositionX = lastMousePositionX; lastClickPositionY = lastMousePositionY; return JSValueMakeUndefined(context); }
static void sendOrQueueEvent(GdkEvent event) { // Mouse move events are queued if the previous event was queued or if a // delay was set up by leapForward(). if (endOfQueue != startOfQueue || msgQueue[endOfQueue].delay) { msgQueue[endOfQueue++].event = event; replaySavedEvents(); return; } dispatchEvent(event); }
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)); if (dragMode && !replayingSavedEvents) { msgQueue[endOfQueue++] = msg; replaySavedEvents(); } else doMouseUp(msg); return JSValueMakeUndefined(context); }
static void sendOrQueueEvent(GdkEvent* event, bool shouldReplaySavedEvents) { // Mouse move events are queued if the previous event was queued or if a // delay was set up by leapForward(). if ((dragMode && buttonCurrentlyDown) || endOfQueue != startOfQueue || msgQueue[endOfQueue].delay) { msgQueue[endOfQueue++].event = event; if (shouldReplaySavedEvents) replaySavedEvents(); return; } dispatchEvent(event); }
void EventSender::sendOrQueueEvent(QEvent* event) { // Mouse move events are queued if // 1. A previous event was queued. // 2. A delay was set-up by leapForward(). // 3. A call to mouseMoveTo while the mouse button is pressed could initiate a drag operation, and that does not return until mouseUp is processed. // To be safe and avoid a deadlock, this event is queued. if (endOfQueue == startOfQueue && !eventQueue[endOfQueue].m_delay && (!(m_mouseButtonPressed && (m_eventLoop && event->type() == QEvent::MouseButtonRelease)))) { sendEvent(m_page->view(), event); delete event; return; } eventQueue[endOfQueue++].m_event = event; eventQueue[endOfQueue].m_delay = 0; replaySavedEvents(event->type() != QEvent::MouseMove); }
static JSValueRef mouseDownCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { COMPtr<IWebFramePrivate> framePrivate; if (SUCCEEDED(frame->QueryInterface(&framePrivate))) framePrivate->layout(); down = true; 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; } } WPARAM wparam = 0; if (argumentCount >= 2) wparam |= buildModifierFlags(context, arguments[1]); MSG msg = makeMsg(webViewWindow, mouseType, wparam, MAKELPARAM(lastMousePosition.x, lastMousePosition.y)); if (!msgQueue[endOfQueue].delay) dispatchMessage(&msg); else { // replaySavedEvents has the required logic to make leapForward delays work msgQueue[endOfQueue++].msg = msg; replaySavedEvents(); } return JSValueMakeUndefined(context); }
static JSValueRef mouseDownCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { COMPtr<IWebFramePrivate> framePrivate; if (SUCCEEDED(frame->QueryInterface(&framePrivate))) framePrivate->layout(); down = true; MSG msg = makeMsg(webViewWindow, WM_LBUTTONDOWN, 0, MAKELPARAM(lastMousePosition.x, lastMousePosition.y)); if (!msgQueue[endOfQueue].delay) dispatchMessage(&msg); else { // replaySavedEvents has the required logic to make leapForward delays work msgQueue[endOfQueue++].msg = msg; replaySavedEvents(); } return JSValueMakeUndefined(context); }
static JSValueRef mouseUpCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { 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; } } WPARAM wparam = 0; if (argumentCount >= 2) wparam |= buildModifierFlags(context, arguments[1]); MSG msg = makeMsg(webViewWindow, mouseType, wparam, MAKELPARAM(lastMousePosition.x, lastMousePosition.y)); if ((dragMode && !replayingSavedEvents) || msgQueue[endOfQueue].delay) { msgQueue[endOfQueue++].msg = msg; replaySavedEvents(); } else doMouseUp(msg); return JSValueMakeUndefined(context); }