Skip to content

magnifier: Properly hide the second (real) cursor

Jonas Dreßler requested to merge verdre/gnome-shell:fix-magnifier into main

The magnifier uses a PointerWatcher (which is based on a simple timeout source) to update the zoom region based on the current mouse cursor position 60 times a second. When updating the zoom region, it would also hide mutters cursor using meta_cursor_tracker_set_pointer_visible().

Since a few months, mutter has decoupled the handling of input events from the monitor refresh rate though, which means it's no longer guaranteed that the cursor changes only 60 times a second (on higher refresh rate monitors it actually never was). This means mutter might show the cursor more often than 60 times a second, while we hide it only 60 times a second, leading to a flickering second cursor.

To fix this, implement the cursor-hiding by listening to MetaCursorTrackers visibility-changed signal, and immediately hiding the cursor again when it's shown.

Merge request reports