View_qt: Deliver events to any subscribed event filters

Next we'll por some Qt event filters to View's event filter abstraction
This commit is contained in:
Sergio Martins
2022-07-02 13:43:38 +01:00
parent 8af8c603c1
commit ba71ad7407
2 changed files with 42 additions and 2 deletions

View File

@@ -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<View>, QMouseEvent *)
{
return false;
}
/// @brief OVerride to handle when a view receives a mouse press event
virtual bool onMouseButtonMove(std::shared_ptr<View>, QMouseEvent *)
{
return false;
}
};
}

View File

@@ -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 <QWidget>
@@ -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<QMouseEvent *>(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;
}