QNX: Fix QWindow autotest

On QNX a actual platform window is not created unless the window is explicitly
postet (raster) or a swapBuffers (opengl) is executed.

Change-Id: Ia06b97ea1a477d59e78d74d895c5d6ba6dd86edf
Reviewed-by: Sergio Ahumada <sahumada@blackberry.com>
This commit is contained in:
Fabian Bumberger 2014-03-18 17:18:04 +01:00 committed by The Qt Project
parent 3f4277c264
commit 7ca958eb61

View File

@ -49,6 +49,10 @@
#include <QEvent>
#include <QStyleHints>
#if defined(Q_OS_QNX)
#include <QOpenGLContext>
#endif
// For QSignalSpy slot connections.
Q_DECLARE_METATYPE(Qt::ScreenOrientation)
Q_DECLARE_METATYPE(QWindow::Visibility)
@ -122,6 +126,9 @@ public:
{
reset();
setFlags(flags);
#if defined(Q_OS_QNX)
setSurfaceType(QSurface::OpenGLSurface);
#endif
}
void reset()
@ -187,7 +194,12 @@ void tst_QWindow::resizeEventAfterResize()
// Make sure we get a resizeEvent after calling resize
window.resize(400, 100);
#if defined(Q_OS_BLACKBERRY) // "window" is the "root" window and will always be shown fullscreen
// so we only expect one resize event
QTRY_COMPARE(window.received(QEvent::Resize), 1);
#else
QTRY_COMPARE(window.received(QEvent::Resize), 2);
#endif
}
void tst_QWindow::positioning_data()
@ -244,13 +256,24 @@ void tst_QWindow::positioning()
window.setWindowState(Qt::WindowFullScreen);
QCoreApplication::processEvents();
#if defined(Q_OS_BLACKBERRY) // "window" is the "root" window and will always be shown fullscreen
// so we only expect one resize event
Q_UNUSED(resizecount);
QTRY_COMPARE(window.received(QEvent::Resize), 1);
#else
QTRY_COMPARE(window.received(QEvent::Resize), 2);
#endif
QTest::qWait(2000);
window.setWindowState(Qt::WindowNoState);
QCoreApplication::processEvents();
#if defined(Q_OS_BLACKBERRY) // "window" is the "root" window and will always be shown fullscreen
// so we only expect one resize event
QTRY_COMPARE(window.received(QEvent::Resize), 1);
#else
QTRY_COMPARE(window.received(QEvent::Resize), resizecount);
#endif
QTRY_COMPARE(originalPos, window.position());
QTRY_COMPARE(originalFramePos, window.framePosition());
@ -309,6 +332,13 @@ void tst_QWindow::isActive()
QCoreApplication::processEvents();
QTRY_VERIFY(window.isExposed());
#if defined(Q_OS_QNX) // We either need to create a eglSurface or a create a backing store
// and then post the window in order for screen to show the window
QOpenGLContext context;
context.create();
context.makeCurrent(&window);
context.swapBuffers(&window);
#endif
QTRY_COMPARE(window.received(QEvent::Resize), 1);
QTRY_VERIFY(QGuiApplication::focusWindow() == &window);
QVERIFY(window.isActive());
@ -511,7 +541,7 @@ void tst_QWindow::testInputEvents()
// Now with null pointer as window. local param should not be utilized:
// handleMouseEvent() with tlw == 0 means the event is in global coords only.
window.mousePressButton = window.mouseReleaseButton = 0;
QPointF nonWindowGlobal(500, 500); // not inside the window
QPointF nonWindowGlobal(2000, 500); // not inside the window
QWindowSystemInterface::handleMouseEvent(0, nonWindowGlobal, nonWindowGlobal, Qt::LeftButton);
QWindowSystemInterface::handleMouseEvent(0, nonWindowGlobal, nonWindowGlobal, Qt::NoButton);
QCoreApplication::processEvents();
@ -913,10 +943,21 @@ void tst_QWindow::activateAndClose()
{
for (int i = 0; i < 10; ++i) {
QWindow window;
#if defined(Q_OS_QNX)
window.setSurfaceType(QSurface::OpenGLSurface);
#endif
// qWaitForWindowActive will block for the duration of
// of the timeout if the window is at 0,0
window.setGeometry(QGuiApplication::primaryScreen()->availableGeometry().adjusted(1, 1, -1, -1));
window.showNormal();
#if defined(Q_OS_QNX) // We either need to create a eglSurface or a create a backing store
// and then post the window in order for screen to show the window
QTest::qWaitForWindowExposed(&window);
QOpenGLContext context;
context.create();
context.makeCurrent(&window);
context.swapBuffers(&window);
#endif
window.requestActivate();
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(qGuiApp->focusWindow(), &window);
@ -1252,15 +1293,26 @@ void tst_QWindow::initialSize()
Window w;
w.setWidth(200);
w.show();
#if defined(Q_OS_BLACKBERRY) // "window" is the "root" window and will always be shown fullscreen
// so we only expect one resize event
QTRY_COMPARE(w.width(), qGuiApp->primaryScreen()->availableGeometry().width());
#else
QTRY_COMPARE(w.width(), 200);
#endif
QTRY_VERIFY(w.height() > 0);
}
{
Window w;
w.resize(200, 42);
w.show();
#if defined(Q_OS_BLACKBERRY) // "window" is the "root" window and will always be shown fullscreen
// so we only expect one resize event
QTRY_COMPARE(w.width(), qGuiApp->primaryScreen()->availableGeometry().width());
QTRY_COMPARE(w.height(), qGuiApp->primaryScreen()->availableGeometry().height());
#else
QTRY_COMPARE(w.width(), 200);
QTRY_COMPARE(w.height(), 42);
#endif
}
}