wayland: Transform moved_to_rect result properly

The result of move_to_rect, received from the xdg_popup.configure
event, needs to be translated to the correct coordinate space; that is
from real parent window geometry to coordinates relative to the gdk
window set as transient-for.

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

View File

@ -1639,6 +1639,21 @@ translate_to_real_parent_window_geometry (GdkWindow *window,
*y -= parent->shadow_top;
}
static void
translate_from_real_parent_window_geometry (GdkWindow *window,
gint *x,
gint *y)
{
GdkWindow *parent;
gint dx = 0;
gint dy = 0;
parent = get_real_parent_and_translate (window, &dx, &dy);
*x -= dx - parent->shadow_left;
*y -= dy - parent->shadow_top;
}
static void
calculate_popup_rect (GdkWindow *window,
GdkGravity rect_anchor,
@ -1822,24 +1837,20 @@ calculate_moved_to_rect_result (GdkWindow *window,
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkRectangle best_rect;
GdkRectangle geometry;
x += impl->transient_for->shadow_left;
y += impl->transient_for->shadow_top;
translate_from_real_parent_window_geometry (window, &x, &y);
*final_rect = (GdkRectangle) {
.x = x,
.y = y,
.width = width,
.height = height,
};
calculate_popup_rect (window,
impl->pending_move_to_rect.rect_anchor,
impl->pending_move_to_rect.window_anchor,
&best_rect);
gdk_wayland_window_get_window_geometry (window, &geometry);
*final_rect = (GdkRectangle) {
.x = x,
.y = y,
.width = geometry.width,
.height = geometry.height
};
*flipped_rect = best_rect;
if (x != best_rect.x &&