diff --git a/tests/manual/diaglib/eventfilter.cpp b/tests/manual/diaglib/eventfilter.cpp
index f0573975f671d43159050ad625c27c12ce37b61c..4968780e826c8ddb9b4c6e8297155c7a440caa1e 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 d87ac68b076edc41c68a264caee121cdceee4d0e..8d94c1308a06d6c75925f37b2ead1adacd0f9b94 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 cd30e46b451a3de2bb72b1829825d5b3c97ece01..a7eff208dec7a17be762d2c32c20fef7581e76cf 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);
 }