#include "nativeeventfilter_p.h" #include #include namespace QWK { // Avoid adding multiple global native event filters to QGuiApplication // in this library. class MasterNativeEventFilter : public QAbstractNativeEventFilter { public: MasterNativeEventFilter() { qApp->installNativeEventFilter(this); } ~MasterNativeEventFilter() override { // The base class removes automatically } bool nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result) override { for (const auto &child : std::as_const(children)) { if (child->nativeEventFilter(eventType, message, result)) { return true; } } return false; } QVector children; static MasterNativeEventFilter *instance; }; MasterNativeEventFilter *MasterNativeEventFilter::instance = nullptr; NativeEventFilter::NativeEventFilter() { if (!MasterNativeEventFilter::instance) { MasterNativeEventFilter::instance = new MasterNativeEventFilter(); } MasterNativeEventFilter::instance->children.append(this); } NativeEventFilter::~NativeEventFilter() { MasterNativeEventFilter::instance->children.removeOne(this); if (MasterNativeEventFilter::instance->children.isEmpty()) { delete MasterNativeEventFilter::instance; MasterNativeEventFilter::instance = nullptr; } } }