diff options
-rw-r--r-- | src/ivi-compositor.h | 1 | ||||
-rw-r--r-- | src/layout.c | 7 |
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); |