diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 002c6dff3..6f73e4ce9 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -219,8 +219,8 @@ MainWindow::MainWindow(IGUIApplication *app, const State initialState) tr("Transfers")); connect(m_searchFilter, &LineEdit::textChanged, m_transferListWidget, &TransferListWidget::applyNameFilter); - connect(hSplitter, &QSplitter::splitterMoved, this, &MainWindow::writeSettings); - connect(m_splitter, &QSplitter::splitterMoved, this, &MainWindow::writeSplitterSettings); + connect(hSplitter, &QSplitter::splitterMoved, this, &MainWindow::saveSettings); + connect(m_splitter, &QSplitter::splitterMoved, this, &MainWindow::saveSplitterSettings); connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersChanged, m_propertiesWidget, &PropertiesWidget::loadTrackers); #ifdef Q_OS_MACOS @@ -357,7 +357,7 @@ MainWindow::MainWindow(IGUIApplication *app, const State initialState) m_ui->actionAutoShutdownDisabled->setChecked(true); // Load Window state and sizes - readSettings(); + loadSettings(); app->desktopIntegration()->setMenu(createDesktopIntegrationMenu()); #ifndef Q_OS_MACOS @@ -739,23 +739,26 @@ void MainWindow::tabChanged(int newTab) } } -void MainWindow::writeSettings() +void MainWindow::saveSettings() const { - Preferences *const pref = Preferences::instance(); + auto *pref = Preferences::instance(); pref->setMainGeometry(saveGeometry()); m_propertiesWidget->saveSettings(); } -void MainWindow::writeSplitterSettings() +void MainWindow::saveSplitterSettings() const { - Q_ASSERT(m_splitter->widget(0) == m_transferListFiltersWidget); - Preferences *const pref = Preferences::instance(); + if (!m_transferListFiltersWidget) + return; + + auto *pref = Preferences::instance(); pref->setFiltersSidebarWidth(m_splitter->sizes()[0]); } void MainWindow::cleanup() { - writeSettings(); + saveSettings(); + saveSplitterSettings(); // delete RSSWidget explicitly to avoid crash in // handleRSSUnreadCountUpdated() at application shutdown @@ -775,12 +778,15 @@ void MainWindow::cleanup() delete w; } -void MainWindow::readSettings() +void MainWindow::loadSettings() { - const Preferences *const pref = Preferences::instance(); - const QByteArray mainGeo = pref->getMainGeometry(); - if (!mainGeo.isEmpty() && restoreGeometry(mainGeo)) + const auto *pref = Preferences::instance(); + + if (const QByteArray mainGeo = pref->getMainGeometry(); + !mainGeo.isEmpty() && restoreGeometry(mainGeo)) + { m_posInitialized = true; + } } void MainWindow::desktopNotificationClicked() @@ -1377,27 +1383,27 @@ void MainWindow::showStatusBar(bool show) void MainWindow::showFiltersSidebar(const bool show) { - Preferences *const pref = Preferences::instance(); - if (show && !m_transferListFiltersWidget) { - const int width = pref->getFiltersSidebarWidth(); m_transferListFiltersWidget = new TransferListFiltersWidget(m_splitter, m_transferListWidget, isDownloadTrackerFavicon()); - m_splitter->insertWidget(0, m_transferListFiltersWidget); - m_splitter->setCollapsible(0, true); - m_splitter->setSizes({width, (m_splitter->width() - width)}); - connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersAdded, m_transferListFiltersWidget, &TransferListFiltersWidget::addTrackers); connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersRemoved, m_transferListFiltersWidget, &TransferListFiltersWidget::removeTrackers); connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackersChanged, m_transferListFiltersWidget, &TransferListFiltersWidget::refreshTrackers); connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackerlessStateChanged, m_transferListFiltersWidget, &TransferListFiltersWidget::changeTrackerless); connect(BitTorrent::Session::instance(), &BitTorrent::Session::trackerEntriesUpdated, m_transferListFiltersWidget, &TransferListFiltersWidget::trackerEntriesUpdated); + + m_splitter->insertWidget(0, m_transferListFiltersWidget); + m_splitter->setCollapsible(0, true); + // From https://doc.qt.io/qt-5/qsplitter.html#setSizes: + // Instead, any additional/missing space is distributed amongst the widgets + // according to the relative weight of the sizes. + m_splitter->setStretchFactor(0, 0); + m_splitter->setStretchFactor(1, 1); + m_splitter->setSizes({Preferences::instance()->getFiltersSidebarWidth()}); } else if (!show && m_transferListFiltersWidget) { - Q_ASSERT(m_splitter->widget(0) == m_transferListFiltersWidget); - - pref->setFiltersSidebarWidth(m_splitter->sizes()[0]); + saveSplitterSettings(); delete m_transferListFiltersWidget; m_transferListFiltersWidget = nullptr; } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 678c5637f..aace1fd12 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -110,9 +110,9 @@ public: private slots: void showFilterContextMenu(); void desktopNotificationClicked(); - void writeSettings(); - void writeSplitterSettings(); - void readSettings(); + void saveSettings() const; + void loadSettings(); + void saveSplitterSettings() const; void tabChanged(int newTab); bool defineUILockPassword(); void clearUILockPassword(); diff --git a/src/gui/transferlistfilterswidget.h b/src/gui/transferlistfilterswidget.h index 986feeaf1..f911b2814 100644 --- a/src/gui/transferlistfilterswidget.h +++ b/src/gui/transferlistfilterswidget.h @@ -44,6 +44,8 @@ class QCheckBox; class QResizeEvent; +class CategoryFilterWidget; +class TagFilterWidget; class TransferListWidget; namespace Net @@ -163,9 +165,6 @@ private: bool m_downloadTrackerFavicon; }; -class CategoryFilterWidget; -class TagFilterWidget; - class TransferListFiltersWidget final : public QFrame { Q_OBJECT diff --git a/src/webui/www/private/views/preferences.html b/src/webui/www/private/views/preferences.html index 71c6f1f91..25e81b610 100644 --- a/src/webui/www/private/views/preferences.html +++ b/src/webui/www/private/views/preferences.html @@ -791,7 +791,7 @@
- +