From 1aa4b41151fa51b230bf846289b8bdfbb431618b Mon Sep 17 00:00:00 2001 From: David Rosca Date: Tue, 2 Jan 2018 18:42:40 +0100 Subject: [PATCH] BrowserWindow: Save sidebar for each window Allows to have different sidebar on each window. --- src/lib/app/browserwindow.cpp | 35 ++++++++++++++++++++++------------- src/lib/app/browserwindow.h | 2 +- src/lib/sidebar/sidebar.cpp | 26 ++++++++++++-------------- src/lib/sidebar/sidebar.h | 4 +++- 4 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/lib/app/browserwindow.cpp b/src/lib/app/browserwindow.cpp index 2fabe5d25..1c7a266a3 100644 --- a/src/lib/app/browserwindow.cpp +++ b/src/lib/app/browserwindow.cpp @@ -375,7 +375,8 @@ void BrowserWindow::setupUi() QSL("LocationBarWidth"), QSL("WebSearchBarWidth"), QSL("SideBarWidth"), - QSL("WebViewWidth") + QSL("WebViewWidth"), + QSL("SideBar") }; for (const QString &key : keys) { if (settings.contains(key)) { @@ -532,13 +533,14 @@ void BrowserWindow::createEncodingSubMenu(const QString &name, QStringList &code QHash BrowserWindow::saveUiState() { - saveSideBarWidth(); + saveSideBarSettings(); QHash state; state[QSL("LocationBarWidth")] = m_navigationToolbar->splitter()->sizes().at(0); state[QSL("WebSearchBarWidth")] = m_navigationToolbar->splitter()->sizes().at(1); state[QSL("SideBarWidth")] = m_sideBarWidth; state[QSL("WebViewWidth")] = m_webViewWidth; + state[QSL("SideBar")] = m_sideBarManager->activeSideBar(); return state; } @@ -550,6 +552,16 @@ void BrowserWindow::restoreUiState(const QHash &state) m_sideBarWidth = state.value(QSL("SideBarWidth"), 250).toInt(); m_webViewWidth = state.value(QSL("WebViewWidth"), 2000).toInt(); + if (m_sideBar) { + m_mainSplitter->setSizes({m_sideBarWidth, m_webViewWidth}); + } + + const QString activeSideBar = state.value(QSL("SideBar")).toString(); + if (activeSideBar.isEmpty() && m_sideBar) { + m_sideBar->close(); + } else { + m_sideBarManager->showSideBar(activeSideBar, false); + } } void BrowserWindow::loadSettings() @@ -572,7 +584,6 @@ void BrowserWindow::loadSettings() bool showBookmarksToolbar = settings.value("showBookmarksToolbar", true).toBool(); bool showNavigationToolbar = settings.value("showNavigationToolbar", true).toBool(); bool showMenuBar = settings.value("showMenubar", false).toBool(); - const QString activeSideBar = settings.value("SideBar", "None").toString(); // Make sure both menubar and navigationbar are not hidden // Fixes #781 @@ -615,8 +626,6 @@ void BrowserWindow::loadSettings() m_navigationToolbar->buttonForward()->setVisible(showBackForwardButtons); m_navigationToolbar->webSearchBar()->setVisible(showWebSearchBar); m_navigationToolbar->buttonAddTab()->setVisible(showAddTabButton); - - m_sideBarManager->showSideBar(activeSideBar, false); } void BrowserWindow::goForward() @@ -833,21 +842,21 @@ SideBar* BrowserWindow::addSideBar() m_mainSplitter->insertWidget(0, m_sideBar.data()); m_mainSplitter->setCollapsible(0, false); - m_mainSplitter->setSizes(QList() << m_sideBarWidth << m_webViewWidth); + m_mainSplitter->setSizes({m_sideBarWidth, m_webViewWidth}); return m_sideBar.data(); } -void BrowserWindow::saveSideBarWidth() +void BrowserWindow::saveSideBarSettings() { - if (!m_sideBar) { - return; + if (m_sideBar) { + // That +1 is important here, without it, the sidebar width would + // decrease by 1 pixel every close + m_sideBarWidth = m_mainSplitter->sizes().at(0) + 1; + m_webViewWidth = width() - m_sideBarWidth; } - // That +1 is important here, without it, the sidebar width would - // decrease by 1 pixel every close - m_sideBarWidth = m_mainSplitter->sizes().at(0) + 1; - m_webViewWidth = width() - m_sideBarWidth; + Settings().setValue(QSL("Browser-View-Settings/SideBar"), m_sideBarManager->activeSideBar()); } void BrowserWindow::toggleShowMenubar() diff --git a/src/lib/app/browserwindow.h b/src/lib/app/browserwindow.h index 712861f50..c385343de 100644 --- a/src/lib/app/browserwindow.h +++ b/src/lib/app/browserwindow.h @@ -101,7 +101,7 @@ public: void removeActions(const QList &actions); SideBar* addSideBar(); - void saveSideBarWidth(); + void saveSideBarSettings(); TabbedWebView* weView() const; TabbedWebView* weView(int index) const; diff --git a/src/lib/sidebar/sidebar.cpp b/src/lib/sidebar/sidebar.cpp index 8c6957328..f30eae3b8 100644 --- a/src/lib/sidebar/sidebar.cpp +++ b/src/lib/sidebar/sidebar.cpp @@ -1,6 +1,6 @@ /* ============================================================ * Falkon - Qt web browser -* Copyright (C) 2010-2014 David Rosca +* Copyright (C) 2010-2018 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -92,6 +92,11 @@ SideBarManager::SideBarManager(BrowserWindow* parent) { } +QString SideBarManager::activeSideBar() const +{ + return m_activeBar; +} + void SideBarManager::createMenu(QMenu* menu) { m_window->removeActions(menu->actions()); @@ -145,7 +150,7 @@ void SideBarManager::slotShowSideBar() void SideBarManager::showSideBar(const QString &id, bool toggle) { - if (id == QLatin1String("None")) { + if (id.isEmpty() || id == QL1S("None")) { return; } @@ -158,10 +163,8 @@ void SideBarManager::showSideBar(const QString &id, bool toggle) return; } m_sideBar.data()->close(); - m_activeBar = "None"; - - Settings settings; - settings.setValue("Browser-View-Settings/SideBar", m_activeBar); + m_activeBar.clear(); + m_window->saveSideBarSettings(); return; } @@ -183,9 +186,7 @@ void SideBarManager::showSideBar(const QString &id, bool toggle) } m_activeBar = id; - - Settings settings; - settings.setValue("Browser-View-Settings/SideBar", m_activeBar); + m_window->saveSideBarSettings(); } void SideBarManager::sideBarRemoved(const QString &id) @@ -201,10 +202,7 @@ void SideBarManager::closeSideBar() if (mApp->isClosing()) { return; } - m_activeBar = "None"; - - Settings settings; - settings.setValue("Browser-View-Settings/SideBar", m_activeBar); - m_window->saveSideBarWidth(); + m_activeBar.clear(); + m_window->saveSideBarSettings(); } diff --git a/src/lib/sidebar/sidebar.h b/src/lib/sidebar/sidebar.h index 519b00be9..8ed603d5a 100644 --- a/src/lib/sidebar/sidebar.h +++ b/src/lib/sidebar/sidebar.h @@ -1,6 +1,6 @@ /* ============================================================ * Falkon - Qt web browser -* Copyright (C) 2010-2014 David Rosca +* Copyright (C) 2010-2018 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,6 +60,8 @@ class FALKON_EXPORT SideBarManager : public QObject public: explicit SideBarManager(BrowserWindow* parent); + QString activeSideBar() const; + void createMenu(QMenu* menu); void showSideBar(const QString &id, bool toggle = true);