Skip to content

clutter/text: Make update_cursor_location() operate in stage coordinates

Until now we would clutter_input_focus_set_cursor_location with cursor-rectangle-in-physical-pixels + actor-location-in-stage-coordinates. But those use different scaling factors so it only got the right answer when the framebuffer scale was 1.0.

This directly determines the geometry of the invisible dummy cursor in gnome-shell ibusCandidatePopup.js:

  panelService.connect('set-cursor-location', (ps, x, y, w, h) => {
      this._setDummyCursorGeometry(x, y, w, h); 
  }); 

And because it's invisible it wasn't obvious that it was wrong until you enable CLUTTER_PAINT=damage-region and you can see its ghost at the wrong offset and scale.

So now we clutter_input_focus_set_cursor_location using purely unscaled stage coordinates. And CLUTTER_PAINT=damage-region shows that gnome-shell's _dummyCursor is placed precisely over the visible cursor.

Fixes: gnome-shell#3399 (closed) and probably other IBus issues that arise when using framebuffer scaling.

Edited by Daniel van Vugt

Merge request reports