summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qabstracteventdispatcher.h9
-rw-r--r--src/corelib/kernel/qwineventnotifier.cpp12
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp5
-rw-r--r--tests/auto/corelib/thread/qthread/tst_qthread.cpp5
-rw-r--r--tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp5
-rw-r--r--tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp5
6 files changed, 36 insertions, 5 deletions
diff --git a/src/corelib/kernel/qabstracteventdispatcher.h b/src/corelib/kernel/qabstracteventdispatcher.h
index 96498d207d..e70530b283 100644
--- a/src/corelib/kernel/qabstracteventdispatcher.h
+++ b/src/corelib/kernel/qabstracteventdispatcher.h
@@ -53,6 +53,10 @@ QT_BEGIN_NAMESPACE
class QAbstractEventDispatcherPrivate;
class QSocketNotifier;
+#ifdef Q_OS_WIN
+class QWinEventNotifier;
+#endif
+
class Q_CORE_EXPORT QAbstractEventDispatcher : public QObject
{
Q_OBJECT
@@ -95,6 +99,11 @@ public:
virtual int remainingTime(int timerId) = 0;
+#ifdef Q_OS_WIN
+ virtual bool registerEventNotifier(QWinEventNotifier *notifier) = 0;
+ virtual void unregisterEventNotifier(QWinEventNotifier *notifier) = 0;
+#endif
+
virtual void wakeUp() = 0;
virtual void interrupt() = 0;
virtual void flush() = 0;
diff --git a/src/corelib/kernel/qwineventnotifier.cpp b/src/corelib/kernel/qwineventnotifier.cpp
index b48bd0c8cc..d81d1ec460 100644
--- a/src/corelib/kernel/qwineventnotifier.cpp
+++ b/src/corelib/kernel/qwineventnotifier.cpp
@@ -134,10 +134,12 @@ QWinEventNotifier::QWinEventNotifier(HANDLE hEvent, QObject *parent)
: QObject(*new QWinEventNotifierPrivate(hEvent, false), parent)
{
Q_D(QWinEventNotifier);
- QEventDispatcherWin32 *eventDispatcher = qobject_cast<QEventDispatcherWin32 *>(d->threadData->eventDispatcher);
- Q_ASSERT_X(eventDispatcher, "QWinEventNotifier::QWinEventNotifier()",
- "Cannot create a win event notifier without a QEventDispatcherWin32");
- eventDispatcher->registerEventNotifier(this);
+ QAbstractEventDispatcher *eventDispatcher = d->threadData->eventDispatcher;
+ if (!eventDispatcher) {
+ qWarning("QWinEventNotifier: Can only be used with threads started with QThread");
+ } else {
+ eventDispatcher->registerEventNotifier(this);
+ }
d->enabled = true;
}
@@ -205,7 +207,7 @@ void QWinEventNotifier::setEnabled(bool enable)
return;
d->enabled = enable;
- QEventDispatcherWin32 *eventDispatcher = qobject_cast<QEventDispatcherWin32 *>(d->threadData->eventDispatcher);
+ QAbstractEventDispatcher *eventDispatcher = d->threadData->eventDispatcher;
if (!eventDispatcher) // perhaps application is shutting down
return;
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
index e8f6c29a94..2ac075bebf 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
@@ -622,6 +622,11 @@ public:
void interrupt() {}
void flush() {}
+#ifdef Q_OS_WIN
+ bool registerEventNotifier(QWinEventNotifier *) { return false; }
+ void unregisterEventNotifier(QWinEventNotifier *) { }
+#endif
+
bool visited;
};
diff --git a/tests/auto/corelib/thread/qthread/tst_qthread.cpp b/tests/auto/corelib/thread/qthread/tst_qthread.cpp
index 41cfc52354..da49f43b7d 100644
--- a/tests/auto/corelib/thread/qthread/tst_qthread.cpp
+++ b/tests/auto/corelib/thread/qthread/tst_qthread.cpp
@@ -1239,6 +1239,11 @@ public:
void interrupt() {}
void flush() {}
+#ifdef Q_OS_WIN
+ bool registerEventNotifier(QWinEventNotifier *) { return false; }
+ void unregisterEventNotifier(QWinEventNotifier *) { }
+#endif
+
bool visited;
};
diff --git a/tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp b/tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp
index 82de653586..b077291cc6 100644
--- a/tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp
+++ b/tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp
@@ -64,6 +64,11 @@ public:
bool unregisterTimers(QObject*) { return false; }
int remainingTime(int) { return 0; }
void wakeUp() {}
+
+#ifdef Q_OS_WIN
+ bool registerEventNotifier(QWinEventNotifier *) { return false; }
+ void unregisterEventNotifier(QWinEventNotifier *) { }
+#endif
};
class tst_BenchlibEventCounter: public QObject
diff --git a/tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp b/tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp
index d3be93b715..7673aa396e 100644
--- a/tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp
+++ b/tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp
@@ -64,6 +64,11 @@ public:
bool unregisterTimers(QObject*) { return false; }
int remainingTime(int) { return 0; }
void wakeUp() {}
+
+#ifdef Q_OS_WIN
+ bool registerEventNotifier(QWinEventNotifier *) { return false; }
+ void unregisterEventNotifier(QWinEventNotifier *) { }
+#endif
};
class tst_BenchlibOptions: public QObject