layout: Fix-up the positions when placing the pop-up/dialog 36/26836/3
authorMarius Vlad <marius.vlad@collabora.com>
Fri, 5 Nov 2021 17:38:21 +0000 (19:38 +0200)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tue, 9 Nov 2021 12:08:29 +0000 (12:08 +0000)
Turns out we weren't accounting for the initial position (of the output)
as to derive the correct positioning of thew view/surface. This uses the
output x and y value and together with the values supplied by the user
to result in correct placement.

Bug-AGL: SPEC-4127

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: I38f0bb9051d4650283cfa483936b121a6d136ca6

src/layout.c

index 4ffcb16..ff1713b 100644 (file)
@@ -555,6 +555,15 @@ ivi_layout_split_committed(struct ivi_surface *surface)
                        app_id, ivi_layout_get_surface_role_name(surface), output->name);
 }
 
+static void
+ivi_compute_popup_position(const struct weston_output *output, struct weston_view *view,
+                          int initial_x, int initial_y, int *new_x, int *new_y)
+{
+       *new_x = output->x + initial_x;
+       *new_y = output->y + initial_y;
+}
+
+
 void
 ivi_layout_popup_committed(struct ivi_surface *surface)
 {
@@ -566,6 +575,8 @@ ivi_layout_popup_committed(struct ivi_surface *surface)
                weston_desktop_surface_get_surface(dsurface);
        const char *app_id = weston_desktop_surface_get_app_id(dsurface);
 
+       int new_x, new_y;
+
        struct ivi_output *output = surface->popup.output;
        struct weston_output *woutput = output->output;
 
@@ -582,7 +593,10 @@ ivi_layout_popup_committed(struct ivi_surface *surface)
        assert(surface->role == IVI_SURFACE_ROLE_POPUP);
 
        weston_view_set_output(view, woutput);
-       weston_view_set_position(view, surface->popup.x, surface->popup.y);
+
+       ivi_compute_popup_position(woutput, view,
+                                  surface->popup.x, surface->popup.y, &new_x, &new_y);
+       weston_view_set_position(view, new_x, new_y);
 
        /* only clip the pop-up dialog window if we have a valid
         * width and height being passed on. Users might not want to have one