void BrowserControl::handleKeyReleaseEvent(const XEvent& event) { if (m_urlBar->focused()) m_urlBar->handleKeyReleaseEvent(reinterpret_cast<const XKeyReleasedEvent&>(event)); else sendKeyboardEventToNix(event); }
void DesktopWindowLinux::handleXEvent(const XEvent& event) { if (event.type == ConfigureNotify) { updateSizeIfNeeded(event.xconfigure.width, event.xconfigure.height); return; } if (!m_client) return; switch (event.type) { case Expose: m_client->onWindowExpose(); break; case KeyPress: case KeyRelease: sendKeyboardEventToNix(event); break; case ButtonPress: { const XButtonPressedEvent* xEvent = reinterpret_cast<const XButtonReleasedEvent*>(&event); if (xEvent->button == 4 || xEvent->button == 5) { // Same constant we use inside WebView to calculate the ticks. See also WebCore::Scrollbar::pixelsPerLineStep(). const float pixelsPerStep = 40.0f; NIXWheelEvent ev; ev.type = kNIXInputEventTypeWheel; ev.modifiers = convertXEventModifiersToNativeModifiers(xEvent->state); ev.timestamp = convertXEventTimeToNixTimestamp(xEvent->time); ev.x = xEvent->x; ev.y = xEvent->y; ev.globalX = xEvent->x_root; ev.globalY = xEvent->y_root; ev.delta = pixelsPerStep * (xEvent->button == 4 ? 1 : -1); ev.orientation = xEvent->state & Mod1Mask ? kNIXWheelEventOrientationHorizontal : kNIXWheelEventOrientationVertical; m_client->onMouseWheel(&ev); break; } updateClickCount(xEvent); NIXMouseEvent ev; ev.type = kNIXInputEventTypeMouseDown; ev.button = convertXEventButtonToNativeMouseButton(xEvent->button); ev.x = xEvent->x; ev.y = xEvent->y; ev.globalX = xEvent->x_root; ev.globalY = xEvent->y_root; ev.clickCount = m_clickCount; ev.modifiers = convertXEventModifiersToNativeModifiers(xEvent->state); ev.timestamp = convertXEventTimeToNixTimestamp(xEvent->time); m_client->onMousePress(&ev); break; } case ButtonRelease: { const XButtonReleasedEvent* xEvent = reinterpret_cast<const XButtonReleasedEvent*>(&event); if (xEvent->button == 4 || xEvent->button == 5) break; NIXMouseEvent ev; ev.type = kNIXInputEventTypeMouseUp; ev.button = convertXEventButtonToNativeMouseButton(xEvent->button); ev.x = xEvent->x; ev.y = xEvent->y; ev.globalX = xEvent->x_root; ev.globalY = xEvent->y_root; ev.clickCount = 0; ev.modifiers = convertXEventModifiersToNativeModifiers(xEvent->state); ev.timestamp = convertXEventModifiersToNativeModifiers(xEvent->state); m_client->onMouseRelease(&ev); break; } case ClientMessage: if ((Atom)event.xclient.data.l[0] == wmDeleteMessageAtom) m_client->onWindowClose(); break; case MotionNotify: { NIXMouseEvent ev; const XPointerMovedEvent* xEvent = reinterpret_cast<const XPointerMovedEvent*>(&event); ev.type = kNIXInputEventTypeMouseMove; ev.button = kWKEventMouseButtonNoButton; ev.x = xEvent->x; ev.y = xEvent->y; ev.globalX = xEvent->x_root; ev.globalY = xEvent->y_root; ev.clickCount = 0; ev.modifiers = convertXEventModifiersToNativeModifiers(xEvent->state); ev.timestamp = convertXEventTimeToNixTimestamp(xEvent->time); m_client->onMouseMove(&ev); break; } } }
void BrowserControl::handleKeyPressEvent(const XEvent& event) { if (!m_urlBar->focused()) sendKeyboardEventToNix(event); }