Skip to content

Commit fe429b1

Browse files
committedAug 9, 2021
Limit window size to 2/3
Fixes: #8366
1 parent c625d2d commit fe429b1

File tree

8 files changed

+51
-27
lines changed

8 files changed

+51
-27
lines changed
 

‎changelog/unreleased/8366

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Bugfix: Limit min window size to 2/3 available
2+
3+
When scaling was used the window could become bigger than the screen.
4+
The size is now limited to 2/3 of the screen.
5+
6+
https://github.com/owncloud/client/issues/8366

‎src/gui/settingsdialog.cpp

+25-14
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,23 @@
3030
#include "protocolwidget.h"
3131
#include "owncloudsetupwizard.h"
3232

33+
#include <QImage>
3334
#include <QLabel>
34-
#include <QStandardItemModel>
35-
#include <QStackedWidget>
35+
#include <QLayout>
36+
#include <QMessageBox>
37+
#include <QPainter>
38+
#include <QPainterPath>
39+
#include <QPixmap>
3640
#include <QPushButton>
41+
#include <QScreen>
3742
#include <QSettings>
43+
#include <QStackedWidget>
44+
#include <QStandardItemModel>
3845
#include <QToolBar>
3946
#include <QToolButton>
40-
#include <QLayout>
4147
#include <QVBoxLayout>
42-
#include <QPixmap>
43-
#include <QImage>
4448
#include <QWidgetAction>
45-
#include <QPainter>
46-
#include <QPainterPath>
47-
#include <QMessageBox>
49+
#include <QWindow>
4850

4951
#ifdef Q_OS_MAC
5052
#include "settingsdialog_mac.h"
@@ -250,11 +252,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
250252
customizeStyle();
251253

252254
cfg.restoreGeometry(this);
253-
if (size().width() < minimumSizeHint().width() || size().height() < minimumSizeHint().height())
254-
{
255-
resize(minimumSizeHint());
256-
}
257-
255+
setMinimumSize(minimumSizeHint());
258256
#ifdef Q_OS_MAC
259257
setActivationPolicy(ActivationPolicy::Accessory);
260258
#endif
@@ -267,7 +265,20 @@ SettingsDialog::~SettingsDialog()
267265

268266
QSize SettingsDialog::minimumSizeHint() const
269267
{
270-
return {800, 500};
268+
const auto screen = windowHandle() ? windowHandle()->screen() : QApplication::screenAt(QCursor::pos());
269+
const auto geometry = screen->availableSize();
270+
const QSize min { 800, 600 };
271+
const QSize currentMin { static_cast<int>(geometry.width() * 0.75), static_cast<int>(geometry.height() * 0.75) };
272+
if (currentMin.width() < min.width() || currentMin.height() < min.height()) {
273+
return currentMin;
274+
}
275+
return min;
276+
}
277+
278+
QSize SettingsDialog::sizeHintForChild() const
279+
{
280+
auto size = ocApp()->gui()->settingsDialog()->size();
281+
return { static_cast<int>(size.width() * 0.9), static_cast<int>(size.height() * 0.9) };
271282
}
272283

273284
QWidget* SettingsDialog::currentPage()

‎src/gui/settingsdialog.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ class SettingsDialog : public QMainWindow
5151

5252
public:
5353
explicit SettingsDialog(ownCloudGui *gui, QWidget *parent = nullptr);
54-
~SettingsDialog() override;
54+
~SettingsDialog() override;
55+
5556
QSize minimumSizeHint() const override;
57+
QSize sizeHintForChild() const;
5658

5759
QWidget* currentPage();
5860

‎src/gui/sharedialog.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,7 @@ ShareDialog::ShareDialog(QPointer<AccountState> accountState,
137137
connect(job, &PropfindJob::finishedWithError, this, &ShareDialog::slotPropfindError);
138138
job->start();
139139

140-
auto size = ocApp()->gui()->settingsDialog()->minimumSizeHint();
141-
resize(size.width() - 50, size.height() - 50);
140+
setMinimumSize(minimumSizeHint());
142141
}
143142

144143
ShareDialog::~ShareDialog()
@@ -219,6 +218,11 @@ void ShareDialog::showSharingUi()
219218
}
220219
}
221220

221+
QSize ShareDialog::minimumSizeHint() const
222+
{
223+
return ocApp()->gui()->settingsDialog()->sizeHintForChild();
224+
}
225+
222226
void ShareDialog::slotThumbnailFetched(const int &statusCode, const QByteArray &reply)
223227
{
224228
if (statusCode != 200) {

‎src/gui/sharedialog.h

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class ShareDialog : public QDialog
4848
QWidget *parent);
4949
~ShareDialog() override;
5050

51+
QSize minimumSizeHint() const override;
52+
5153
private slots:
5254
void done(int r) override;
5355
void slotPropfindReceived(const QMap<QString, QString> &result);

‎src/gui/sharedialog.ui

-8
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,6 @@
22
<ui version="4.0">
33
<class>OCC::ShareDialog</class>
44
<widget class="QDialog" name="OCC::ShareDialog">
5-
<property name="geometry">
6-
<rect>
7-
<x>0</x>
8-
<y>0</y>
9-
<width>408</width>
10-
<height>281</height>
11-
</rect>
12-
</property>
135
<property name="windowTitle">
146
<string>Dialog</string>
157
</property>

‎src/gui/wizard/owncloudwizard.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
5454
, _credentialsPage(nullptr)
5555
{
5656
setObjectName("owncloudWizard");
57-
auto size = ocApp()->gui()->settingsDialog()->minimumSizeHint();
58-
resize(size.width() - 50, size.height() - 50);
5957

6058
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
6159
setPage(WizardCommon::Page_ServerSetup, _setupPage);
@@ -89,6 +87,8 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
8987
setOption(QWizard::CancelButtonOnLeft);
9088
setTitleFormat(Qt::RichText);
9189
setSubTitleFormat(Qt::RichText);
90+
91+
setMinimumSize(minimumSizeHint());
9292
}
9393

9494
void OwncloudWizard::setAccount(AccountPtr account)
@@ -276,4 +276,9 @@ void OwncloudWizard::askExperimentalVirtualFilesFeature(QWidget *receiver, const
276276
msgBox->open();
277277
}
278278

279+
QSize OCC::OwncloudWizard::minimumSizeHint() const
280+
{
281+
return ocApp()->gui()->settingsDialog()->sizeHintForChild();
282+
}
283+
279284
} // end namespace

‎src/gui/wizard/owncloudwizard.h

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ class OwncloudWizard : public QWizard
7272

7373
DetermineAuthTypeJob::AuthType authType() const;
7474

75+
QSize minimumSizeHint() const override;
76+
7577
public slots:
7678
void setAuthType(DetermineAuthTypeJob::AuthType type);
7779
void setRemoteFolder(const QString &);

0 commit comments

Comments
 (0)