Currently, the Cursors::currentCursorChanged signal is wired to the updateCursor() function which calls xcb_xfixes_hide_cursor() or xcb_xfixes_show_cursor() depending if the cursor is hidden. However, the currentCursorChanged signal can be emitted if the cursor changed, e.g. a new pixmap attached, or its visibility status changes.
The zoom effect hides the pointer, but when user hovers ui elements, it will most likely change and result in more than one xcb_xfixes_hide_cursor() calls.
It appears like xcb_xfixes_hide_cursor() is implemented as a reference counter, i.e. if xcb_xfixes_hide_cursor() is called two times, then you must call xcb_xfixes_show_cursor() two times as well.
This change adds a dedicated signal to indicate whether the cursor is hidden to avoid calling xcb_xfixes_hide_cursor() multiple times while the screen is scaled.