summaryrefslogtreecommitdiffstats
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
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
-rw-r--r--src/ivi-compositor.h1
-rw-r--r--src/layout.c7
2 files changed, 7 insertions, 1 deletions
diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h
index 5137d19..78d1acd 100644
--- a/src/ivi-compositor.h
+++ b/src/ivi-compositor.h
@@ -271,6 +271,7 @@ struct ivi_surface {
NORMAL,
RESIZING,
FULLSCREEN,
+ HIDDEN,
} state;
enum ivi_surface_role role;
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);