X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Flayout.c;h=031923a447097eee5be5aaf3145345580de922d1;hb=b92397ef12626a0d09cb4c9e853d0c038104110f;hp=c2b17ce62fd1e81172d230bc15be34df5b86b80c;hpb=fc783c19e6f6b9bed1c533dc158f1b0aa32d25c1;p=src%2Fagl-compositor.git diff --git a/src/layout.c b/src/layout.c index c2b17ce..031923a 100644 --- a/src/layout.c +++ b/src/layout.c @@ -201,6 +201,28 @@ ivi_layout_activate_complete(struct ivi_output *output, weston_view_update_transform(view); } + if (output_has_black_curtain(output)) { + if (!output->background) { + weston_log("Found that we have no background surface " + "for output %s. Using black curtain as background\n", + output->output->name); + + struct weston_view *ev = + output->fullscreen_view.fs->view; + + /* use the black curtain as background when we have + * none added by the shell client. */ + weston_layer_entry_remove(&ev->layer_link); + weston_layer_entry_insert(&ivi->normal.view_list, + &ev->layer_link); + weston_view_geometry_dirty(ev); + weston_surface_damage(ev->surface); + } else { + remove_black_curtain(output); + } + } + + weston_view_set_output(view, woutput); weston_view_set_position(view, woutput->x + output->area.x, @@ -218,6 +240,7 @@ ivi_layout_activate_complete(struct ivi_output *output, } output->previous_active = output->active; output->active = surf; + surf->current_completed_output = output; weston_layer_entry_insert(&ivi->normal.view_list, &view->layer_link); weston_view_geometry_dirty(view); @@ -303,11 +326,43 @@ ivi_layout_add_to_hidden_layer(struct ivi_surface *surf, app_id, ivi_layout_get_surface_role_name(surf), ivi_output->area.width, ivi_output->area.height); + surf->hidden_layer_output = ivi_output; + weston_view_set_output(ev, ivi_output->output); + weston_layer_entry_insert(&ivi->hidden.view_list, &ev->layer_link); + weston_log("Placed app_id %s, type %s in hidden layer on output %s\n", + app_id, ivi_layout_get_surface_role_name(surf), + ivi_output->output->name); + + weston_compositor_schedule_repaint(ivi->compositor); + return; + } + + /* we might have another output to activate */ + if (surf->hidden_layer_output && + surf->hidden_layer_output != ivi_output) { + weston_layer_entry_remove(&ev->layer_link); + + if (ivi_output->area.width != surf->hidden_layer_output->area.width && + ivi_output->area.height != surf->hidden_layer_output->area.height) { + weston_desktop_surface_set_maximized(dsurf, true); + weston_desktop_surface_set_size(dsurf, + ivi_output->area.width, + ivi_output->area.height); + } + + weston_log("Setting app_id %s, role %s, set to maximized (%dx%d)\n", + app_id, ivi_layout_get_surface_role_name(surf), + ivi_output->area.width, ivi_output->area.height); + + surf->hidden_layer_output = ivi_output; weston_view_set_output(ev, ivi_output->output); weston_layer_entry_insert(&ivi->hidden.view_list, &ev->layer_link); - weston_log("Placed app_id %s, type %s in hidden layer\n", - app_id, ivi_layout_get_surface_role_name(surf)); + weston_log("Placed app_id %s, type %s in hidden layer on output %s\n", + app_id, ivi_layout_get_surface_role_name(surf), + ivi_output->output->name); } + + weston_compositor_schedule_repaint(ivi->compositor); } void @@ -351,7 +406,7 @@ ivi_layout_desktop_committed(struct ivi_surface *surf) if (r_output) { struct weston_view *view = r_output->fullscreen_view.fs->view; if (view->is_mapped || view->surface->is_mapped) - remove_black_surface(r_output); + remove_black_curtain(r_output); } @@ -419,9 +474,11 @@ ivi_layout_desktop_committed(struct ivi_surface *surf) return; if (app_id) { - weston_log("Surface with app_id %s, role %s activating by default\n", - weston_desktop_surface_get_app_id(surf->dsurface), - ivi_layout_get_surface_role_name(surf)); + weston_log("Surface with app_id %s, role %s activating " + "by default on output %s\n", + weston_desktop_surface_get_app_id(surf->dsurface), + ivi_layout_get_surface_role_name(surf), + output->output->name); ivi_layout_activate(output, app_id); } return; @@ -796,8 +853,8 @@ ivi_layout_activate_by_surf(struct ivi_output *output, struct ivi_surface *surf) } #ifdef AGL_COMP_DEBUG - weston_log("Activating app_id %s, type %s\n", app_id, - ivi_layout_get_surface_role_name(surf)); + weston_log("Activating app_id %s, type %s, on output %s\n", app_id, + ivi_layout_get_surface_role_name(surf), output->output->name); #endif if (surf->role == IVI_SURFACE_ROLE_POPUP) {