aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2019-09-03 15:20:25 +0200
committerTim Jenssen <tim.jenssen@qt.io>2020-01-14 09:36:13 +0000
commitc061719d2e63c45dc2e126c8e36e9fe906a0bdfe (patch)
treeeb8adcf7d4dce9c276795def446c9a3e35e9cafb
parent96cf8a33c3c2fa8a3e010e33c37462e3a703fe3d (diff)
fix for out-of-screen preview windows
The problem was that the screen position was changed by the user and it did not check this before it set it to that saved position. Also added a warning if it is still happening - which is not expected anymore. Fixes: QTBUG-79323 Change-Id: Id3d945626461016d51fcad9f8882c3d39544a985 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.cpp17
-rw-r--r--src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.h4
2 files changed, 13 insertions, 8 deletions
diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.cpp
index d4acd24da5..52e197b1ed 100644
--- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.cpp
+++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.cpp
@@ -51,7 +51,7 @@ static QVector<QQmlPreviewPosition::ScreenData> initScreensData()
QVector<QQmlPreviewPosition::ScreenData> screensData;
for (QScreen *screen : QGuiApplication::screens()) {
- QQmlPreviewPosition::ScreenData sd{screen->name(), screen->size()};
+ QQmlPreviewPosition::ScreenData sd{screen->name(), screen->geometry()};
screensData.append(sd);
}
return screensData;
@@ -69,20 +69,20 @@ static QScreen *findScreen(const QString &nameOfScreen)
static QDataStream &operator<<(QDataStream &out, const QQmlPreviewPosition::ScreenData &screenData)
{
out << screenData.name;
- out << screenData.size;
+ out << screenData.rect;
return out;
}
static QDataStream &operator>>(QDataStream &in, QQmlPreviewPosition::ScreenData &screenData)
{
in >> screenData.name;
- in >> screenData.size;
+ in >> screenData.rect;
return in;
}
bool QQmlPreviewPosition::ScreenData::operator==(const QQmlPreviewPosition::ScreenData &other) const
{
- return other.size == size && other.name == name;
+ return other.rect == rect && other.name == name;
}
QQmlPreviewPosition::QQmlPreviewPosition()
@@ -211,8 +211,13 @@ void QQmlPreviewPosition::setPosition(const QQmlPreviewPosition::Position &posit
return;
if (QScreen *screen = findScreen(position.screenName)) {
window->setScreen(screen);
- window->setFramePosition(QHighDpiScaling::mapPositionFromNative(position.nativePosition,
- screen->handle()));
+ const auto point = QHighDpiScaling::mapPositionFromNative(position.nativePosition,
+ screen->handle());
+ const QRect geometry(point, window->size());
+ if (screen->virtualGeometry().contains(geometry))
+ window->setFramePosition(point);
+ else
+ qWarning("preview position is out of screen");
}
}
diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.h b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.h
index f403917f8c..9d84170948 100644
--- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.h
+++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.h
@@ -56,7 +56,7 @@
#include <QtCore/qurl.h>
#include <QtCore/qtimer.h>
#include <QtCore/qsettings.h>
-#include <QtCore/qsize.h>
+#include <QtCore/qrect.h>
#include <QtCore/qdatastream.h>
QT_BEGIN_NAMESPACE
@@ -70,7 +70,7 @@ public:
public:
bool operator==(const QQmlPreviewPosition::ScreenData &other) const;
QString name;
- QSize size;
+ QRect rect;
};
class Position {
public: