mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 13:11:13 +00:00
wayland: Calculate window position offset to give emulated root coordinates
This allows combo box popup windows to appear in the correct place. This is a workaround emulating root coordinates by calculating the offset for a chain of windows that that are relative to each other.
This commit is contained in:
parent
568b310eb3
commit
af8e4ee8e7
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user