fix(linux/vdisplay): kwin virtual output ships the cursor as metadata too
Same trap as the Mutter backend: zkde_screencast pointer mode 2 (embedded) never delivers SPA_META_Cursor, starving both the cursor channel and the encoder blend. Mode 4 (metadata) feeds both. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -56,9 +56,12 @@ use zkde::zkde_screencast_stream_unstable_v1::{
|
|||||||
};
|
};
|
||||||
use zkde::zkde_screencast_unstable_v1::ZkdeScreencastUnstableV1 as Screencast;
|
use zkde::zkde_screencast_unstable_v1::ZkdeScreencastUnstableV1 as Screencast;
|
||||||
|
|
||||||
/// `pointer` attachment mode (the protocol enum): render the cursor into the stream so the
|
/// `pointer` attachment mode (the protocol enum): ship the cursor as `SPA_META_Cursor` metadata
|
||||||
/// remote sees it move with injected input.
|
/// (the capturer always negotiates the meta). Embedded mode would leave the cursor channel with
|
||||||
const POINTER_EMBEDDED: u32 = 2;
|
/// nothing to forward AND the encoder blend with nothing to composite — the same trap as the
|
||||||
|
/// Mutter backend's cursor-mode (see mutter.rs `CURSOR_METADATA`); the blend draws the pointer
|
||||||
|
/// for sessions where the client does not render it itself.
|
||||||
|
const POINTER_METADATA: u32 = 4;
|
||||||
|
|
||||||
/// The name we give the created output; KWin exposes it to output-management as `Virtual-<name>`.
|
/// The name we give the created output; KWin exposes it to output-management as `Virtual-<name>`.
|
||||||
const VOUT_NAME: &str = "punktfunk";
|
const VOUT_NAME: &str = "punktfunk";
|
||||||
@@ -642,13 +645,13 @@ fn run(
|
|||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
// Create the virtual output sized to the client, cursor composited into the stream.
|
// Create the virtual output sized to the client, cursor riding as stream metadata.
|
||||||
let stream = screencast.stream_virtual_output(
|
let stream = screencast.stream_virtual_output(
|
||||||
name.to_string(),
|
name.to_string(),
|
||||||
width as i32,
|
width as i32,
|
||||||
height as i32,
|
height as i32,
|
||||||
1.0, // scale (logical == physical)
|
1.0, // scale (logical == physical)
|
||||||
POINTER_EMBEDDED,
|
POINTER_METADATA,
|
||||||
&qh,
|
&qh,
|
||||||
(),
|
(),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user