Skip to content

Commit

Permalink
Limit window size to 2/3
Browse files Browse the repository at this point in the history
Fixes: #8366
  • Loading branch information
TheOneRing committed Aug 12, 2021
1 parent 473f4fe commit 2ffd0c8
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 27 deletions.
6 changes: 6 additions & 0 deletions changelog/unreleased/8366
Original file line number Diff line number Diff line change
@@ -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
37 changes: 23 additions & 14 deletions src/gui/settingsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,23 @@
#include "protocolwidget.h"
#include "owncloudsetupwizard.h"

#include <QImage>
#include <QLabel>
#include <QStandardItemModel>
#include <QStackedWidget>
#include <QLayout>
#include <QMessageBox>
#include <QPainter>
#include <QPainterPath>
#include <QPixmap>
#include <QPushButton>
#include <QScreen>
#include <QSettings>
#include <QStackedWidget>
#include <QStandardItemModel>
#include <QToolBar>
#include <QToolButton>
#include <QLayout>
#include <QVBoxLayout>
#include <QPixmap>
#include <QImage>
#include <QWidgetAction>
#include <QPainter>
#include <QPainterPath>
#include <QMessageBox>
#include <QWindow>

#ifdef Q_OS_MAC
#include "settingsdialog_mac.h"
Expand Down Expand Up @@ -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
Expand All @@ -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()
Expand Down
4 changes: 3 additions & 1 deletion src/gui/settingsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
8 changes: 6 additions & 2 deletions src/gui/sharedialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,7 @@ ShareDialog::ShareDialog(QPointer<AccountState> 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()
Expand Down Expand Up @@ -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) {
Expand Down
2 changes: 2 additions & 0 deletions src/gui/sharedialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<QString, QString> &result);
Expand Down
8 changes: 0 additions & 8 deletions src/gui/sharedialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,6 @@
<ui version="4.0">
<class>OCC::ShareDialog</class>
<widget class="QDialog" name="OCC::ShareDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>408</width>
<height>281</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
Expand Down
9 changes: 7 additions & 2 deletions src/gui/wizard/owncloudwizard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -86,6 +84,8 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
setOption(QWizard::CancelButtonOnLeft);
setTitleFormat(Qt::RichText);
setSubTitleFormat(Qt::RichText);

setMinimumSize(minimumSizeHint());
}

void OwncloudWizard::setAccount(AccountPtr account)
Expand Down Expand Up @@ -264,4 +264,9 @@ void OwncloudWizard::askExperimentalVirtualFilesFeature(QWidget *receiver, const
msgBox->open();
}

QSize OCC::OwncloudWizard::minimumSizeHint() const
{
return ocApp()->gui()->settingsDialog()->sizeHintForChild();
}

} // end namespace
2 changes: 2 additions & 0 deletions src/gui/wizard/owncloudwizard.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 &);
Expand Down

0 comments on commit 2ffd0c8

Please sign in to comment.