From aa7fa093126f4ce9204b0d8efa7f9e8762847905 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 22 Oct 2013 14:06:29 +0200 Subject: [PATCH] Android/LinuxFb: fix QWidget::showFullScreen() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, showFullScreen() had a race condition: it depended on QFbScreen::setGeometry() being called after the window state was set (that would trigger QPlatformScreen::resizeMaximizedWindows(), which was the only part of the code that reacted to WindowFullScreen). On Android this caused random behaviour. Task-number: QTBUG-33294 Change-Id: I228e6af4139af1a47387e7d80757d7b46e859580 Reviewed-by: Jørgen Lind Reviewed-by: Laszlo Agocs --- .../fbconvenience/qfbwindow.cpp | 20 +++++++++++++++++++ .../fbconvenience/qfbwindow_p.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/src/platformsupport/fbconvenience/qfbwindow.cpp b/src/platformsupport/fbconvenience/qfbwindow.cpp index 246f50b4a9..8b6186db79 100644 --- a/src/platformsupport/fbconvenience/qfbwindow.cpp +++ b/src/platformsupport/fbconvenience/qfbwindow.cpp @@ -77,6 +77,26 @@ void QFbWindow::setGeometry(const QRect &rect) QPlatformWindow::setGeometry(rect); } +void QFbWindow::setVisible(bool visible) +{ + if (visible) { + if (mWindowState & Qt::WindowFullScreen) + setGeometry(platformScreen()->geometry()); + else if (mWindowState & Qt::WindowMaximized) + setGeometry(platformScreen()->availableGeometry()); + } + QPlatformWindow::setVisible(visible); +} + + +void QFbWindow::setWindowState(Qt::WindowState state) +{ + QPlatformWindow::setWindowState(state); + mWindowState = state; + platformScreen()->invalidateRectCache(); +} + + void QFbWindow::setWindowFlags(Qt::WindowFlags flags) { mWindowFlags = flags; diff --git a/src/platformsupport/fbconvenience/qfbwindow_p.h b/src/platformsupport/fbconvenience/qfbwindow_p.h index 25e2afca14..5ad921b0d7 100644 --- a/src/platformsupport/fbconvenience/qfbwindow_p.h +++ b/src/platformsupport/fbconvenience/qfbwindow_p.h @@ -59,7 +59,9 @@ public: virtual void lower(); virtual void setGeometry(const QRect &rect); + virtual void setVisible(bool visible); + virtual void setWindowState(Qt::WindowState state); virtual void setWindowFlags(Qt::WindowFlags type); virtual Qt::WindowFlags windowFlags() const; @@ -78,6 +80,7 @@ protected: QFbBackingStore *mBackingStore; QRect mOldGeometry; Qt::WindowFlags mWindowFlags; + Qt::WindowState mWindowState; WId mWindowId; };