fix(linux/capture): a stale id-0 cursor meta is 'no information', not 'hidden'
Mutter only rewrites a buffer's SPA_META_Cursor region when the cursor changed; recycled buffers between damage frames carry a stale id-0 meta. Treating id 0 as a hidden pointer flickered the client cursor off between hovers on-glass — per the SPA contract id 0 is 'invalid/no cursor info', so keep the last-known state (OBS's consumer does the same). A genuinely hidden pointer stops producing updates; the M3 relative-mode hint keeps its Windows CURSOR_SUPPRESSED source. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1417,8 +1417,12 @@ mod pipewire {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if id == 0 {
|
if id == 0 {
|
||||||
// Compositor reports no visible pointer (e.g. a game grabbed/hid it).
|
// SPA contract: id 0 = "no cursor information", NOT "cursor hidden". Mutter only
|
||||||
cursor.visible = false;
|
// REWRITES a buffer's meta region when the cursor changed, so recycled buffers
|
||||||
|
// between damage frames carry a stale id-0 meta — treating that as hidden flickered
|
||||||
|
// the cursor off between hovers (on-glass round 5). Keep the last-known state; a
|
||||||
|
// pointer that really left/hid simply stops producing updates. (The M3 hidden hint
|
||||||
|
// loses its Mutter signal — Windows has its own CURSOR_SUPPRESSED source.)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cursor.visible = true;
|
cursor.visible = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user