summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);