diff --git a/plugins/platforms/drm/drm_backend.cpp b/plugins/platforms/drm/drm_backend.cpp --- a/plugins/platforms/drm/drm_backend.cpp +++ b/plugins/platforms/drm/drm_backend.cpp @@ -677,6 +677,8 @@ void DrmBackend::updateCursor() { if (usesSoftwareCursor()) { + // trigger software cursor texture update + emit Cursor::self()->cursorChanged(); return; } if (isCursorHidden()) { @@ -702,7 +704,7 @@ void DrmBackend::doHideCursor() { - if (!m_cursorEnabled) { + if (!m_cursorEnabled || usesSoftwareCursor()) { return; } for (auto it = m_outputs.constBegin(); it != m_outputs.constEnd(); ++it) { @@ -712,7 +714,7 @@ void DrmBackend::moveCursor() { - if (!m_cursorEnabled || isCursorHidden()) { + if (!m_cursorEnabled || isCursorHidden() || usesSoftwareCursor()) { return; } for (auto it = m_outputs.constBegin(); it != m_outputs.constEnd(); ++it) { diff --git a/plugins/scenes/opengl/scene_opengl.cpp b/plugins/scenes/opengl/scene_opengl.cpp --- a/plugins/scenes/opengl/scene_opengl.cpp +++ b/plugins/scenes/opengl/scene_opengl.cpp @@ -596,8 +596,10 @@ */ void SceneOpenGL2::paintCursor() { - // don't paint if we use hardware cursor - if (!kwinApp()->platform()->usesSoftwareCursor()) { + // don't paint if we use hardware cursor or the cursor is hidden + if (!kwinApp()->platform()->usesSoftwareCursor() || + kwinApp()->platform()->isCursorHidden() || + kwinApp()->platform()->softwareCursor().isNull()) { return; }