gtkimcontextwayland: Add native surface offset to input coordinates
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 16 Mar 2022 08:55:20 +0000 (09:55 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 16 Mar 2022 08:57:42 +0000 (09:57 +0100)
We were missing the surface offset (e.g. shadows) at the time of expressing
the text caret location in surface coordinates. Add this offset so the
coordinates are as expected by the compositor.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4668
gtk/gtkimcontextwayland.c

index 60e1e466bf9c068f1671e6391f3d4a4df5ca23ae..e0259d018204459a0ed15c89e233976a7720a9bc 100644 (file)
@@ -357,7 +357,7 @@ notify_cursor_location (GtkIMContextWayland *context)
 {
   GtkIMContextWaylandGlobal *global;
   cairo_rectangle_int_t rect;
-  double x, y;
+  double x, y, sx, sy;
 
   global = gtk_im_context_wayland_get_global (context);
   if (global == NULL)
@@ -369,8 +369,11 @@ notify_cursor_location (GtkIMContextWayland *context)
                                     rect.x, rect.y,
                                     &x, &y);
 
-  rect.x = x;
-  rect.y = y;
+  gtk_native_get_surface_transform (gtk_widget_get_native (context->widget),
+                                    &sx, &sy);
+
+  rect.x = x + sx;
+  rect.y = y + sy;
   zwp_text_input_v3_set_cursor_rectangle (global->text_input,
                                           rect.x, rect.y,
                                           rect.width, rect.height);