X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Flayout.c;h=a2cf48c8b96803506709da5d5b0f3f75024d28e4;hb=16d8d1af63ea1bbdaa9223cbf3e01cb6698f1eb0;hp=7a2c9ac5e8e02ba098b036f8dab96e80f8be6bf9;hpb=3d6199ee18b4807a82c4181d829052029d1ba350;p=src%2Fagl-compositor.git diff --git a/src/layout.c b/src/layout.c index 7a2c9ac..a2cf48c 100644 --- a/src/layout.c +++ b/src/layout.c @@ -286,7 +286,8 @@ ivi_layout_activate_complete(struct ivi_output *output, woutput->y + output->area.y); /* reset any previous orientation */ - if (surf->orientation != AGL_SHELL_TILE_ORIENTATION_NONE) { + if (surf->orientation != AGL_SHELL_TILE_ORIENTATION_NONE && + !surf->sticky) { weston_log("%s() resetting itself to none orientation\n", __func__); surf->orientation = AGL_SHELL_TILE_ORIENTATION_NONE; weston_desktop_surface_set_orientation(surf->dsurface, @@ -317,7 +318,9 @@ ivi_layout_activate_complete(struct ivi_output *output, if (output->active) { /* keep the background surface mapped at all times */ - if (output->active->role != IVI_SURFACE_ROLE_BACKGROUND) { + if (output->active->role != IVI_SURFACE_ROLE_BACKGROUND && + !output->active->sticky) { + output->active->view->is_mapped = false; output->active->view->surface->is_mapped = false; @@ -1036,11 +1039,13 @@ void ivi_layout_reset_split_surfaces(struct ivi_compositor *ivi) { struct ivi_surface *ivisurf; + struct ivi_surface *found_ivi_surf = NULL; bool found_split_surface = false; struct ivi_output *output = NULL; wl_list_for_each(ivisurf, &ivi->surfaces, link) { if (ivisurf->orientation != AGL_SHELL_TILE_ORIENTATION_NONE) { + found_ivi_surf = ivisurf; found_split_surface = true; break; } @@ -1049,7 +1054,11 @@ ivi_layout_reset_split_surfaces(struct ivi_compositor *ivi) if (!found_split_surface) return; - output = ivisurf->current_completed_output; + output = found_ivi_surf->current_completed_output; + + if (found_ivi_surf->sticky) + return; + if (output->previous_active && output->background != output->previous_active) { struct weston_view *ev = output->previous_active->view; struct weston_output *woutput = output->output; @@ -1068,7 +1077,7 @@ ivi_layout_reset_split_surfaces(struct ivi_compositor *ivi) weston_layer_entry_insert(&ivi->normal.view_list, &ev->layer_link); _ivi_set_shell_surface_split(output->previous_active, NULL, 0, - AGL_SHELL_TILE_ORIENTATION_NONE, false); + AGL_SHELL_TILE_ORIENTATION_NONE, false, false); if (output->active == ivisurf) { output->active = output->previous_active; @@ -1076,7 +1085,7 @@ ivi_layout_reset_split_surfaces(struct ivi_compositor *ivi) } _ivi_set_shell_surface_split(ivisurf, NULL, 0, - AGL_SHELL_TILE_ORIENTATION_NONE, false); + AGL_SHELL_TILE_ORIENTATION_NONE, false, false); } void @@ -1128,6 +1137,12 @@ ivi_layout_activate_by_surf(struct ivi_output *output, struct ivi_surface *surf) return; } + if (surf->sticky && surf->role == IVI_SURFACE_ROLE_TILE) { + weston_log("Application %s is already active on output %s (split role)\n", + app_id, output->output->name); + return; + } + if (ivi_layout_surface_is_split_or_fullscreen(surf)) { weston_log("Application %s is fullscreen or split on output %s\n", app_id, output->output->name);