diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2016-12-22 11:18:15 +0100 |
---|---|---|
committer | Andy Nichols <andy.nichols@qt.io> | 2016-12-25 14:44:56 +0000 |
commit | 94b136f320b7b84645cc59c89bea52e080fe3a2e (patch) | |
tree | 56df6860f4ce1dbd54b033067f3e9bde83a5ff5d /src/platformsupport/fbconvenience | |
parent | 7980e92e8939ba7d737c618c95dcf6b750e65911 (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.cpp | 21 |
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 ®ion) |