From 119ff05ccc7c43bb00116a7e08ac070b77f4c627 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 23 Aug 2017 16:53:00 +0200 Subject: [PATCH] Help: Make restoring override cursor more robust Some help backends are not too consistent in how they send started and finished signals (QtWebEngine I'm looking at you), so make restoring the override cursor more robust in the base. As long as the backend reports that it is finished, guarantee that all previous override cursors are restored. Also ensure override cursors are restored in case the viewer is destroyed. Task-number: QTCREATORBUG-17758 Change-Id: Icb1cd1eabfb232135a391a550d8e6719a74189eb Reviewed-by: Alexandru Croitor --- src/plugins/help/helpviewer.cpp | 16 +++++++++++++++- src/plugins/help/helpviewer.h | 5 ++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/plugins/help/helpviewer.cpp b/src/plugins/help/helpviewer.cpp index ebd4ae44c08..7a553000b23 100644 --- a/src/plugins/help/helpviewer.cpp +++ b/src/plugins/help/helpviewer.cpp @@ -85,6 +85,11 @@ HelpViewer::HelpViewer(QWidget *parent) { } +HelpViewer::~HelpViewer() +{ + restoreOverrideCursor(); +} + void HelpViewer::setActionVisible(Action action, bool visible) { if (visible) @@ -156,16 +161,25 @@ void HelpViewer::home() void HelpViewer::slotLoadStarted() { + ++m_loadOverrideStack; QGuiApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); } void HelpViewer::slotLoadFinished() { - QGuiApplication::restoreOverrideCursor(); + restoreOverrideCursor(); emit sourceChanged(source()); emit loadFinished(); } +void HelpViewer::restoreOverrideCursor() +{ + while (m_loadOverrideStack > 0) { + --m_loadOverrideStack; + QGuiApplication::restoreOverrideCursor(); + } +} + bool HelpViewer::handleForwardBackwardMouseButtons(QMouseEvent *event) { if (event->button() == Qt::XButton1) { diff --git a/src/plugins/help/helpviewer.h b/src/plugins/help/helpviewer.h index 488bb0bc5e2..c98e8dbbfb4 100644 --- a/src/plugins/help/helpviewer.h +++ b/src/plugins/help/helpviewer.h @@ -49,7 +49,7 @@ public: Q_DECLARE_FLAGS(Actions, Action) explicit HelpViewer(QWidget *parent = 0); - ~HelpViewer() { } + ~HelpViewer(); virtual QFont viewerFont() const = 0; virtual void setViewerFont(const QFont &font) = 0; @@ -109,7 +109,10 @@ protected: void slotLoadStarted(); void slotLoadFinished(); + void restoreOverrideCursor(); + Actions m_visibleActions = 0; + int m_loadOverrideStack = 0; }; } // namespace Internal