summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/fbconvenience
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2016-12-22 11:18:15 +0100
committerAndy Nichols <andy.nichols@qt.io>2016-12-25 14:44:56 +0000
commit94b136f320b7b84645cc59c89bea52e080fe3a2e (patch)
tree56df6860f4ce1dbd54b033067f3e9bde83a5ff5d /src/platformsupport/fbconvenience
parent7980e92e8939ba7d737c618c95dcf6b750e65911 (diff)
linuxfb: generate expose events
Task-number: QTBUG-57747 Change-Id: I7e6a26b447cb929842e69e85fb91882c04ae10d0 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/platformsupport/fbconvenience')
-rw-r--r--src/platformsupport/fbconvenience/qfbwindow.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/platformsupport/fbconvenience/qfbwindow.cpp b/src/platformsupport/fbconvenience/qfbwindow.cpp
index 0be1dad04a..7e016f2f49 100644
--- a/src/platformsupport/fbconvenience/qfbwindow.cpp
+++ b/src/platformsupport/fbconvenience/qfbwindow.cpp
@@ -69,10 +69,14 @@ void QFbWindow::setGeometry(const QRect &rect)
QWindowSystemInterface::handleGeometryChange(window(), rect);
QPlatformWindow::setGeometry(rect);
+
+ if (mOldGeometry != rect)
+ QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size()));
}
void QFbWindow::setVisible(bool visible)
{
+ QRect newGeom;
QFbScreen *fbScreen = platformScreen();
if (visible) {
bool convOk = false;
@@ -80,9 +84,9 @@ void QFbWindow::setVisible(bool visible)
const bool platformDisableForceFullScreen = fbScreen->flags().testFlag(QFbScreen::DontForceFirstWindowToFullScreen);
const bool forceFullScreen = !envDisableForceFullScreen && !platformDisableForceFullScreen && fbScreen->windowCount() == 0;
if (forceFullScreen || (mWindowState & Qt::WindowFullScreen))
- setGeometry(platformScreen()->geometry());
+ newGeom = platformScreen()->geometry();
else if (mWindowState & Qt::WindowMaximized)
- setGeometry(platformScreen()->availableGeometry());
+ newGeom = platformScreen()->availableGeometry();
}
QPlatformWindow::setVisible(visible);
@@ -90,8 +94,17 @@ void QFbWindow::setVisible(bool visible)
fbScreen->addWindow(this);
else
fbScreen->removeWindow(this);
-}
+ if (!newGeom.isEmpty())
+ setGeometry(newGeom); // may or may not generate an expose
+
+ if (newGeom.isEmpty() || newGeom == mOldGeometry) {
+ // QWindow::isExposed() maps to QWindow::visible() by default so simply
+ // generating an expose event regardless of this being a show or hide is
+ // just what is needed here.
+ QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size()));
+ }
+}
void QFbWindow::setWindowState(Qt::WindowState state)
{
@@ -112,11 +125,13 @@ Qt::WindowFlags QFbWindow::windowFlags() const
void QFbWindow::raise()
{
platformScreen()->raise(this);
+ QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size()));
}
void QFbWindow::lower()
{
platformScreen()->lower(this);
+ QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size()));
}
void QFbWindow::repaint(const QRegion &region)