Revert "Fix cursor offset on wayland in virtual machines (#2011066)"
This reverts commit 6804a051f1
.
epel9
parent
63160bff07
commit
fecb005224
@ -1,65 +0,0 @@
|
|||||||
From e413264fab376f043d4dce73fc528cac6c3466a0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Adam Williamson <awilliam@redhat.com>
|
|
||||||
Date: Wed, 6 Oct 2021 10:20:58 -0700
|
|
||||||
Subject: [PATCH] Fix wrong cursor hotspot under Wayland on VMs
|
|
||||||
|
|
||||||
This backports the key parts of 998bbf4 to the 5.22 branch,
|
|
||||||
where the code is substantially different. It solves a problem
|
|
||||||
where the click point is slightly offset from the position
|
|
||||||
indicated by the displayed cursor when running on Wayland in
|
|
||||||
many VM configurations (e.g. qemu with qxl or virtio GPU).
|
|
||||||
|
|
||||||
Signed-off-by: Adam Williamson <awilliam@redhat.com>
|
|
||||||
---
|
|
||||||
src/plugins/platforms/drm/drm_output.cpp | 12 +++++++++---
|
|
||||||
src/plugins/platforms/drm/drm_output.h | 2 +-
|
|
||||||
2 files changed, 10 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/plugins/platforms/drm/drm_output.cpp b/src/plugins/platforms/drm/drm_output.cpp
|
|
||||||
index 917bb857d..7ee387219 100644
|
|
||||||
--- a/src/plugins/platforms/drm/drm_output.cpp
|
|
||||||
+++ b/src/plugins/platforms/drm/drm_output.cpp
|
|
||||||
@@ -102,10 +102,15 @@ bool DrmOutput::hideCursor()
|
|
||||||
return drmModeSetCursor(m_gpu->fd(), m_crtc->id(), 0, 0, 0) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-bool DrmOutput::showCursor(DrmDumbBuffer *c)
|
|
||||||
+bool DrmOutput::showCursor(DrmDumbBuffer *c, const QPoint &hotspot)
|
|
||||||
{
|
|
||||||
const QSize &s = c->size();
|
|
||||||
- if (drmModeSetCursor(m_gpu->fd(), m_crtc->id(), c->handle(), s.width(), s.height()) == 0) {
|
|
||||||
+ int ret = drmModeSetCursor2(m_gpu->fd(), m_crtc->id(), c->handle(), s.width(), s.height(), hotspot.x(), hotspot.y());
|
|
||||||
+ if (ret == ENOTSUP) {
|
|
||||||
+ // for NVIDIA case that does not support drmModeSetCursor2
|
|
||||||
+ ret = drmModeSetCursor(m_gpu->fd(), m_crtc->id(), c->handle(), s.width(), s.height());
|
|
||||||
+ }
|
|
||||||
+ if (ret == 0) {
|
|
||||||
if (RenderLoopPrivate::get(m_renderLoop)->presentMode == RenderLoopPrivate::SyncMode::Adaptive
|
|
||||||
&& isCursorVisible()) {
|
|
||||||
m_renderLoop->scheduleRepaint();
|
|
||||||
@@ -122,7 +127,8 @@ bool DrmOutput::showCursor()
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
- const bool ret = showCursor(m_cursor[m_cursorIndex].data());
|
|
||||||
+ const Cursor * const cursor = Cursors::self()->currentCursor();
|
|
||||||
+ const bool ret = showCursor(m_cursor[m_cursorIndex].data(), logicalToNativeMatrix(cursor->rect(), scale(), transform()).map(cursor->hotspot()));
|
|
||||||
if (!ret) {
|
|
||||||
qCDebug(KWIN_DRM) << "DrmOutput::showCursor(DrmDumbBuffer) failed";
|
|
||||||
return ret;
|
|
||||||
diff --git a/src/plugins/platforms/drm/drm_output.h b/src/plugins/platforms/drm/drm_output.h
|
|
||||||
index 1f89f9064..af46c88a0 100644
|
|
||||||
--- a/src/plugins/platforms/drm/drm_output.h
|
|
||||||
+++ b/src/plugins/platforms/drm/drm_output.h
|
|
||||||
@@ -45,7 +45,7 @@ public:
|
|
||||||
///queues deleting the output after a page flip has completed.
|
|
||||||
void teardown();
|
|
||||||
void releaseGbm();
|
|
||||||
- bool showCursor(DrmDumbBuffer *buffer);
|
|
||||||
+ bool showCursor(DrmDumbBuffer *buffer, const QPoint &hotspot);
|
|
||||||
bool showCursor();
|
|
||||||
bool hideCursor();
|
|
||||||
bool updateCursor();
|
|
||||||
--
|
|
||||||
2.32.0
|
|
||||||
|
|
Loading…
Reference in new issue