diff --git a/src/EventFilterInterface.h b/src/EventFilterInterface.h index 8d3d1e76..b93cf41f 100644 --- a/src/EventFilterInterface.h +++ b/src/EventFilterInterface.h @@ -36,6 +36,18 @@ public: { return false; } + + /// @brief OVerride to handle when a view receives a mouse press event + virtual bool onMouseButtonRelease(std::shared_ptr, QMouseEvent *) + { + return false; + } + + /// @brief OVerride to handle when a view receives a mouse press event + virtual bool onMouseButtonMove(std::shared_ptr, QMouseEvent *) + { + return false; + } }; } diff --git a/src/qtcommon/View_qt.cpp b/src/qtcommon/View_qt.cpp index 3dca6e33..03322461 100644 --- a/src/qtcommon/View_qt.cpp +++ b/src/qtcommon/View_qt.cpp @@ -1,6 +1,7 @@ #include "View_qt.h" #include "private/View_p.h" #include "kddockwidgets/Controller.h" +#include "EventFilterInterface.h" #ifdef KDDW_FRONTEND_QTWIDGETS #include @@ -23,11 +24,38 @@ public: ~EventFilter() override; - bool eventFilter(QObject *, QEvent *ev) override + bool eventFilter(QObject *, QEvent *e) override { - if (ev->type() == QEvent::ParentChange) + if (e->type() == QEvent::ParentChange) q->d->parentChanged.emit(); + if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonRelease || e->type() == QEvent::MouseMove) + return handleMouseEvent(static_cast(e)); + + return false; + } + + bool handleMouseEvent(QMouseEvent *ev) + { + for (EventFilterInterface *filter : qAsConst(q->d->m_viewEventFilters)) { + switch (ev->type()) { + case QEvent::MouseButtonPress: + if (filter->onMouseButtonPress(q->asWrapper(), ev)) + return true; + break; + case QEvent::MouseButtonRelease: + if (filter->onMouseButtonRelease(q->asWrapper(), ev)) + return true; + break; + case QEvent::MouseMove: + if (filter->onMouseButtonMove(q->asWrapper(), ev)) + return true; + break; + default: + break; + } + } + return false; }