[kde-doc-english] [trojita] src/Gui: GUI: disable the wide mode on small screens

Jan Kundrát jkt at flaska.net
Sun May 26 23:39:49 UTC 2013


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;



More information about the kde-doc-english mailing list