compositor: Properly dispose of fullscreen views at shutdown
[src/agl-compositor.git] / src / shell.c
index efcb102..c6cae10 100644 (file)
@@ -638,11 +638,6 @@ ivi_check_pending_surface_desktop(struct ivi_surface *surface,
        const char *app_id =
                weston_desktop_surface_get_app_id(surface->dsurface);
 
-       if (!app_id) {
-               *role = IVI_SURFACE_ROLE_NONE;
-               return;
-       }
-
        role_pending_list = &ivi->popup_pending_apps;
        wl_list_for_each(p_popup, role_pending_list, link) {
                if (!strcmp(app_id, p_popup->app_id)) {
@@ -784,18 +779,11 @@ ivi_shell_destroy_views_on_layer(struct weston_layer *layer)
        }
 }
 
-static void
-ivi_shell_destroy_views_on_fullscreen_layer(struct ivi_compositor *ivi)
-{
-       struct ivi_output *ivi_output;
-
-       wl_list_for_each(ivi_output, &ivi->outputs, link)
-               weston_surface_destroy(ivi_output->fullscreen_view.fs->view->surface);
-}
-
 void
 ivi_shell_finalize(struct ivi_compositor *ivi)
 {
+       struct ivi_output *output;
+
        ivi_shell_destroy_views_on_layer(&ivi->hidden);
        weston_layer_fini(&ivi->hidden);
 
@@ -811,7 +799,12 @@ ivi_shell_finalize(struct ivi_compositor *ivi)
        ivi_shell_destroy_views_on_layer(&ivi->popup);
        weston_layer_fini(&ivi->popup);
 
-       ivi_shell_destroy_views_on_fullscreen_layer(ivi);
+       wl_list_for_each(output, &ivi->outputs, link) {
+               if (output->fullscreen_view.fs->view) {
+                       weston_surface_destroy(output->fullscreen_view.fs->view->surface);
+                       output->fullscreen_view.fs->view = NULL;
+               }
+       }
        weston_layer_fini(&ivi->fullscreen);
 }