diff --git a/libqf/libqfqmlwidgets/src/dialogs/dialog.cpp b/libqf/libqfqmlwidgets/src/dialogs/dialog.cpp index b9a41eeeb..89e278ba7 100644 --- a/libqf/libqfqmlwidgets/src/dialogs/dialog.cpp +++ b/libqf/libqfqmlwidgets/src/dialogs/dialog.cpp @@ -158,8 +158,13 @@ void Dialog::loadPersistentSettings() settings.beginGroup(path); QRect geometry = settings.value("geometry").toRect(); if(geometry.isValid()) { - geometry = qf::qmlwidgets::internal::DesktopUtils::moveRectToVisibleDesktopScreen(geometry); - this->setGeometry(geometry); + if(isSavePersistentPosition()) { + geometry = qf::qmlwidgets::internal::DesktopUtils::moveRectToVisibleDesktopScreen(geometry); + this->setGeometry(geometry); + } + else { + this->resize(geometry.size()); + } } } } diff --git a/libqf/libqfqmlwidgets/src/internal/desktoputils.cpp b/libqf/libqfqmlwidgets/src/internal/desktoputils.cpp index a34a5ca1a..aa12df102 100644 --- a/libqf/libqfqmlwidgets/src/internal/desktoputils.cpp +++ b/libqf/libqfqmlwidgets/src/internal/desktoputils.cpp @@ -9,23 +9,20 @@ namespace internal { QRect DesktopUtils::moveRectToVisibleDesktopScreen(const QRect &r) { + QRect ret = r; #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) - if(QApplication::screenAt(r.topLeft())) { - return r; - } - else { - if(auto *first_screen = QApplication::screens().value(0)) { - auto ret = r; - ret.moveTopLeft(first_screen->geometry().topLeft()); - return ret; - } - return r; - } + QScreen *scr = QApplication::screenAt(ret.topLeft()); + QRect screen_rect = scr? scr->geometry(): QRect(); #else - return ret; + QDesktopWidget *dw = QApplication::desktop(); + QRect screen_rect = dw->screenGeometry(ret.topLeft()); #endif + if(screen_rect.isValid() && !screen_rect.contains(ret.topLeft())) + ret.moveTopLeft(screen_rect.topLeft()); + return ret; } + } // namespace internal } // namespace qmlwidgets } // namespace qf