summaryrefslogtreecommitdiffstats
path: root/src/platformsupport
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>2013-02-04 17:03:38 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-12 12:25:22 +0100
commitfe6add818e2ab11fba3d9df12c29dfb29c65b2af (patch)
treeb406f88d53915a67853ddafe2b259ec9a261fedb /src/platformsupport
parent686dcce5fb2eef4adebfc2a247e96574ec062473 (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.cpp51
-rw-r--r--src/platformsupport/fbconvenience/qfbscreen_p.h6
-rw-r--r--src/platformsupport/fbconvenience/qfbwindow.cpp3
-rw-r--r--src/platformsupport/fbconvenience/qfbwindow_p.h2
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;