summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAlex Trotsenko <alex1973tr@gmail.com>2015-12-05 23:55:17 +0200
committerAlex Trotsenko <alex1973tr@gmail.com>2016-01-05 13:05:35 +0000
commit02f70004c266f4c35f098f49cfb3ca0284e28cac (patch)
tree7aa683c0716aa64860e4d7f5d9c63bc5ae65b4b8 /tests
parente0a5f661e52fd09611f406ae82128b6ef81fe90e (diff)
Allow socket events processing with a foreign event loop on Windows
While a native dialog is open, the application message queue is handled by the native event loop which is external to Qt. In this case, QEventDispatcherWin32::processEvents() does not run and socket notifiers will not be activated. So, this patch moves the notifier activation code into the window procedure, which enables socket event processing with native dialogs. Task-number: QTBUG-49782 Task-number: QTBUG-48901 Change-Id: Icbdd96b2e80c50b73505f4fe74957575b83d6cf1 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/gui/kernel/kernel.pro2
-rw-r--r--tests/auto/gui/kernel/noqteventloop/noqteventloop.pro2
-rw-r--r--tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp34
3 files changed, 36 insertions, 2 deletions
diff --git a/tests/auto/gui/kernel/kernel.pro b/tests/auto/gui/kernel/kernel.pro
index b03a117f83..5254e755d4 100644
--- a/tests/auto/gui/kernel/kernel.pro
+++ b/tests/auto/gui/kernel/kernel.pro
@@ -24,7 +24,7 @@ SUBDIRS=\
qopenglwindow \
qrasterwindow
-win32:!wince*:!winrt: SUBDIRS += noqteventloop
+win32:!wince:!winrt:qtHaveModule(network): SUBDIRS += noqteventloop
!qtHaveModule(widgets): SUBDIRS -= \
qmouseevent_modal \
diff --git a/tests/auto/gui/kernel/noqteventloop/noqteventloop.pro b/tests/auto/gui/kernel/noqteventloop/noqteventloop.pro
index de5715e147..a42b359f29 100644
--- a/tests/auto/gui/kernel/noqteventloop/noqteventloop.pro
+++ b/tests/auto/gui/kernel/noqteventloop/noqteventloop.pro
@@ -1,7 +1,7 @@
CONFIG += testcase
TARGET = tst_noqteventloop
-QT += core-private gui-private testlib
+QT += core-private network gui-private testlib
SOURCES += tst_noqteventloop.cpp
diff --git a/tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp b/tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp
index d21569dcc0..735d23b137 100644
--- a/tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp
+++ b/tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp
@@ -36,6 +36,9 @@
#include <QEvent>
#include <QtCore/qthread.h>
#include <QtGui/qguiapplication.h>
+#include <QtNetwork/qtcpserver.h>
+#include <QtNetwork/qtcpsocket.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qt_windows.h>
@@ -47,6 +50,7 @@ private slots:
void initTestCase();
void cleanup();
void consumeMouseEvents();
+ void consumeSocketEvents();
};
@@ -265,6 +269,36 @@ void tst_NoQtEventLoop::consumeMouseEvents()
}
+void tst_NoQtEventLoop::consumeSocketEvents()
+{
+ int argc = 1;
+ char *argv[] = { const_cast<char *>("test"), 0 };
+ QGuiApplication app(argc, argv);
+ QTcpServer server;
+ QTcpSocket client;
+
+ QVERIFY(server.listen(QHostAddress::LocalHost));
+ client.connectToHost(server.serverAddress(), server.serverPort());
+ QVERIFY(client.waitForConnected());
+
+ QElapsedTimer elapsedTimer;
+ elapsedTimer.start();
+
+ // Exec own message loop
+ MSG msg;
+ forever {
+ if (elapsedTimer.hasExpired(3000) || server.hasPendingConnections())
+ break;
+
+ if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
+ ::TranslateMessage(&msg);
+ ::DispatchMessage(&msg);
+ }
+ }
+
+ QVERIFY(server.hasPendingConnections());
+}
+
#include <tst_noqteventloop.moc>
QTEST_APPLESS_MAIN(tst_NoQtEventLoop)