diff --git a/include/MainWindow.h b/include/MainWindow.h
index b068e8f6..10750e00 100644
--- a/include/MainWindow.h
+++ b/include/MainWindow.h
@@ -83,14 +83,23 @@ private slots:
void showWelcomePage()
{
removeOverlayProgressBar();
+ pageStack_->addWidget(welcome_page_);
pageStack_->setCurrentWidget(welcome_page_);
}
//! Show the login page in the main window.
- void showLoginPage() { pageStack_->setCurrentWidget(login_page_); }
+ void showLoginPage()
+ {
+ pageStack_->addWidget(login_page_);
+ pageStack_->setCurrentWidget(login_page_);
+ }
//! Show the register page in the main window.
- void showRegisterPage() { pageStack_->setCurrentWidget(register_page_); }
+ void showRegisterPage()
+ {
+ pageStack_->addWidget(register_page_);
+ pageStack_->setCurrentWidget(register_page_);
+ }
//! Show user settings page.
void showUserSettingsPage() { pageStack_->setCurrentWidget(userSettingsPage_); }
diff --git a/include/Splitter.h b/include/Splitter.h
index 5591fe55..38b38e84 100644
--- a/include/Splitter.h
+++ b/include/Splitter.h
@@ -24,6 +24,9 @@ class Splitter : public QSplitter
Q_OBJECT
public:
explicit Splitter(QWidget *parent = nullptr);
+ ~Splitter();
+
+ void restoreSizes(int fallback);
private:
void onSplitterMoved(int pos, int index);
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);
|