summaryrefslogtreecommitdiffstats
path: root/src/layout.c
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2022-05-30 20:17:36 +0300
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2022-06-10 21:24:54 +0000
commit89440e0ffdfea2568d49e95465464cfc5c1d92ff (patch)
treeecdf52502e4f163fe2c0e9e3edc6ee6615cff9f5 /src/layout.c
parent89f67c5cf793bc69c7e5d5008829851069daa330 (diff)
layout: Keep track of popup state to handle activation
Upon deactivation explicitly mark the surface as unmapped, and keep track of the state using the enum already added for that. Further more, at remap, we need to perform a transform update, so this adds that as well. Together with these changes, we now can activate/hide the pop-up window correctly. Bug-AGL: SPEC-4412 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I4dda48dbda265d19df9c7fb4a25773afa8245cf3
Diffstat (limited to 'src/layout.c')
-rw-r--r--src/layout.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/layout.c b/src/layout.c
index dd4abb5..be65c6c 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -648,7 +648,7 @@ ivi_layout_popup_committed(struct ivi_surface *surface)
!surface->mapped)
return;
- if (surface->view->is_mapped)
+ if (surface->view->is_mapped || surface->state == HIDDEN)
return;
assert(surface->role == IVI_SURFACE_ROLE_POPUP);
@@ -658,6 +658,7 @@ ivi_layout_popup_committed(struct ivi_surface *surface)
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);
+ weston_view_update_transform(view);
/* 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
@@ -706,6 +707,7 @@ ivi_layout_popup_re_add(struct ivi_surface *surface)
if (!surface->mapped)
surface->mapped = true;
+ surface->state = NORMAL;
ivi_layout_popup_committed(surface);
}
@@ -924,6 +926,9 @@ ivi_layout_deactivate(struct ivi_compositor *ivi, const char *app_id)
} else if (surf->role == IVI_SURFACE_ROLE_POPUP) {
struct weston_view *view = surf->view;
+ weston_view_unmap(view);
+ surf->state = HIDDEN;
+
weston_layer_entry_remove(&view->layer_link);
weston_view_geometry_dirty(view);
weston_surface_damage(view->surface);