From cc45f489128a2573130c76ffaadabaa4c8e63b13 Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Sat, 2 Dec 2023 17:44:17 +0100 Subject: [PATCH] Gui: Cap starting height of Preferences dialog This commit ensures that preference windows does not start taller than available geometry. --- src/Gui/DlgPreferences.ui | 2 +- src/Gui/DlgPreferencesImp.cpp | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Gui/DlgPreferences.ui b/src/Gui/DlgPreferences.ui index 844f91547f..bdee77dad0 100644 --- a/src/Gui/DlgPreferences.ui +++ b/src/Gui/DlgPreferences.ui @@ -13,7 +13,7 @@ 1000 - 600 + 500 diff --git a/src/Gui/DlgPreferencesImp.cpp b/src/Gui/DlgPreferencesImp.cpp index 4d9cc16d99..b19138dff1 100644 --- a/src/Gui/DlgPreferencesImp.cpp +++ b/src/Gui/DlgPreferencesImp.cpp @@ -39,6 +39,7 @@ # include # include # include +# include #endif #include @@ -690,6 +691,22 @@ void DlgPreferencesImp::restartIfRequired() void DlgPreferencesImp::showEvent(QShowEvent* ev) { QDialog::showEvent(ev); + + auto screen = windowHandle()->screen(); + auto availableSize = screen->availableSize(); + + // leave at least 100 px of height so preferences window does not take + // entire screen height. User will still be able to resize the window, + // but it should never start too tall. + auto maxStartHeight = availableSize.height() - 100; + + if (height() > maxStartHeight) { + auto heightDifference = availableSize.height() - maxStartHeight; + + // resize and reposition window so it is fully visible + resize(width(), maxStartHeight); + move(x(), heightDifference / 2); + } } QModelIndex findRootIndex(const QModelIndex& index)