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,
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;
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) {
- struct weston_desktop_surface *dsurf = ivisurf->dsurface;
-
if (ivisurf->orientation != AGL_SHELL_TILE_ORIENTATION_NONE) {
- weston_log("%s() resetting apps to none orientation\n", __func__);
- ivisurf->orientation = AGL_SHELL_TILE_ORIENTATION_NONE;
- weston_desktop_surface_set_orientation(dsurf, ivisurf->orientation);
+ found_ivi_surf = ivisurf;
+ found_split_surface = true;
+ break;
}
}
+
+ if (!found_split_surface)
+ return;
+
+ 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;
+
+ if (!weston_view_is_mapped(ev))
+ weston_view_update_transform(ev);
+ else
+ weston_layer_entry_remove(&ev->layer_link);
+
+ ev->is_mapped = true;
+ ev->surface->is_mapped = true;
+ output->previous_active->mapped = true;
+
+ weston_view_set_output(ev, woutput);
+
+ 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, false);
+
+ if (output->active == ivisurf) {
+ output->active = output->previous_active;
+ }
+ }
+
+ _ivi_set_shell_surface_split(ivisurf, NULL, 0,
+ AGL_SHELL_TILE_ORIENTATION_NONE, false, false);
}
void
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);