Add QPlatformScreen::windows() helper to return all windows on screen

Change-Id: Ib55b37b64ed0890ca777dfea8c4d702e267c34bf
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
This commit is contained in:
Tor Arne Vestbø 2018-08-06 18:37:14 +02:00
parent be35539123
commit e7063e6cc6
2 changed files with 17 additions and 9 deletions

View File

@ -103,6 +103,20 @@ QWindow *QPlatformScreen::topLevelAt(const QPoint & pos) const
return 0;
}
/*!
Return all windows residing on this screen.
*/
QWindowList QPlatformScreen::windows() const
{
QWindowList windows;
for (QWindow *window : QGuiApplication::allWindows()) {
if (platformScreenForWindow(window) != this)
continue;
windows.append(window);
}
return windows;
}
/*!
Find the sibling screen corresponding to \a globalPos.
@ -369,25 +383,17 @@ QPlatformCursor *QPlatformScreen::cursor() const
*/
void QPlatformScreen::resizeMaximizedWindows()
{
QList<QWindow*> windows = QGuiApplication::allWindows();
// 'screen()' still has the old geometry info while 'this' has the new geometry info
const QRect oldGeometry = screen()->geometry();
const QRect oldAvailableGeometry = screen()->availableGeometry();
const QRect newGeometry = deviceIndependentGeometry();
const QRect newAvailableGeometry = QHighDpi::fromNative(availableGeometry(), QHighDpiScaling::factor(this), newGeometry.topLeft());
// make sure maximized and fullscreen windows are updated
for (int i = 0; i < windows.size(); ++i) {
QWindow *w = windows.at(i);
for (QWindow *w : windows()) {
// Skip non-platform windows, e.g., offscreen windows.
if (!w->handle())
continue;
if (platformScreenForWindow(w) != this)
continue;
if (w->windowState() & Qt::WindowMaximized || w->geometry() == oldAvailableGeometry)
w->setGeometry(newAvailableGeometry);
else if (w->windowState() & Qt::WindowFullScreen || w->geometry() == oldGeometry)

View File

@ -123,6 +123,8 @@ public:
virtual void setOrientationUpdateMask(Qt::ScreenOrientations mask);
virtual QWindow *topLevelAt(const QPoint &point) const;
QWindowList windows() const;
virtual QList<QPlatformScreen *> virtualSiblings() const;
const QPlatformScreen *screenForPosition(const QPoint &point) const;