Allow arbitrary resizing of the main window & restore sidebar's size
fixes #160
fixes #163
fixes #187
fixes #127
3 files changed, 43 insertions, 2 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc
index 2b8a6b89..3d026ab3 100644
--- a/src/ChatPage.cc
+++ b/src/ChatPage.cc
@@ -118,7 +118,7 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
// Splitter
splitter->addWidget(sideBar_);
splitter->addWidget(content_);
- splitter->setSizes({ui::sidebar::NormalSize, parent->width() - ui::sidebar::NormalSize});
+ splitter->restoreSizes(parent->width());
text_input_ = new TextInputWidget(this);
typingDisplay_ = new TypingDisplay(this);
diff --git a/src/MainWindow.cc b/src/MainWindow.cc
index c7c3432f..7733a002 100644
--- a/src/MainWindow.cc
+++ b/src/MainWindow.cc
@@ -234,9 +234,12 @@ MainWindow::showChatPage()
showOverlayProgressBar();
- welcome_page_->hide();
pageStack_->setCurrentWidget(chat_page_);
+ pageStack_->removeWidget(welcome_page_);
+ pageStack_->removeWidget(login_page_);
+ pageStack_->removeWidget(register_page_);
+
login_page_->reset();
chat_page_->bootstrap(userid, homeserver, token);
diff --git a/src/Splitter.cc b/src/Splitter.cc
index ccc250be..0344df92 100644
--- a/src/Splitter.cc
+++ b/src/Splitter.cc
@@ -16,6 +16,7 @@
*/
#include <QDebug>
+#include <QSettings>
#include "Splitter.h"
#include "Theme.h"
@@ -29,6 +30,43 @@ Splitter::Splitter(QWidget *parent)
}
void
+Splitter::restoreSizes(int fallback)
+{
+ QSettings settings;
+ int savedWidth = settings.value("sidebar/width").toInt();
+
+ auto left = widget(0);
+ if (savedWidth == ui::sidebar::SmallSize) {
+ if (left) {
+ left->setMinimumWidth(ui::sidebar::SmallSize);
+ left->setMaximumWidth(ui::sidebar::SmallSize);
+ return;
+ }
+ }
+
+ if (savedWidth >= ui::sidebar::NormalSize && savedWidth <= 2 * ui::sidebar::NormalSize) {
+ if (left) {
+ left->setMinimumWidth(ui::sidebar::NormalSize);
+ left->setMaximumWidth(2 * ui::sidebar::NormalSize);
+ setSizes({savedWidth, fallback - savedWidth});
+ return;
+ }
+ }
+
+ setSizes({ui::sidebar::NormalSize, fallback - ui::sidebar::NormalSize});
+}
+
+Splitter::~Splitter()
+{
+ auto left = widget(0);
+
+ if (left) {
+ QSettings settings;
+ settings.setValue("sidebar/width", left->width());
+ }
+}
+
+void
Splitter::onSplitterMoved(int pos, int index)
{
Q_UNUSED(pos);
|