diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index 48859cd30f..ff3b92b550 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -874,6 +874,32 @@ gdk_window_wayland_get_geometry (GdkWindow *window, } } +void +_gdk_wayland_window_offset (GdkWindow *window, + gint *x_out, + gint *y_out) +{ + GdkWindowImplWayland *impl, *parent_impl; + GdkWindow *parent_window; + gint x_offset = 0, y_offset = 0; + + impl = GDK_WINDOW_IMPL_WAYLAND (window->impl); + + parent_window = impl->transient_for; + while (parent_window) + { + parent_impl = GDK_WINDOW_IMPL_WAYLAND (parent_window->impl); + + x_offset += window->x; + y_offset += window->y; + + parent_window = parent_impl->transient_for; + } + + *x_out = x_offset; + *y_out = y_offset; +} + static gint gdk_window_wayland_get_root_coords (GdkWindow *window, gint x, @@ -881,11 +907,12 @@ gdk_window_wayland_get_root_coords (GdkWindow *window, gint *root_x, gint *root_y) { - /* We can't do this. */ - if (root_x) - *root_x = 0; - if (root_y) - *root_y = 0; + gint x_offset, y_offset; + + _gdk_wayland_window_offset (window, &x_offset, &y_offset); + + *root_x = x_offset + x; + *root_y = y_offset + y; return 1; }