From dc131ddfee2d34e011cf5ca78d6aa31b788f695b Mon Sep 17 00:00:00 2001 From: David Rosca Date: Sat, 17 Mar 2018 13:55:35 +0100 Subject: [PATCH] NavigationBar: Fix syncing back/forward buttons state with web history BUG: 391331 FIXED-IN: 3.0.1 --- src/lib/app/browserwindow.cpp | 5 ----- src/lib/app/browserwindow.h | 1 - src/lib/navigation/navigationbar.cpp | 32 ++++++++++++++++------------ src/lib/navigation/navigationbar.h | 4 ++-- src/lib/tabwidget/tabwidget.cpp | 1 - src/lib/webtab/tabbedwebview.cpp | 10 --------- src/lib/webtab/tabbedwebview.h | 1 - 7 files changed, 20 insertions(+), 34 deletions(-) diff --git a/src/lib/app/browserwindow.cpp b/src/lib/app/browserwindow.cpp index bcc90ea95..706ad261d 100644 --- a/src/lib/app/browserwindow.cpp +++ b/src/lib/app/browserwindow.cpp @@ -967,11 +967,6 @@ void BrowserWindow::toggleWebInspector() } } -void BrowserWindow::refreshHistory() -{ - m_navigationToolbar->refreshHistory(); -} - void BrowserWindow::currentTabChanged() { TabbedWebView* view = weView(); diff --git a/src/lib/app/browserwindow.h b/src/lib/app/browserwindow.h index 8ec64d0d6..b023a06b0 100644 --- a/src/lib/app/browserwindow.h +++ b/src/lib/app/browserwindow.h @@ -170,7 +170,6 @@ private Q_SLOTS: void loadSettings(); void postLaunch(); - void refreshHistory(); void webSearch(); void searchOnPage(); void changeEncoding(); diff --git a/src/lib/navigation/navigationbar.cpp b/src/lib/navigation/navigationbar.cpp index 9e3f61567..305677faf 100644 --- a/src/lib/navigation/navigationbar.cpp +++ b/src/lib/navigation/navigationbar.cpp @@ -225,6 +225,24 @@ void NavigationBar::setCurrentView(TabbedWebView *view) data.button->setWebView(view); } } + + if (!view) { + return; + } + + auto updateButton = [](ToolButton *button, QAction *action) { + button->setEnabled(action->isEnabled()); + }; + auto updateBackButton = std::bind(updateButton, m_buttonBack, view->pageAction(QWebEnginePage::Back)); + auto updateForwardButton = std::bind(updateButton, m_buttonForward, view->pageAction(QWebEnginePage::Forward)); + + updateBackButton(); + updateForwardButton(); + + disconnect(m_backConnection); + disconnect(m_forwardConnection); + m_backConnection = connect(view->pageAction(QWebEnginePage::Back), &QAction::changed, this, updateBackButton); + m_forwardConnection = connect(view->pageAction(QWebEnginePage::Forward), &QAction::changed, this, updateForwardButton); } void NavigationBar::showReloadButton() @@ -431,7 +449,6 @@ void NavigationBar::clearHistory() { QWebEngineHistory* history = m_window->weView()->page()->history(); history->clear(); - refreshHistory(); } void NavigationBar::contextMenuRequested(const QPoint &pos) @@ -599,17 +616,6 @@ void NavigationBar::loadHistoryIndexInNewTab(int index) loadHistoryItemInNewTab(history->itemAt(index)); } -void NavigationBar::refreshHistory() -{ - if (mApp->isClosing() || !m_window->weView()) { - return; - } - - QWebEngineHistory* history = m_window->weView()->page()->history(); - m_buttonBack->setEnabled(history->canGoBack()); - m_buttonForward->setEnabled(history->canGoForward()); -} - void NavigationBar::stop() { m_window->action(QSL("View/Stop"))->trigger(); @@ -657,8 +663,6 @@ void NavigationBar::goForwardInNewTab() void NavigationBar::loadHistoryItem(const QWebEngineHistoryItem &item) { m_window->weView()->page()->history()->goToItem(item); - - refreshHistory(); } void NavigationBar::loadHistoryItemInNewTab(const QWebEngineHistoryItem &item) diff --git a/src/lib/navigation/navigationbar.h b/src/lib/navigation/navigationbar.h index e14789196..0f412afe3 100644 --- a/src/lib/navigation/navigationbar.h +++ b/src/lib/navigation/navigationbar.h @@ -73,8 +73,6 @@ public: void removeToolButton(AbstractButtonInterface *button); public Q_SLOTS: - void refreshHistory(); - void stop(); void reload(); void goBack(); @@ -114,6 +112,8 @@ private: Menu *m_menuTools; ToolButton* m_supMenu; ToolButton *m_exitFullscreen; + QMetaObject::Connection m_backConnection; + QMetaObject::Connection m_forwardConnection; struct WidgetData { QString id; diff --git a/src/lib/tabwidget/tabwidget.cpp b/src/lib/tabwidget/tabwidget.cpp index 6a884baee..1d3b3f6e3 100644 --- a/src/lib/tabwidget/tabwidget.cpp +++ b/src/lib/tabwidget/tabwidget.cpp @@ -93,7 +93,6 @@ TabWidget::TabWidget(BrowserWindow *window, QWidget *parent) m_tabBar = new TabBar(m_window, this); setTabBar(m_tabBar); - connect(this, SIGNAL(currentChanged(int)), m_window, SLOT(refreshHistory())); connect(this, &TabWidget::changed, mApp, &MainApplication::changeOccurred); connect(this, &TabStackedWidget::pinStateChanged, this, &TabWidget::changed); diff --git a/src/lib/webtab/tabbedwebview.cpp b/src/lib/webtab/tabbedwebview.cpp index 6ecca2a35..60bd40f47 100644 --- a/src/lib/webtab/tabbedwebview.cpp +++ b/src/lib/webtab/tabbedwebview.cpp @@ -46,7 +46,6 @@ TabbedWebView::TabbedWebView(WebTab* webTab) connect(this, SIGNAL(loadStarted()), this, SLOT(slotLoadStarted())); connect(this, SIGNAL(loadProgress(int)), this, SLOT(slotLoadProgress(int))); connect(this, SIGNAL(loadFinished(bool)), this, SLOT(slotLoadFinished())); - connect(this, SIGNAL(urlChanged(QUrl)), this, SLOT(urlChanged(QUrl))); } void TabbedWebView::setPage(WebPage* page) @@ -84,15 +83,6 @@ QString TabbedWebView::getIp() const return m_currentIp; } -void TabbedWebView::urlChanged(const QUrl &url) -{ - Q_UNUSED(url) - - if (m_webTab->isCurrentTab() && m_window) { - m_window->navigationBar()->refreshHistory(); - } -} - void TabbedWebView::slotLoadProgress(int prog) { Q_UNUSED(prog) diff --git a/src/lib/webtab/tabbedwebview.h b/src/lib/webtab/tabbedwebview.h index 4461fe18c..9ee0414a7 100644 --- a/src/lib/webtab/tabbedwebview.h +++ b/src/lib/webtab/tabbedwebview.h @@ -67,7 +67,6 @@ private Q_SLOTS: void slotLoadStarted(); void slotLoadFinished(); void slotLoadProgress(int prog); - void urlChanged(const QUrl &url); void linkHovered(const QString &link); void setIp(const QHostInfo &info);