Git commit 6140f7ab4eb62e43303b78fb1406deba9426490d by Jan Kundr?t. Committed on 26/05/2013 at 22:43. Pushed by jkt into branch 'master'.
GUI: disable the wide mode on small screens Suggested by Thomas L?bking. M +30 -10 src/Gui/Window.cpp M +5 -0 src/Gui/Window.h http://commits.kde.org/trojita/6140f7ab4eb62e43303b78fb1406deba9426490d diff --git a/src/Gui/Window.cpp b/src/Gui/Window.cpp index 0e99117..beb882b 100644 --- a/src/Gui/Window.cpp +++ b/src/Gui/Window.cpp @@ -22,6 +22,7 @@ #include <QAuthenticator> #include <QDesktopServices> +#include <QDesktopWidget> #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) # include <QStandardPaths> # include <QUrlQuery> @@ -92,7 +93,13 @@ Q_DECLARE_METATYPE(QList<QSslError>) namespace Gui { -MainWindow::MainWindow(): QMainWindow(), model(0), m_mainHSplitter(0), m_mainVSplitter(0), m_mainStack(0), +enum { + MINIMUM_WIDTH_NORMAL = 800, + MINIMUM_WIDTH_WIDE = 1250 +}; + +MainWindow::MainWindow(): QMainWindow(), model(0), + m_mainHSplitter(0), m_mainVSplitter(0), m_mainStack(0), m_layoutMode(LAYOUT_COMPACT), m_actionSortNone(0), m_ignoreStoredPassword(false) { qRegisterMetaType<QList<QSslCertificate> >(); @@ -127,15 +134,15 @@ MainWindow::MainWindow(): QMainWindow(), model(0), m_mainHSplitter(0), m_mainVSp recoverDrafts(); - if (QSettings().value(Common::SettingsNames::guiMainWindowLayout) == Common::SettingsNames::guiMainWindowLayoutWide) { - m_actionLayoutWide->setChecked(true); - slotLayoutWide(); + connect(qApp->desktop(), SIGNAL(resized(int)), this, SLOT(desktopGeometryChanged())); + desktopGeometryChanged(); + if (m_actionLayoutWide->isEnabled() && + QSettings().value(Common::SettingsNames::guiMainWindowLayout) == Common::SettingsNames::guiMainWindowLayoutWide) { + m_actionLayoutWide->trigger(); } else if (QSettings().value(Common::SettingsNames::guiMainWindowLayout) == Common::SettingsNames::guiMainWindowLayoutOneAtTime) { - m_actionLayoutOneAtTime->setChecked(true); - slotLayoutOneAtTime(); + m_actionLayoutOneAtTime->trigger(); } else { - m_actionLayoutCompact->setChecked(true); - slotLayoutCompact(); + m_actionLayoutCompact->trigger(); } } @@ -1919,10 +1926,11 @@ void MainWindow::slotLayoutCompact() m_mainHSplitter->setStretchFactor(1, 1); setCentralWidget(m_mainHSplitter); - setMinimumWidth(800); + setMinimumWidth(MINIMUM_WIDTH_NORMAL); delete m_mainStack; + m_layoutMode = LAYOUT_COMPACT; QSettings().setValue(Common::SettingsNames::guiMainWindowLayout, Common::SettingsNames::guiMainWindowLayoutCompact); } @@ -1945,11 +1953,12 @@ void MainWindow::slotLayoutWide() m_mainHSplitter->show(); setCentralWidget(m_mainHSplitter); - setMinimumWidth(1250); + setMinimumWidth(MINIMUM_WIDTH_WIDE); delete m_mainStack; delete m_mainVSplitter; + m_layoutMode = LAYOUT_WIDE; QSettings().setValue(Common::SettingsNames::guiMainWindowLayout, Common::SettingsNames::guiMainWindowLayoutWide); } @@ -1964,6 +1973,7 @@ void MainWindow::slotLayoutOneAtTime() m_mainStack->addWidget(m_messageWidget); m_mainStack->setCurrentWidget(mboxTree); setCentralWidget(m_mainStack); + setMinimumWidth(MINIMUM_WIDTH_NORMAL); delete m_mainHSplitter; delete m_mainVSplitter; @@ -1978,6 +1988,7 @@ void MainWindow::slotLayoutOneAtTime() connect(mboxTree, SIGNAL(activated(QModelIndex)), this, SLOT(slotOneAtTimeGoDeeper())); m_mainToolbar->addAction(m_oneAtTimeGoBack); + m_layoutMode = LAYOUT_ONE_AT_TIME; QSettings().setValue(Common::SettingsNames::guiMainWindowLayout, Common::SettingsNames::guiMainWindowLayoutOneAtTime); } @@ -2023,6 +2034,15 @@ void MainWindow::migrateSettings() } } +void MainWindow::desktopGeometryChanged() +{ + QRect geometry = qApp->desktop()->availableGeometry(this); + m_actionLayoutWide->setEnabled(geometry.width() >= MINIMUM_WIDTH_WIDE); + if (m_layoutMode == LAYOUT_WIDE && !m_actionLayoutWide->isEnabled()) { + m_actionLayoutCompact->trigger(); + } +} + } diff --git a/src/Gui/Window.h b/src/Gui/Window.h index b033034..9e7371a 100644 --- a/src/Gui/Window.h +++ b/src/Gui/Window.h @@ -164,6 +164,9 @@ private slots: void slotLayoutOneAtTime(); void slotOneAtTimeGoBack(); void slotOneAtTimeGoDeeper(); + + void desktopGeometryChanged(); + private: void defineActions(); void createMenus(); @@ -206,6 +209,8 @@ private: QPointer<QSplitter> m_mainVSplitter; QPointer<QStackedWidget> m_mainStack; + enum { LAYOUT_COMPACT, LAYOUT_WIDE, LAYOUT_ONE_AT_TIME } m_layoutMode; + QAction *reloadMboxList; QAction *reloadAllMailboxes; QAction *resyncMbox;
