void MiniBrowser::handlePointerMoveEvent(const XPointerMovedEvent& event) { NIXMouseEvent nixEvent; nixEvent.type = kNIXInputEventTypeMouseMove; nixEvent.button = kWKEventMouseButtonNoButton; WKPoint contentsPoint = NIXViewUserViewportToContents(m_view, WKPointMake(event.x, event.y)); nixEvent.x = contentsPoint.x; nixEvent.y = contentsPoint.y; nixEvent.globalX = event.x_root; nixEvent.globalY = event.y_root; nixEvent.clickCount = 0; nixEvent.modifiers = convertXEventModifiersToNativeModifiers(event.state); nixEvent.timestamp = convertXEventTimeToNixTimestamp(event.time); if (m_touchMocker && m_touchMocker->handleMouseMove(nixEvent, WKPointMake(event.x, event.y))) { scheduleUpdateDisplay(); return; } // The mouse move event was allowed to be sent to the TouchMocker because it // may be tracking a button press that happened in a valid position. NIXView view = webViewAtX11Position(WKPointMake(event.x, event.y)); if (!view) return; NIXViewSendMouseEvent(view, &nixEvent); }
void MiniBrowser::handleButtonReleaseEvent(const XButtonReleasedEvent& event) { if (event.button == 4 || event.button == 5) return; NIXMouseEvent nixEvent = convertXButtonEventToNixButtonEvent(m_view, event, kNIXInputEventTypeMouseUp, 0); if (m_touchMocker && m_touchMocker->handleMouseRelease(nixEvent)) { scheduleUpdateDisplay(); return; } // The mouse release event was allowed to be sent to the TouchMocker because it // may be tracking a button press that happened in a valid position. NIXView view = webViewAtX11Position(WKPointMake(event.x, event.y)); if (!view) return; NIXViewSendMouseEvent(view, &nixEvent); }
void MiniBrowser::handleButtonPressEvent(const XButtonPressedEvent& event) { NIXView view = webViewAtX11Position(WKPointMake(event.x, event.y)); if (!view) return; if (event.button == 4 || event.button == 5) { handleWheelEvent(event); return; } updateClickCount(event); NIXMouseEvent nixEvent = convertXButtonEventToNixButtonEvent(view, event, kNIXInputEventTypeMouseDown, m_clickCount); if (m_touchMocker && m_touchMocker->handleMousePress(nixEvent, WKPointMake(event.x, event.y))) { scheduleUpdateDisplay(); return; } NIXViewSendMouseEvent(view, &nixEvent); }
TEST(WebKitNix, WebViewUpdateTextInputState) { memset(&stateReceived, 0, sizeof(stateReceived)); WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate()); WKRetainPtr<WKViewRef> view(AdoptWK, WKViewCreate(context.get(), 0)); NIXViewClient nixViewClient; memset(&nixViewClient, 0, sizeof(NIXViewClient)); nixViewClient.version = kNIXViewClientCurrentVersion; nixViewClient.updateTextInputState = updateTextInputState; NIXViewSetNixViewClient(view.get(), &nixViewClient); WKViewInitialize(view.get()); WKPageLoaderClient pageLoaderClient; memset(&pageLoaderClient, 0, sizeof(WKPageLoaderClient)); pageLoaderClient.version = kWKPageLoaderClientCurrentVersion; pageLoaderClient.didFinishLoadForFrame = didFinishLoadForFrame; WKPageSetPageLoaderClient(WKViewGetPage(view.get()), &pageLoaderClient); const WKSize size = WKSizeMake(100, 100); WKViewSetSize(view.get(), size); NIXMouseEvent nixEvent; memset(&nixEvent, 0, sizeof(NIXMouseEvent)); nixEvent.type = kNIXInputEventTypeMouseDown; nixEvent.button = kWKEventMouseButtonLeftButton; nixEvent.x = 55; nixEvent.y = 55; nixEvent.globalX = 55; nixEvent.globalY = 55; nixEvent.clickCount = 1; nixEvent.modifiers = static_cast<NIXInputEventModifiers>(0);; nixEvent.timestamp = 0; // Simple test on content editable. WKRetainPtr<WKURLRef> editableContentUrl = adoptWK(Util::createURLForResource("../nix/single-tap-on-editable-content", "html")); WKPageLoadURL(WKViewGetPage(view.get()), editableContentUrl.get()); Util::run(&didFinishLoad); NIXViewSendMouseEvent(view.get(), &nixEvent); nixEvent.type = kNIXInputEventTypeMouseUp; NIXViewSendMouseEvent(view.get(), &nixEvent); Util::run(&didUpdateTextInputState); ASSERT_TRUE(didFinishLoad); ASSERT_TRUE(didUpdateTextInputState); ASSERT_TRUE(stateReceived.isContentEditable); ASSERT_TRUE(WKStringIsEqualToUTF8CString(stateReceived.surroundingText, "foobar")); WKRelease(stateReceived.surroundingText); ASSERT_TRUE(WKStringIsEmpty(stateReceived.submitLabel)); WKRelease(stateReceived.submitLabel); ASSERT_FALSE(stateReceived.inputMethodHints & NIXImhSensitiveData); ASSERT_TRUE(!WKRectIsEqual(stateReceived.cursorRect, invalidRectState)); ASSERT_TRUE(!WKRectIsEqual(stateReceived.editorRect, invalidRectState)); ASSERT_TRUE(!WKRectIsEqual(stateReceived.cursorRect, stateReceived.editorRect)); // Test on a form field. didFinishLoad = false; memset(&stateReceived, 0, sizeof(stateReceived)); editableContentUrl = adoptWK(Util::createURLForResource("../nix/single-tap-on-form-field", "html")); WKPageLoadURL(WKViewGetPage(view.get()), editableContentUrl.get()); Util::run(&didFinishLoad); nixEvent.type = kNIXInputEventTypeMouseDown; NIXViewSendMouseEvent(view.get(), &nixEvent); nixEvent.type = kNIXInputEventTypeMouseUp; NIXViewSendMouseEvent(view.get(), &nixEvent); didUpdateTextInputState = false; Util::run(&didUpdateTextInputState); WKRelease(stateReceived.surroundingText); ASSERT_TRUE(didFinishLoad); ASSERT_TRUE(didUpdateTextInputState); ASSERT_TRUE(WKStringIsEqualToUTF8CString(stateReceived.submitLabel, "submitLabelValue")); WKRelease(stateReceived.submitLabel); ASSERT_TRUE(stateReceived.inputMethodHints & NIXImhSensitiveData); }
void Tab::sendMouseEvent<NIXMouseEvent*>(NIXMouseEvent* event) { NIXViewSendMouseEvent(m_view, event); }