#include "MouseEventSpy.h" #include #include MouseEventSpy::MouseEventSpy(QObject *parent) : QObject(parent) { } /** * @brief Create instance if necessary. * * If no instance has been created yet, create new instance and install it as event filter * in QGuiApplication. * * @see MouseEventSpy::instance() */ void MouseEventSpy::init() { instance(); } /** * @brief Implements the singleton pattern. * @return Instance * * If no instance has been created yet, create new instance and install it as event filter * in QGuiApplication. */ MouseEventSpy* MouseEventSpy::instance() { static MouseEventSpy* inst; if (inst == nullptr) { inst = new MouseEventSpy(); QGuiApplication* app = qGuiApp; app->installEventFilter(inst); } return inst; } /** * @brief Expand QObject::eventFilter to react to MouseEvents. * * Restart timer each time a mouse event is detected. */ bool MouseEventSpy::eventFilter(QObject* watched, QEvent* event) { QEvent::Type t = event->type(); if (isMouseEvent(t) && event->spontaneous() // Take only mouse events from outside of Qt ) { emit mouseEventDetected(); } return QObject::eventFilter(watched, event); } /** * @brief Checks whether the event type is a mouse event. * @param t Event type * @return Returns whether the event type is a mouse event. */ bool MouseEventSpy::isMouseEvent(QEvent::Type t) { return (t == QEvent::MouseButtonDblClick || t == QEvent::MouseButtonPress || t == QEvent::MouseButtonRelease || t == QEvent::MouseMove); }