From f96cd3187df78e121546df2a87432013d0b1a870 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Date: Fri, 21 Nov 2014 16:52:06 +0100 Subject: [PATCH] Improve diaglib. - Fix prototype for glinfo() for Qt 4 - Add more event types and object type flags to event filter. Change-Id: Ia4160b40486d054e860a339e7b5c9c28695330ae Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com> Reviewed-by: Andy Shaw <andy.shaw@digia.com> --- tests/manual/diaglib/eventfilter.cpp | 37 +++++++++++++++++++++++++++- tests/manual/diaglib/eventfilter.h | 24 +++++++++++++++--- tests/manual/diaglib/glinfo.cpp | 2 +- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/tests/manual/diaglib/eventfilter.cpp b/tests/manual/diaglib/eventfilter.cpp index f0573975f67..4968780e826 100644 --- a/tests/manual/diaglib/eventfilter.cpp +++ b/tests/manual/diaglib/eventfilter.cpp @@ -52,6 +52,8 @@ EventFilter::EventFilter(QObject *p) void EventFilter::init(EventCategories eventCategories) { + m_objectTypes = OtherType | QWidgetType | QWindowType; + if (eventCategories & MouseEvents) { m_eventTypes << QEvent::MouseButtonPress << QEvent::MouseButtonRelease << QEvent::MouseButtonDblClick << QEvent::NonClientAreaMouseButtonPress @@ -79,6 +81,13 @@ void EventFilter::init(EventCategories eventCategories) m_eventTypes << QEvent::KeyPress << QEvent::KeyRelease << QEvent::ShortcutOverride << QEvent::Shortcut; } + if (eventCategories & FocusEvents) { + m_eventTypes +#if QT_VERSION >= 0x050000 + << QEvent::FocusAboutToChange +#endif + << QEvent::FocusIn << QEvent::FocusOut; + } if (eventCategories & GeometryEvents) m_eventTypes << QEvent::Move << QEvent::Resize; if (eventCategories & PaintEvents) { @@ -88,18 +97,44 @@ void EventFilter::init(EventCategories eventCategories) m_eventTypes << QEvent::Expose; #endif } + if (eventCategories & StateChangeEvents) { + m_eventTypes + << QEvent::WindowStateChange + << QEvent::WindowBlocked << QEvent::WindowUnblocked +#if QT_VERSION >= 0x050000 + << QEvent::ApplicationStateChange +#endif + << QEvent::ApplicationActivate << QEvent::ApplicationDeactivate; + } if (eventCategories & TimerEvents) m_eventTypes << QEvent::Timer << QEvent::ZeroTimerEvent; if (eventCategories & ObjectEvents) { m_eventTypes << QEvent::ChildAdded << QEvent::ChildPolished << QEvent::ChildRemoved << QEvent::Create << QEvent::Destroy; } + if (eventCategories & InputMethodEvents) { + m_eventTypes << QEvent::InputMethod; +#if QT_VERSION >= 0x050000 + m_eventTypes << QEvent::InputMethodQuery; +#endif + } +} + +static inline bool matchesType(const QObject *o, EventFilter::ObjectTypes types) +{ + if (o->isWidgetType()) + return types & EventFilter::QWidgetType; +#if QT_VERSION >= 0x050000 + if (o->isWindowType()) + return types & EventFilter::QWindowType; +#endif + return types & EventFilter::OtherType; } bool EventFilter::eventFilter(QObject *o, QEvent *e) { static int n = 0; - if (m_eventTypes.contains(e->type())) { + if (matchesType(o, m_objectTypes) && m_eventTypes.contains(e->type())) { QDebug debug = qDebug().nospace(); const QString on = o->objectName(); debug << '#' << n++ << ' ' << o->metaObject()->className(); diff --git a/tests/manual/diaglib/eventfilter.h b/tests/manual/diaglib/eventfilter.h index d87ac68b076..8d94c1308a0 100644 --- a/tests/manual/diaglib/eventfilter.h +++ b/tests/manual/diaglib/eventfilter.h @@ -52,25 +52,41 @@ public: TabletEvents = 0x00008, DragAndDropEvents = 0x00010, KeyEvents = 0x00020, - GeometryEvents = 0x00040, - PaintEvents = 0x00080, - TimerEvents = 0x00100, - ObjectEvents = 0x00200 + FocusEvents = 0x00040, + GeometryEvents = 0x00080, + PaintEvents = 0x00100, + StateChangeEvents = 0x00200, + InputMethodEvents = 0x00400, + TimerEvents = 0x00800, + ObjectEvents = 0x01000, + AllEvents = 0xFFFFF }; Q_DECLARE_FLAGS(EventCategories, EventCategory) + enum ObjectType { + QWindowType = 0x1, + QWidgetType = 0x2, + OtherType = 0x4 + }; + Q_DECLARE_FLAGS(ObjectTypes, ObjectType) + explicit EventFilter(EventCategories eventCategories, QObject *p = 0); explicit EventFilter(QObject *p = 0); bool eventFilter(QObject *, QEvent *); + ObjectTypes objectTypes() const { return m_objectTypes; } + void setObjectTypes(ObjectTypes objectTypes) { m_objectTypes = objectTypes; } + private: void init(EventCategories eventCategories); QList<QEvent::Type> m_eventTypes; + ObjectTypes m_objectTypes; }; Q_DECLARE_OPERATORS_FOR_FLAGS(EventFilter::EventCategories) +Q_DECLARE_OPERATORS_FOR_FLAGS(EventFilter::ObjectTypes) } // namespace QtDiag diff --git a/tests/manual/diaglib/glinfo.cpp b/tests/manual/diaglib/glinfo.cpp index cd30e46b451..a7eff208dec 100644 --- a/tests/manual/diaglib/glinfo.cpp +++ b/tests/manual/diaglib/glinfo.cpp @@ -102,7 +102,7 @@ static QString getGlString(GLenum name) return QString(); } -QString glInfo(const QWidget *) +QString glInfo(const QObject *) { return getGlString(GL_VENDOR) + QLatin1Char('\n') + getGlString(GL_RENDERER); } -- GitLab