wayland: Use helper to translate to real parent window geometry

Use a helper to translate a coordinate from non-real GdkWindow parent
to window geometry coordinate space of the real GdkWindow parent,
meaning the coordinate space of the GdkWindow of the parent used as a
xdg_popup parent where (0, 0) is inside of the shadow margin.

https://bugzilla.gnome.org/show_bug.cgi?id=771117
This commit is contained in:
Jonas Ådahl 2016-09-12 18:39:06 +08:00
parent bc6630bb7d
commit 74d237df41

View File

@ -1626,6 +1626,19 @@ get_real_parent_and_translate (GdkWindow *window,
return parent;
}
static void
translate_to_real_parent_window_geometry (GdkWindow *window,
gint *x,
gint *y)
{
GdkWindow *parent;
parent = get_real_parent_and_translate (window, x, y);
*x -= parent->shadow_left;
*y -= parent->shadow_top;
}
static void
calculate_popup_rect (GdkWindow *window,
GdkGravity rect_anchor,
@ -1879,7 +1892,6 @@ create_dynamic_positioner (GdkWindow *window)
GdkWaylandDisplay *display =
GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
struct zxdg_positioner_v6 *positioner;
GdkWindow *parent;
GdkRectangle geometry;
enum zxdg_positioner_v6_anchor anchor;
enum zxdg_positioner_v6_anchor gravity;
@ -1894,15 +1906,15 @@ create_dynamic_positioner (GdkWindow *window)
real_anchor_rect_x = impl->pending_move_to_rect.rect.x;
real_anchor_rect_y = impl->pending_move_to_rect.rect.y;
parent = get_real_parent_and_translate (window,
&real_anchor_rect_x,
&real_anchor_rect_y);
translate_to_real_parent_window_geometry (window,
&real_anchor_rect_x,
&real_anchor_rect_y);
anchor_rect_width = impl->pending_move_to_rect.rect.width;
anchor_rect_height = impl->pending_move_to_rect.rect.height;
zxdg_positioner_v6_set_anchor_rect (positioner,
real_anchor_rect_x - parent->shadow_left,
real_anchor_rect_y - parent->shadow_top,
real_anchor_rect_x,
real_anchor_rect_y,
anchor_rect_width,
anchor_rect_height);