bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event) { Q_ASSERT(obj == m_scrollBar); switch (event->type()) { case QEvent::MouseButtonPress: m_scrollBarPressed = true; m_smoothScrolling = true; break; case QEvent::MouseButtonRelease: m_scrollBarPressed = false; m_smoothScrolling = false; break; case QEvent::Wheel: handleWheelEvent(static_cast<QWheelEvent*>(event)); break; default: break; } return QObject::eventFilter(obj, event); }
// FIXME: Refactor this code to share functionality with EventHandler::handleGestureEvent. bool PopupContainer::handleGestureEvent(const PlatformGestureEvent& gestureEvent) { switch (gestureEvent.type()) { case PlatformEvent::GestureTap: { PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globalPosition(), NoButton, PlatformEvent::MouseMoved, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp()); PlatformMouseEvent fakeMouseDown(gestureEvent.position(), gestureEvent.globalPosition(), LeftButton, PlatformEvent::MousePressed, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp()); PlatformMouseEvent fakeMouseUp(gestureEvent.position(), gestureEvent.globalPosition(), LeftButton, PlatformEvent::MouseReleased, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp()); // handleMouseMoveEvent(fakeMouseMove); handleMouseDownEvent(fakeMouseDown); handleMouseReleaseEvent(fakeMouseUp); return true; } case PlatformEvent::GestureDoubleTap: break; case PlatformEvent::GestureScrollUpdate: case PlatformEvent::GestureScrollUpdateWithoutPropagation: { PlatformWheelEvent syntheticWheelEvent(gestureEvent.position(), gestureEvent.globalPosition(), gestureEvent.deltaX(), gestureEvent.deltaY(), gestureEvent.deltaX() / 120.0f, gestureEvent.deltaY() / 120.0f, ScrollByPixelWheelEvent, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey()); handleWheelEvent(syntheticWheelEvent); return true; } case PlatformEvent::GestureScrollBegin: case PlatformEvent::GestureScrollEnd: case PlatformEvent::GestureTapDown: break; default: ASSERT_NOT_REACHED(); } return false; }
// FIXME: Refactor this code to share functionality with EventHandler::handleGestureEvent. bool PopupContainer::handleGestureEvent(const PlatformGestureEvent& gestureEvent) { switch (gestureEvent.type()) { case PlatformGestureEvent::TapType: { PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globalPosition(), NoButton, MouseEventMoved, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp()); PlatformMouseEvent fakeMouseDown(gestureEvent.position(), gestureEvent.globalPosition(), LeftButton, MouseEventPressed, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp()); PlatformMouseEvent fakeMouseUp(gestureEvent.position(), gestureEvent.globalPosition(), LeftButton, MouseEventReleased, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp()); // handleMouseMoveEvent(fakeMouseMove); handleMouseDownEvent(fakeMouseDown); handleMouseReleaseEvent(fakeMouseUp); return true; } case PlatformGestureEvent::DoubleTapType: break; case PlatformGestureEvent::ScrollUpdateType: { PlatformWheelEvent syntheticWheelEvent(gestureEvent.position(), gestureEvent.globalPosition(), gestureEvent.deltaX(), gestureEvent.deltaY(), gestureEvent.deltaX() / 120.0f, gestureEvent.deltaY() / 120.0f, ScrollByPixelWheelEvent, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey()); handleWheelEvent(syntheticWheelEvent); return true; } case PlatformGestureEvent::ScrollBeginType: case PlatformGestureEvent::ScrollEndType: case PlatformGestureEvent::TapDownType: break; } return false; }
void QDirectFbInput::handleEvents() { DFBResult hasEvent = m_eventBuffer->HasEvent(m_eventBuffer.data()); while(hasEvent == DFB_OK){ DFBEvent event; DFBResult ok = m_eventBuffer->GetEvent(m_eventBuffer.data(), &event); if (ok != DFB_OK) DirectFBError("Failed to get event",ok); if (event.clazz == DFEC_WINDOW) { switch (event.window.type) { case DWET_BUTTONDOWN: case DWET_BUTTONUP: case DWET_MOTION: handleMouseEvents(event); break; case DWET_WHEEL: handleWheelEvent(event); break; case DWET_KEYDOWN: case DWET_KEYUP: handleKeyEvents(event); break; case DWET_ENTER: case DWET_LEAVE: handleEnterLeaveEvents(event); default: break; } } hasEvent = m_eventBuffer->HasEvent(m_eventBuffer.data()); } }
void VMdEditor::wheelEvent(QWheelEvent *p_event) { if (handleWheelEvent(p_event)) { return; } VTextEdit::wheelEvent(p_event); }
ScrollingTree::EventResult RemoteScrollingTree::tryToHandleWheelEvent(const PlatformWheelEvent& wheelEvent) { if (shouldHandleWheelEventSynchronously(wheelEvent)) return SendToMainThread; if (willWheelEventStartSwipeGesture(wheelEvent)) return DidNotHandleEvent; handleWheelEvent(wheelEvent); return DidHandleEvent; }
bool VolumePopup::eventFilter(QObject * watched, QEvent * event) { if (watched == m_volumeSlider) { if (event->type() == QEvent::Wheel) { handleWheelEvent(dynamic_cast<QWheelEvent *>(event)); return true; } return false; } return QDialog::eventFilter(watched, event); }
void WebPluginContainerImpl::handleEvent(Event* event) { if (!m_webPlugin->acceptsInputEvents()) return; // The events we pass are defined at: // http://devedge-temp.mozilla.org/library/manuals/2002/plugin/1.0/structures5.html#1000000 // Don't take the documentation as truth, however. There are many cases // where mozilla behaves differently than the spec. if (event->isMouseEvent()) handleMouseEvent(static_cast<MouseEvent*>(event)); else if (event->isWheelEvent()) handleWheelEvent(static_cast<WheelEvent*>(event)); else if (event->isKeyboardEvent()) handleKeyboardEvent(static_cast<KeyboardEvent*>(event)); }
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); }
bool QWidgetWindow::event(QEvent *event) { if (m_widget->testAttribute(Qt::WA_DontShowOnScreen)) { // \a event is uninteresting for QWidgetWindow, the event was probably // generated before WA_DontShowOnScreen was set return m_widget->event(event); } switch (event->type()) { case QEvent::Close: handleCloseEvent(static_cast<QCloseEvent *>(event)); return true; case QEvent::Enter: case QEvent::Leave: handleEnterLeaveEvent(event); return true; // these should not be sent to QWidget, the corresponding events // are sent by QApplicationPrivate::notifyActiveWindowChange() case QEvent::FocusIn: handleFocusInEvent(static_cast<QFocusEvent *>(event)); // Fallthrough case QEvent::FocusOut: { #ifndef QT_NO_ACCESSIBILITY QAccessible::State state; state.active = true; QAccessibleStateChangeEvent ev(widget(), state); QAccessible::updateAccessibility(&ev); #endif return false; } case QEvent::FocusAboutToChange: if (QApplicationPrivate::focus_widget) { if (QApplicationPrivate::focus_widget->testAttribute(Qt::WA_InputMethodEnabled)) qApp->inputMethod()->commit(); QGuiApplication::sendSpontaneousEvent(QApplicationPrivate::focus_widget, event); } return true; case QEvent::KeyPress: case QEvent::KeyRelease: case QEvent::ShortcutOverride: handleKeyEvent(static_cast<QKeyEvent *>(event)); return true; case QEvent::MouseMove: case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseButtonDblClick: handleMouseEvent(static_cast<QMouseEvent *>(event)); return true; case QEvent::NonClientAreaMouseMove: case QEvent::NonClientAreaMouseButtonPress: case QEvent::NonClientAreaMouseButtonRelease: case QEvent::NonClientAreaMouseButtonDblClick: handleNonClientAreaMouseEvent(static_cast<QMouseEvent *>(event)); return true; case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: case QEvent::TouchCancel: handleTouchEvent(static_cast<QTouchEvent *>(event)); return true; case QEvent::Move: handleMoveEvent(static_cast<QMoveEvent *>(event)); return true; case QEvent::Resize: handleResizeEvent(static_cast<QResizeEvent *>(event)); return true; #ifndef QT_NO_WHEELEVENT case QEvent::Wheel: handleWheelEvent(static_cast<QWheelEvent *>(event)); return true; #endif #ifndef QT_NO_DRAGANDDROP case QEvent::DragEnter: case QEvent::DragMove: handleDragEnterMoveEvent(static_cast<QDragMoveEvent *>(event)); return true; case QEvent::DragLeave: handleDragLeaveEvent(static_cast<QDragLeaveEvent *>(event)); return true; case QEvent::Drop: handleDropEvent(static_cast<QDropEvent *>(event)); return true; #endif case QEvent::Expose: handleExposeEvent(static_cast<QExposeEvent *>(event)); return true; case QEvent::WindowStateChange: handleWindowStateChangedEvent(static_cast<QWindowStateChangeEvent *>(event)); return true; case QEvent::ThemeChange: { QEvent widgetEvent(QEvent::ThemeChange); QGuiApplication::sendSpontaneousEvent(m_widget, &widgetEvent); } return true; #ifndef QT_NO_TABLETEVENT case QEvent::TabletPress: case QEvent::TabletMove: case QEvent::TabletRelease: handleTabletEvent(static_cast<QTabletEvent *>(event)); return true; #endif #ifndef QT_NO_GESTURES case QEvent::NativeGesture: handleGestureEvent(static_cast<QNativeGestureEvent *>(event)); return true; #endif #ifndef QT_NO_CONTEXTMENU case QEvent::ContextMenu: handleContextMenuEvent(static_cast<QContextMenuEvent *>(event)); return true; #endif // Handing show events to widgets (see below) here would cause them to be triggered twice case QEvent::Show: case QEvent::Hide: return QWindow::event(event); case QEvent::WindowBlocked: qt_button_down = 0; break; default: break; } return m_widget->event(event) || QWindow::event(event); }
void QEvdevMouseHandler::readMouseData() { struct ::input_event buffer[32]; int n = 0; bool posChanged = false, btnChanged = false; bool pendingMouseEvent = false; int eventCompressCount = 0; forever { int result = QT_READ(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n); if (result == 0) { qWarning("Got EOF from the input device."); return; } else if (result < 0) { if (errno != EINTR && errno != EAGAIN) { qWarning("Could not read from input device: %s", strerror(errno)); return; } } else { n += result; if (n % sizeof(buffer[0]) == 0) break; } } n /= sizeof(buffer[0]); for (int i = 0; i < n; ++i) { struct ::input_event *data = &buffer[i]; //qDebug() << ">>" << hex << data->type << data->code << dec << data->value; if (data->type == EV_ABS) { // Touchpads: store the absolute position for now, will calculate a relative one later. if (data->code == ABS_X && m_x != data->value) { m_x = data->value; posChanged = true; } else if (data->code == ABS_Y && m_y != data->value) { m_y = data->value; posChanged = true; } } else if (data->type == EV_REL) { if (data->code == REL_X) { m_x += data->value; posChanged = true; } else if (data->code == REL_Y) { m_y += data->value; posChanged = true; } else if (data->code == ABS_WHEEL) { // vertical scroll // data->value: 1 == up, -1 == down const int delta = 120 * data->value; emit handleWheelEvent(delta, Qt::Vertical); } else if (data->code == ABS_THROTTLE) { // horizontal scroll // data->value: 1 == right, -1 == left const int delta = 120 * -data->value; emit handleWheelEvent(delta, Qt::Horizontal); } } else if (data->type == EV_KEY && data->code == BTN_TOUCH) { // We care about touchpads only, not touchscreens -> don't map to button press. // Need to invalidate prevx/y however to get proper relative pos. m_prevInvalid = true; } else if (data->type == EV_KEY && data->code >= BTN_LEFT && data->code <= BTN_JOYSTICK) { Qt::MouseButton button = Qt::NoButton; // BTN_LEFT == 0x110 in kernel's input.h // The range of possible mouse buttons ends just before BTN_JOYSTICK, value 0x120. switch (data->code) { case 0x110: button = Qt::LeftButton; break; // BTN_LEFT case 0x111: button = Qt::RightButton; break; case 0x112: button = Qt::MiddleButton; break; case 0x113: button = Qt::ExtraButton1; break; // AKA Qt::BackButton case 0x114: button = Qt::ExtraButton2; break; // AKA Qt::ForwardButton case 0x115: button = Qt::ExtraButton3; break; // AKA Qt::TaskButton case 0x116: button = Qt::ExtraButton4; break; case 0x117: button = Qt::ExtraButton5; break; case 0x118: button = Qt::ExtraButton6; break; case 0x119: button = Qt::ExtraButton7; break; case 0x11a: button = Qt::ExtraButton8; break; case 0x11b: button = Qt::ExtraButton9; break; case 0x11c: button = Qt::ExtraButton10; break; case 0x11d: button = Qt::ExtraButton11; break; case 0x11e: button = Qt::ExtraButton12; break; case 0x11f: button = Qt::ExtraButton13; break; } if (data->value) m_buttons |= button; else m_buttons &= ~button; btnChanged = true; } else if (data->type == EV_SYN && data->code == SYN_REPORT) { if (btnChanged) { btnChanged = posChanged = false; sendMouseEvent(); pendingMouseEvent = false; } else if (posChanged) { posChanged = false; if (m_compression) { pendingMouseEvent = true; eventCompressCount++; } else { sendMouseEvent(); } } } else if (data->type == EV_MSC && data->code == MSC_SCAN) { // kernel encountered an unmapped key - just ignore it continue; } } if (m_compression && pendingMouseEvent) { int distanceSquared = (m_x - m_prevx)*(m_x - m_prevx) + (m_y - m_prevy)*(m_y - m_prevy); if (distanceSquared > m_jitterLimitSquared) sendMouseEvent(); } }
void QWindowSystemInterface::handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); handleWheelEvent(w, time, local, global, d, o); }
/// /// event filter method /// bool QtEventConsumer::eventFilter ( QObject *obj, QEvent *event ) { /// /// process control /// //if process is stoped... if (f_recording_ == false) { //no event handling DEBUG(D_CONSUMER,"(QtEventConsumer::eventFilter) Stop state. No event handled."); return false; } //if process is paused... else if (f_recording_ && f_paused_) { //filter all events and //block the application DEBUG(D_CONSUMER,"(QtEventConsumer::eventFilter) Pause state. Events blocked."); return true; } //no widget or event provided else if (obj == NULL || event == NULL) { DEBUG(D_CONSUMER,"(QtEventConsumer::eventFilter) No widget or event provided."); return false; } //object is not a widget or window /*else if (!obj->isWidgetType()) { DEBUG(D_CONSUMER,"(QtEventConsumer::eventFilter) Object is not a widget."); return false; }*/ //if process is recording... else { //apply the filter... } //DEBUG(D_CONSUMER,"(QtEventConsumer::eventFilter) Type = " // + QString::number(event->type()).toStdString()); /// ///filter depending on the type.. /// //window events if (event->type() == QEvent::KeyPress) { handleKeyPressEvent(obj, event); } //mouse events else if (event->type() == QEvent::MouseButtonPress) { handleMousePressEvent(obj, event); } else if (event->type() == QEvent::MouseButtonRelease) { handleMouseReleaseEvent(obj, event); } else if (event->type() == QEvent::MouseButtonDblClick) { handleMouseDoubleEvent(obj, event); } else if (event->type() == QEvent::Wheel) { handleWheelEvent(obj, event); } //keyboard events else if (event->type() == QEvent::Close) { handleCloseEvent(obj, event); } ///the event should continue to reach its goal... return false; }