Screencasts invoked by RecordVirtual() do not respect cursor parameter.
Tested version: mutter/main, g-s/main, but it is very likely that all versions are affected since the introduction of RecordVirtual()
in GNOME 40.
Reproducible: always
g-r-d specifies in screencasts the META_SCREEN_CAST_CURSOR_MODE_METADATA
setting.
With this setting, screencasts do not include the cursor in frames. Instead, the frame data + the cursor data are received in two distinct buffer, allowing to set the cursor image on the client side to propagate a smooth experience even if it wouldn't be (also no cursor lags due to latency).
This works fine with RecordMonitor()
, but with RecordVirtual()
mutter always blits the cursor image ontop of all frames, regardless of the cursor setting.
This is especially visible with mstsc as client:
As you can see in the screenshot, the cursor in mstsc did itself not change. This means, that g-r-d never received a PipeWire buffer containing cursor data.
What can be seen too in this screenshot is that the cursor is painted on top of the frame.
CC: @jadahl