diff --git a/input.cpp b/input.cpp --- a/input.cpp +++ b/input.cpp @@ -411,6 +411,12 @@ } return static_cast(effects)->checkInputWindowEvent(event); } + bool wheelEvent(QWheelEvent *event) override { + if (!effects) { + return false; + } + return static_cast(effects)->checkInputWindowEvent(event); + } bool keyEvent(QKeyEvent *event) override { if (!effects || !static_cast< EffectsHandlerImpl* >(effects)->hasKeyboardGrab()) { return false; diff --git a/libkwineffects/kwineffectquickview.cpp b/libkwineffects/kwineffectquickview.cpp --- a/libkwineffects/kwineffectquickview.cpp +++ b/libkwineffects/kwineffectquickview.cpp @@ -231,6 +231,16 @@ e->setAccepted(cloneEvent.isAccepted()); return; } + case QEvent::Wheel: + { + QWheelEvent *we = static_cast(e); + const QPointF widgetPos = d->m_view->mapFromGlobal(we->pos()); + QWheelEvent cloneEvent(widgetPos, we->globalPosF(), we->pixelDelta(), we->angleDelta(), we->buttons(), + we->modifiers(), we->phase(), we->inverted()); + QCoreApplication::sendEvent(d->m_view, &cloneEvent); + e->setAccepted(cloneEvent.isAccepted()); + return; + } default: return; } diff --git a/plugins/platforms/x11/standalone/effects_mouse_interception_x11_filter.cpp b/plugins/platforms/x11/standalone/effects_mouse_interception_x11_filter.cpp --- a/plugins/platforms/x11/standalone/effects_mouse_interception_x11_filter.cpp +++ b/plugins/platforms/x11/standalone/effects_mouse_interception_x11_filter.cpp @@ -39,6 +39,21 @@ if (eventType == XCB_BUTTON_PRESS || eventType == XCB_BUTTON_RELEASE) { auto *me = reinterpret_cast(event); if (m_window == me->event) { + const bool isWheel = me->detail ==XCB_BUTTON_INDEX_4 || me->detail == XCB_BUTTON_INDEX_5; + if (isWheel) { + if (eventType != XCB_BUTTON_PRESS) { + return false; + } + int angleDelta = 0; + if (me->detail == XCB_BUTTON_INDEX_4) { + angleDelta = 120; + } else if (me->detail == XCB_BUTTON_INDEX_5) { + angleDelta = -120; + } + Qt::MouseButtons buttons = x11ToQtMouseButtons(me->state); + QWheelEvent ev(QPoint(me->event_x, me->event_y), angleDelta, buttons, x11ToQtKeyboardModifiers(me->state)); + return m_effects->checkInputWindowEvent(&ev); + } const Qt::MouseButton button = x11ToQtMouseButton(me->detail); Qt::MouseButtons buttons = x11ToQtMouseButtons(me->state); const QEvent::Type type = (eventType == XCB_BUTTON_PRESS) ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease;