summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/fbconvenience
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@digia.com>2013-10-22 14:06:29 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-23 10:19:10 +0200
commitaa7fa093126f4ce9204b0d8efa7f9e8762847905 (patch)
tree629de3d8abd76addf64298f7206c6c1fa081da95 /src/platformsupport/fbconvenience
parentbd3f3f31bf15f966d9d1ae0974fbc4028e6ed17e (diff)
Android/LinuxFb: fix QWidget::showFullScreen()
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 <jorgen.lind@digia.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Diffstat (limited to 'src/platformsupport/fbconvenience')
-rw-r--r--src/platformsupport/fbconvenience/qfbwindow.cpp20
-rw-r--r--src/platformsupport/fbconvenience/qfbwindow_p.h3
2 files changed, 23 insertions, 0 deletions
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;
};