+ struct ivi_output *output = ivi_layout_get_output_from_surface(surface);
+
+ /* special corner-case, pending_surfaces which are never activated or
+ * being assigned an output might land here so just remove the surface */
+ if (output == NULL && surface->role == IVI_SURFACE_ROLE_NONE)
+ goto skip_output_asignment;
+
+ assert(output != NULL);
+
+ /* resize the active surface to the original size */
+ if (surface->role == IVI_SURFACE_ROLE_SPLIT_H ||
+ surface->role == IVI_SURFACE_ROLE_SPLIT_V) {
+ if (output && output->active) {
+ ivi_layout_desktop_resize(output->active, output->area_saved);
+ }
+ /* restore the area back so we can re-use it again if needed */
+ output->area = output->area_saved;
+ }
+
+ /* reset the active surface as well */
+ if (output && output->active && output->active == surface) {
+ output->active->view->is_mapped = false;
+ output->active->view->surface->is_mapped = false;
+
+ weston_layer_entry_remove(&output->active->view->layer_link);
+ output->active = NULL;
+ }
+
+ /* check if there's a last 'remote' surface and insert a black
+ * surface view if there's no background set for that output
+ */
+ if (desktop_surface_check_last_remote_surfaces(output->ivi,
+ IVI_SURFACE_ROLE_REMOTE))
+ if (!output->background)
+ insert_black_surface(output);
+
+ if (desktop_surface_check_last_remote_surfaces(output->ivi,
+ IVI_SURFACE_ROLE_DESKTOP))
+ if (!output->background)
+ insert_black_surface(output);