From 141bca90e16073086124e542cdb0b91556fe06c5 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 6 Dec 2017 10:20:52 +0100 Subject: [PATCH] Windows QPA: Fix handling of override cursors Override cursors were not restored when nested or in a dual monitor setups. The default cursor stored in QWindowsCursor::m_overriddenCursor was clobbered by subsequent calls to QWindowsCursor::setOverrideCursor(). This caused for example the wait cursor to remain active when switching to Help Mode in Qt Creator. Add a check preventing that. Make the variable static so that it is shared between the cursors of multiple screens. Amends b05d1c2ebfebf0f427a92668c0a7b177d0952012. Task-number: QTBUG-65001 Change-Id: Iead5804d317f73dedd78d22c1c85c62b5349ab83 Reviewed-by: Oliver Wolff --- src/plugins/platforms/windows/qwindowscursor.cpp | 6 +++++- src/plugins/platforms/windows/qwindowscursor.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/windows/qwindowscursor.cpp b/src/plugins/platforms/windows/qwindowscursor.cpp index e7ba08b7197..1da7de7451a 100644 --- a/src/plugins/platforms/windows/qwindowscursor.cpp +++ b/src/plugins/platforms/windows/qwindowscursor.cpp @@ -548,6 +548,8 @@ CursorHandlePtr QWindowsCursor::standardWindowCursor(Qt::CursorShape shape) return it != m_standardCursorCache.end() ? it.value() : CursorHandlePtr(new CursorHandle); } +HCURSOR QWindowsCursor::m_overriddenCursor = nullptr; + /*! \brief Return cached pixmap cursor or create new one. */ @@ -623,7 +625,9 @@ void QWindowsCursor::setOverrideCursor(const QCursor &cursor) { const CursorHandlePtr wcursor = cursorHandle(cursor); if (wcursor->handle()) { - m_overriddenCursor = SetCursor(wcursor->handle()); + const HCURSOR previousCursor = SetCursor(wcursor->handle()); + if (m_overriddenCursor == nullptr) + m_overriddenCursor = previousCursor; } else { qWarning("%s: Unable to obtain system cursor for %d", __FUNCTION__, cursor.shape()); diff --git a/src/plugins/platforms/windows/qwindowscursor.h b/src/plugins/platforms/windows/qwindowscursor.h index 9aa9523ac80..28c7e88a6eb 100644 --- a/src/plugins/platforms/windows/qwindowscursor.h +++ b/src/plugins/platforms/windows/qwindowscursor.h @@ -141,7 +141,7 @@ private: mutable QPixmap m_linkDragCursor; mutable QPixmap m_ignoreDragCursor; - HCURSOR m_overriddenCursor = nullptr; + static HCURSOR m_overriddenCursor; }; QT_END_NAMESPACE