diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2019-09-03 15:20:25 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2020-01-14 09:36:13 +0000 |
commit | c061719d2e63c45dc2e126c8e36e9fe906a0bdfe (patch) | |
tree | eb8adcf7d4dce9c276795def446c9a3e35e9cafb /src | |
parent | 96cf8a33c3c2fa8a3e010e33c37462e3a703fe3d (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>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.cpp | 17 | ||||
-rw-r--r-- | src/plugins/qmltooling/qmldbg_preview/qqmlpreviewposition.h | 4 |
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: |