diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com> | 2013-02-04 17:03:38 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-12 12:25:22 +0100 |
commit | fe6add818e2ab11fba3d9df12c29dfb29c65b2af (patch) | |
tree | b406f88d53915a67853ddafe2b259ec9a261fedb /src/platformsupport | |
parent | 686dcce5fb2eef4adebfc2a247e96574ec062473 (diff) |
Enablers in fbconvenience for Android port
Additions to make the convenience classes work for the
Qt for Android port.
Change-Id: I25ba0faf93c7e09ab04a3fa0784e04631e5ab036
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'src/platformsupport')
-rw-r--r-- | src/platformsupport/fbconvenience/qfbscreen.cpp | 51 | ||||
-rw-r--r-- | src/platformsupport/fbconvenience/qfbscreen_p.h | 6 | ||||
-rw-r--r-- | src/platformsupport/fbconvenience/qfbwindow.cpp | 3 | ||||
-rw-r--r-- | src/platformsupport/fbconvenience/qfbwindow_p.h | 2 |
4 files changed, 51 insertions, 11 deletions
diff --git a/src/platformsupport/fbconvenience/qfbscreen.cpp b/src/platformsupport/fbconvenience/qfbscreen.cpp index efabf6e2a8..5200177fdd 100644 --- a/src/platformsupport/fbconvenience/qfbscreen.cpp +++ b/src/platformsupport/fbconvenience/qfbscreen.cpp @@ -45,6 +45,7 @@ #include "qfbbackingstore_p.h" #include <QtGui/QPainter> +#include <qpa/qwindowsysteminterface.h> QT_BEGIN_NAMESPACE @@ -72,6 +73,9 @@ void QFbScreen::addWindow(QFbWindow *window) mWindowStack.prepend(window); invalidateRectCache(); setDirty(window->geometry()); + QWindow *w = topWindow(); + QWindowSystemInterface::handleWindowActivated(w); + topWindowChanged(w); } void QFbScreen::removeWindow(QFbWindow *window) @@ -79,6 +83,9 @@ void QFbScreen::removeWindow(QFbWindow *window) mWindowStack.removeOne(window); invalidateRectCache(); setDirty(window->geometry()); + QWindow *w = topWindow(); + QWindowSystemInterface::handleWindowActivated(w); + topWindowChanged(w); } void QFbScreen::raise(QFbWindow *window) @@ -89,6 +96,9 @@ void QFbScreen::raise(QFbWindow *window) mWindowStack.move(index, 0); invalidateRectCache(); setDirty(window->geometry()); + QWindow *w = topWindow(); + QWindowSystemInterface::handleWindowActivated(w); + topWindowChanged(w); } void QFbScreen::lower(QFbWindow *window) @@ -99,20 +109,25 @@ void QFbScreen::lower(QFbWindow *window) mWindowStack.move(index, mWindowStack.size() - 1); invalidateRectCache(); setDirty(window->geometry()); + QWindow *w = topWindow(); + QWindowSystemInterface::handleWindowActivated(w); + topWindowChanged(w); +} + +QWindow *QFbScreen::topWindow() +{ + foreach (QFbWindow *fbw, mWindowStack) + if (fbw->window()->type() == Qt::Window || fbw->window()->type() == Qt::Dialog) + return fbw->window(); + return 0; } QWindow *QFbScreen::topLevelAt(const QPoint & p) const { - Q_UNUSED(p); -#if 0 - for (int i = 0; i < mWindowStack.size(); i++) { - if (mWindowStack[i]->geometry().contains(p, false) && - mWindowStack[i]->visible() && - !mWindowStack[i]->widget()->isMinimized()) { - return mWindowStack[i]->widget(); - } + foreach (QFbWindow *fbw, mWindowStack) { + if (fbw->geometry().contains(p, false) && fbw->window()->isVisible()) + return fbw->window(); } -#endif return 0; } @@ -126,6 +141,24 @@ void QFbScreen::setDirty(const QRect &rect) } } +void QFbScreen::setPhysicalSize(const QSize &size) +{ + mPhysicalSize = size; +} + +void QFbScreen::setGeometry(const QRect &rect) +{ + delete mCompositePainter; + mCompositePainter = 0; + delete mScreenImage; + mGeometry = rect; + mScreenImage = new QImage(mGeometry.size(), mFormat); + invalidateRectCache(); + QWindowSystemInterface::handleScreenGeometryChange(QPlatformScreen::screen(), geometry()); + QWindowSystemInterface::handleScreenAvailableGeometryChange(QPlatformScreen::screen(), availableGeometry()); + resizeMaximizedWindows(); +} + void QFbScreen::generateRects() { mCachedRects.clear(); diff --git a/src/platformsupport/fbconvenience/qfbscreen_p.h b/src/platformsupport/fbconvenience/qfbscreen_p.h index 00e3f9bef4..00847922c5 100644 --- a/src/platformsupport/fbconvenience/qfbscreen_p.h +++ b/src/platformsupport/fbconvenience/qfbscreen_p.h @@ -64,6 +64,7 @@ public: virtual QImage::Format format() const { return mFormat; } virtual QSizeF physicalSize() const { return mPhysicalSize; } + QWindow *topWindow(); virtual QWindow *topLevelAt(const QPoint & p) const; // compositor api @@ -71,7 +72,12 @@ public: virtual void removeWindow(QFbWindow *window); virtual void raise(QFbWindow *window); virtual void lower(QFbWindow *window); + virtual void topWindowChanged(QWindow *){} + +public slots: virtual void setDirty(const QRect &rect); + void setPhysicalSize(const QSize &size); + void setGeometry(const QRect &rect); protected slots: virtual QRegion doRedraw(); diff --git a/src/platformsupport/fbconvenience/qfbwindow.cpp b/src/platformsupport/fbconvenience/qfbwindow.cpp index e052907c79..246f50b4a9 100644 --- a/src/platformsupport/fbconvenience/qfbwindow.cpp +++ b/src/platformsupport/fbconvenience/qfbwindow.cpp @@ -43,6 +43,7 @@ #include "qfbscreen_p.h" #include <QtGui/QScreen> +#include <qpa/qwindowsysteminterface.h> QT_BEGIN_NAMESPACE @@ -71,7 +72,7 @@ void QFbWindow::setGeometry(const QRect &rect) mOldGeometry = geometry(); platformScreen()->invalidateRectCache(); - //### QWindowSystemInterface::handleGeometryChange(window(), rect); + QWindowSystemInterface::handleGeometryChange(window(), rect); QPlatformWindow::setGeometry(rect); } diff --git a/src/platformsupport/fbconvenience/qfbwindow_p.h b/src/platformsupport/fbconvenience/qfbwindow_p.h index 8c7d5c6b7a..25e2afca14 100644 --- a/src/platformsupport/fbconvenience/qfbwindow_p.h +++ b/src/platformsupport/fbconvenience/qfbwindow_p.h @@ -58,7 +58,7 @@ public: virtual void raise(); virtual void lower(); - void setGeometry(const QRect &rect); + virtual void setGeometry(const QRect &rect); virtual void setWindowFlags(Qt::WindowFlags type); virtual Qt::WindowFlags windowFlags() const; |