core/compositor: Fix dropping cursor buffer data early (#9700)

This commit is contained in:
Lee Bousfield
2025-03-22 17:06:02 -05:00
committed by GitHub
parent 6ab5a0befb
commit fdb7ca6c8f
2 changed files with 4 additions and 2 deletions

View File

@@ -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();
}

View File

@@ -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();
}