X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Flayout.c;h=031923a447097eee5be5aaf3145345580de922d1;hb=b92397ef12626a0d09cb4c9e853d0c038104110f;hp=5d24a1fc0c6373b94c8ed5267cedd22f5e82efb1;hpb=2cc479fd8f3e53265efa093ca52e6e6f6b0faea7;p=src%2Fagl-compositor.git diff --git a/src/layout.c b/src/layout.c index 5d24a1f..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); @@ -285,14 +308,6 @@ ivi_layout_add_to_hidden_layer(struct ivi_surface *surf, struct ivi_compositor *ivi = surf->ivi; const char *app_id = weston_desktop_surface_get_app_id(dsurf); - 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); /* * If the view isn't mapped, we put it onto the hidden layer so it will * start receiving frame events, and will be able to act on our @@ -302,11 +317,52 @@ ivi_layout_add_to_hidden_layer(struct ivi_surface *surf, ev->is_mapped = true; ev->surface->is_mapped = true; + 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); + 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 on output %s\n", + app_id, ivi_layout_get_surface_role_name(surf), + ivi_output->output->name); + } + + weston_compositor_schedule_repaint(ivi->compositor); } void @@ -350,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); } @@ -418,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; @@ -795,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) {