diff options
-rw-r--r-- | src/platformsupport/fbconvenience/qfbscreen.cpp | 10 | ||||
-rw-r--r-- | src/platformsupport/fbconvenience/qfbscreen_p.h | 10 | ||||
-rw-r--r-- | src/platformsupport/fbconvenience/qfbwindow.cpp | 11 | ||||
-rw-r--r-- | src/plugins/platforms/vnc/qvncscreen.cpp | 5 | ||||
-rw-r--r-- | src/plugins/platforms/vnc/qvncscreen.h | 2 |
5 files changed, 35 insertions, 3 deletions
diff --git a/src/platformsupport/fbconvenience/qfbscreen.cpp b/src/platformsupport/fbconvenience/qfbscreen.cpp index 216f2722a4..70c79318b3 100644 --- a/src/platformsupport/fbconvenience/qfbscreen.cpp +++ b/src/platformsupport/fbconvenience/qfbscreen.cpp @@ -154,6 +154,11 @@ QWindow *QFbScreen::topLevelAt(const QPoint & p) const return 0; } +int QFbScreen::windowCount() const +{ + return mWindowStack.count(); +} + void QFbScreen::setDirty(const QRect &rect) { QRect intersection = rect.intersected(mGeometry); @@ -313,5 +318,10 @@ QFbWindow *QFbScreen::windowForId(WId wid) const return 0; } +QFbScreen::Flags QFbScreen::flags() const +{ + return 0; +} + QT_END_NAMESPACE diff --git a/src/platformsupport/fbconvenience/qfbscreen_p.h b/src/platformsupport/fbconvenience/qfbscreen_p.h index e9b570aa1c..ffa2a46943 100644 --- a/src/platformsupport/fbconvenience/qfbscreen_p.h +++ b/src/platformsupport/fbconvenience/qfbscreen_p.h @@ -66,7 +66,13 @@ class QFbBackingStore; class QFbScreen : public QObject, public QPlatformScreen { Q_OBJECT + public: + enum Flag { + DontForceFirstWindowToFullScreen = 0x01 + }; + Q_DECLARE_FLAGS(Flags, Flag) + QFbScreen(); ~QFbScreen(); @@ -85,6 +91,8 @@ public: virtual void raise(QFbWindow *window); virtual void lower(QFbWindow *window); virtual void topWindowChanged(QWindow *) {} + virtual int windowCount() const; + virtual Flags flags() const; void addPendingBackingStore(QFbBackingStore *bs) { mPendingBackingStores << bs; } @@ -126,6 +134,8 @@ private: bool mIsUpToDate; }; +Q_DECLARE_OPERATORS_FOR_FLAGS(QFbScreen::Flags) + QT_END_NAMESPACE #endif // QFBSCREEN_P_H diff --git a/src/platformsupport/fbconvenience/qfbwindow.cpp b/src/platformsupport/fbconvenience/qfbwindow.cpp index 2d5570fe5d..a8bba1a472 100644 --- a/src/platformsupport/fbconvenience/qfbwindow.cpp +++ b/src/platformsupport/fbconvenience/qfbwindow.cpp @@ -74,8 +74,13 @@ void QFbWindow::setGeometry(const QRect &rect) void QFbWindow::setVisible(bool visible) { + QFbScreen *fbScreen = platformScreen(); if (visible) { - if (mWindowState & Qt::WindowFullScreen) + bool convOk = false; + static bool envDisableForceFullScreen = qEnvironmentVariableIntValue("QT_QPA_FB_FORCE_FULLSCREEN", &convOk) == 0 && convOk; + const bool platformDisableForceFullScreen = fbScreen->flags().testFlag(QFbScreen::DontForceFirstWindowToFullScreen); + const bool forceFullScreen = !envDisableForceFullScreen && !platformDisableForceFullScreen && fbScreen->windowCount() == 0; + if (forceFullScreen || (mWindowState & Qt::WindowFullScreen)) setGeometry(platformScreen()->geometry()); else if (mWindowState & Qt::WindowMaximized) setGeometry(platformScreen()->availableGeometry()); @@ -83,9 +88,9 @@ void QFbWindow::setVisible(bool visible) QPlatformWindow::setVisible(visible); if (visible) - platformScreen()->addWindow(this); + fbScreen->addWindow(this); else - platformScreen()->removeWindow(this); + fbScreen->removeWindow(this); } diff --git a/src/plugins/platforms/vnc/qvncscreen.cpp b/src/plugins/platforms/vnc/qvncscreen.cpp index 34def45767..ed24abd31c 100644 --- a/src/plugins/platforms/vnc/qvncscreen.cpp +++ b/src/plugins/platforms/vnc/qvncscreen.cpp @@ -183,5 +183,10 @@ bool QVNCScreen::swapBytes() const } #endif +QFbScreen::Flags QVncScreen::flags() const +{ + return QFbScreen::DontForceFirstWindowToFullScreen; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/vnc/qvncscreen.h b/src/plugins/platforms/vnc/qvncscreen.h index 785abd6dc2..24dab6179c 100644 --- a/src/plugins/platforms/vnc/qvncscreen.h +++ b/src/plugins/platforms/vnc/qvncscreen.h @@ -70,6 +70,8 @@ public: void disableClientCursor(QVncClient *client); QPlatformCursor *cursor() const Q_DECL_OVERRIDE; + Flags flags() const Q_DECL_OVERRIDE; + void clearDirty() { dirtyRegion = QRegion(); } #if Q_BYTE_ORDER == Q_BIG_ENDIAN |