diff --git a/changelog/unreleased/8366 b/changelog/unreleased/8366 new file mode 100644 index 00000000000..db1c20fcbd2 --- /dev/null +++ b/changelog/unreleased/8366 @@ -0,0 +1,6 @@ +Bugfix: Limit min window size to 2/3 available + +When scaling was used the window could become bigger than the screen. +The size is now limited to 2/3 of the screen. + +https://github.com/owncloud/client/issues/8366 diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 9366bd95d42..52d73c0aaba 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -30,21 +30,23 @@ #include "protocolwidget.h" #include "owncloudsetupwizard.h" +#include #include -#include -#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include #include #include -#include #include -#include -#include #include -#include -#include -#include +#include #ifdef Q_OS_MAC #include "settingsdialog_mac.h" @@ -250,11 +252,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) customizeStyle(); cfg.restoreGeometry(this); - if (size().width() < minimumSizeHint().width() || size().height() < minimumSizeHint().height()) - { - resize(minimumSizeHint()); - } - + setMinimumSize(minimumSizeHint()); #ifdef Q_OS_MAC setActivationPolicy(ActivationPolicy::Accessory); #endif @@ -267,7 +265,18 @@ SettingsDialog::~SettingsDialog() QSize SettingsDialog::minimumSizeHint() const { - return {800, 500}; + const auto screen = windowHandle() ? windowHandle()->screen() : QApplication::screenAt(QCursor::pos()); + const auto availableSize = screen->availableSize(); + const QSize min { 800, 600 }; + if (!availableSize.isValid()) { + return min; + } + return min.boundedTo(availableSize * 0.75); +} + +QSize SettingsDialog::sizeHintForChild() const +{ + return ocApp()->gui()->settingsDialog()->size() * 0.9; } QWidget* SettingsDialog::currentPage() diff --git a/src/gui/settingsdialog.h b/src/gui/settingsdialog.h index f977ffe6d78..b71664d74ae 100644 --- a/src/gui/settingsdialog.h +++ b/src/gui/settingsdialog.h @@ -51,8 +51,10 @@ class SettingsDialog : public QMainWindow public: explicit SettingsDialog(ownCloudGui *gui, QWidget *parent = nullptr); - ~SettingsDialog() override; + ~SettingsDialog() override; + QSize minimumSizeHint() const override; + QSize sizeHintForChild() const; QWidget* currentPage(); diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index b68756a0e74..87bf2c7c688 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -137,8 +137,7 @@ ShareDialog::ShareDialog(QPointer accountState, connect(job, &PropfindJob::finishedWithError, this, &ShareDialog::slotPropfindError); job->start(); - auto size = ocApp()->gui()->settingsDialog()->minimumSizeHint(); - resize(size.width() - 50, size.height() - 50); + setMinimumSize(minimumSizeHint()); } ShareDialog::~ShareDialog() @@ -219,6 +218,11 @@ void ShareDialog::showSharingUi() } } +QSize ShareDialog::minimumSizeHint() const +{ + return ocApp()->gui()->settingsDialog()->sizeHintForChild(); +} + void ShareDialog::slotThumbnailFetched(const int &statusCode, const QByteArray &reply) { if (statusCode != 200) { diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index a757e6740b2..67e24c0a32e 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -48,6 +48,8 @@ class ShareDialog : public QDialog QWidget *parent); ~ShareDialog() override; + QSize minimumSizeHint() const override; + private slots: void done(int r) override; void slotPropfindReceived(const QMap &result); diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index 10ed70e1ce8..eccf643be3f 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -2,14 +2,6 @@ OCC::ShareDialog - - - 0 - 0 - 408 - 281 - - Dialog diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index 673546e344f..83451f1cfff 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -52,8 +52,6 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) , _credentialsPage(nullptr) { setObjectName("owncloudWizard"); - auto size = ocApp()->gui()->settingsDialog()->minimumSizeHint(); - resize(size.width() - 50, size.height() - 50); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setPage(WizardCommon::Page_ServerSetup, _setupPage); @@ -86,6 +84,8 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) setOption(QWizard::CancelButtonOnLeft); setTitleFormat(Qt::RichText); setSubTitleFormat(Qt::RichText); + + setMinimumSize(minimumSizeHint()); } void OwncloudWizard::setAccount(AccountPtr account) @@ -264,4 +264,9 @@ void OwncloudWizard::askExperimentalVirtualFilesFeature(QWidget *receiver, const msgBox->open(); } +QSize OCC::OwncloudWizard::minimumSizeHint() const +{ + return ocApp()->gui()->settingsDialog()->sizeHintForChild(); +} + } // end namespace diff --git a/src/gui/wizard/owncloudwizard.h b/src/gui/wizard/owncloudwizard.h index 8b90e2949cf..0e0a0f9d7f3 100644 --- a/src/gui/wizard/owncloudwizard.h +++ b/src/gui/wizard/owncloudwizard.h @@ -70,6 +70,8 @@ class OwncloudWizard : public QWizard DetermineAuthTypeJob::AuthType authType() const; + QSize minimumSizeHint() const override; + public slots: void setAuthType(DetermineAuthTypeJob::AuthType type); void setRemoteFolder(const QString &);