summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/qwindowscursor.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2017-12-06 10:20:52 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2017-12-12 20:20:13 +0000
commit141bca90e16073086124e542cdb0b91556fe06c5 (patch)
tree1e15cbf1aac79515c21c0dd0508e6475f0749514 /src/plugins/platforms/windows/qwindowscursor.cpp
parente55c7974db42a2c5bc5e6a8a1ef88ea5602ae266 (diff)
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 <oliver.wolff@qt.io>
Diffstat (limited to 'src/plugins/platforms/windows/qwindowscursor.cpp')
-rw-r--r--src/plugins/platforms/windows/qwindowscursor.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/plugins/platforms/windows/qwindowscursor.cpp b/src/plugins/platforms/windows/qwindowscursor.cpp
index e7ba08b719..1da7de7451 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());