summaryrefslogtreecommitdiff
path: root/src/protocols/core
diff options
context:
space:
mode:
authorLee Bousfield <ljbousfield@gmail.com>2025-03-22 17:06:02 -0500
committerGitHub <noreply@github.com>2025-03-22 23:06:02 +0100
commitfdb7ca6c8fa3611ab04eccf129a515efd9852c73 (patch)
tree2aa8ab45056a777515b81d366d5e61d93db107fa /src/protocols/core
parent6ab5a0befb45e90eb45b8d6582e68d13147297dc (diff)
core/compositor: Fix dropping cursor buffer data early (#9700)
Diffstat (limited to 'src/protocols/core')
-rw-r--r--src/protocols/core/Compositor.cpp4
-rw-r--r--src/protocols/core/Seat.cpp2
2 files changed, 4 insertions, 2 deletions
diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp
index 5462fbe9..2dd374a8 100644
--- a/src/protocols/core/Compositor.cpp
+++ b/src/protocols/core/Compositor.cpp
@@ -12,6 +12,7 @@
#include "../DRMSyncobj.hpp"
#include "../../render/Renderer.hpp"
#include "config/ConfigValue.hpp"
+#include "protocols/types/SurfaceRole.hpp"
#include "render/Texture.hpp"
#include <cstring>
@@ -445,7 +446,8 @@ void CWLSurfaceResource::commitPendingState(SSurfaceState& state) {
// release the buffer if it's synchronous (SHM) as update() has done everything thats needed
// so we can let the app know we're done.
- if (current.buffer && current.buffer->buffer && current.buffer->buffer->isSynchronous())
+ // if it doesn't have a role, we can't release it yet, in case it gets turned into a cursor.
+ if (current.buffer && current.buffer->buffer && current.buffer->buffer->isSynchronous() && role->role() != SURFACE_ROLE_UNASSIGNED)
dropCurrentBuffer();
}
diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp
index 1f07a15e..5bdb95f0 100644
--- a/src/protocols/core/Seat.cpp
+++ b/src/protocols/core/Seat.cpp
@@ -124,7 +124,7 @@ CWLPointerResource::CWLPointerResource(SP<CWlPointer> resource_, SP<CWLSeatResou
return;
}
- if (surfResource) {
+ if (surfResource && surfResource->role->role() != SURFACE_ROLE_CURSOR) {
surfResource->role = makeShared<CCursorSurfaceRole>();
surfResource->updateCursorShm();
}