mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 05:31:07 +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
|
static gint
|
||||||
gdk_window_wayland_get_root_coords (GdkWindow *window,
|
gdk_window_wayland_get_root_coords (GdkWindow *window,
|
||||||
gint x,
|
gint x,
|
||||||
@ -881,11 +907,12 @@ gdk_window_wayland_get_root_coords (GdkWindow *window,
|
|||||||
gint *root_x,
|
gint *root_x,
|
||||||
gint *root_y)
|
gint *root_y)
|
||||||
{
|
{
|
||||||
/* We can't do this. */
|
gint x_offset, y_offset;
|
||||||
if (root_x)
|
|
||||||
*root_x = 0;
|
_gdk_wayland_window_offset (window, &x_offset, &y_offset);
|
||||||
if (root_y)
|
|
||||||
*root_y = 0;
|
*root_x = x_offset + x;
|
||||||
|
*root_y = y_offset + y;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user