From a1bb539c50a70eb194ce76125fde70ca87160fd0 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 13 Jun 2022 11:01:16 +0200 Subject: [PATCH] LiteHtmlHelpViewer: Handle mouse back/forward buttons Fixes: QTCREATORBUG-25168 Change-Id: I856743040e81a0164e666f14ea7efd10f208f865 Reviewed-by: Eike Ziller --- src/plugins/help/litehtmlhelpviewer.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/plugins/help/litehtmlhelpviewer.cpp b/src/plugins/help/litehtmlhelpviewer.cpp index 61139aacbd1..4e1c697bed2 100644 --- a/src/plugins/help/litehtmlhelpviewer.cpp +++ b/src/plugins/help/litehtmlhelpviewer.cpp @@ -205,11 +205,14 @@ void LiteHtmlHelpViewer::backward() { goBackward(1); } + void LiteHtmlHelpViewer::goForward(int count) { + const int steps = qMin(count, int(m_forwardItems.size())); + if (steps == 0) + return; HistoryItem nextItem = currentHistoryItem(); - for (int i = 0; i < count; ++i) { - QTC_ASSERT(!m_forwardItems.empty(), return ); + for (int i = 0; i < steps; ++i) { m_backItems.push_back(nextItem); nextItem = m_forwardItems.front(); m_forwardItems.erase(m_forwardItems.begin()); @@ -221,9 +224,11 @@ void LiteHtmlHelpViewer::goForward(int count) void LiteHtmlHelpViewer::goBackward(int count) { + const int steps = qMin(count, int(m_backItems.size())); + if (steps == 0) + return; HistoryItem previousItem = currentHistoryItem(); - for (int i = 0; i < count; ++i) { - QTC_ASSERT(!m_backItems.empty(), return ); + for (int i = 0; i < steps; ++i) { m_forwardItems.insert(m_forwardItems.begin(), previousItem); previousItem = m_backItems.back(); m_backItems.pop_back(); @@ -247,6 +252,15 @@ bool LiteHtmlHelpViewer::eventFilter(QObject *src, QEvent *e) e->ignore(); return true; } + } else if (e->type() == QEvent::MouseButtonPress) { + auto me = static_cast(e); + if (me->button() == Qt::BackButton) { + goBackward(1); + return true; + } else if (me->button() == Qt::ForwardButton) { + goForward(1); + return true; + } } return HelpViewer::eventFilter(src, e); }