void
ivi_layout_init(struct ivi_compositor *ivi, struct ivi_output *output)
{
- ivi_background_init(ivi, output);
+ bool use_default_area = true;
- output->area.x = 0;
- output->area.y = 0;
- output->area.width = output->output->width;
- output->area.height = output->output->height;
+ ivi_background_init(ivi, output);
- ivi_panel_init(ivi, output, output->top);
- ivi_panel_init(ivi, output, output->bottom);
- ivi_panel_init(ivi, output, output->left);
- ivi_panel_init(ivi, output, output->right);
+ if (output->area_activation.width ||
+ output->area_activation.height ||
+ output->area_activation.x ||
+ output->area_activation.y) {
+ /* Sanity check target area is within output bounds */
+ if ((output->area_activation.x + output->area_activation.width) < output->output->width ||
+ (output->area_activation.y + output->area_activation.height) < output->output->height) {
+ weston_log("Using specified area for output %s, ignoring panels\n",
+ output->name);
+ output->area.x = output->area_activation.x;
+ output->area.y = output->area_activation.y;
+ output->area.width = output->area_activation.width;
+ output->area.height = output->area_activation.height;
+ use_default_area = false;
+ } else {
+ weston_log("Invalid activation-area position for output %s, ignoring\n",
+ output->name);
+ }
+ }
+ if (use_default_area) {
+ output->area.x = 0;
+ output->area.y = 0;
+ output->area.width = output->output->width;
+ output->area.height = output->output->height;
+
+ ivi_panel_init(ivi, output, output->top);
+ ivi_panel_init(ivi, output, output->bottom);
+ ivi_panel_init(ivi, output, output->left);
+ ivi_panel_init(ivi, output, output->right);
+ }
weston_compositor_schedule_repaint(ivi->compositor);
}
weston_view_set_output(view, woutput);
- weston_view_set_position(view,
- woutput->x + output->area.x,
- woutput->y + output->area.y);
+
+ if (surf->role != IVI_SURFACE_ROLE_BACKGROUND)
+ weston_view_set_position(view,
+ woutput->x + output->area.x,
+ woutput->y + output->area.y);
view->is_mapped = true;
surf->mapped = true;
view->surface->is_mapped = true;
if (output->active) {
- output->active->view->is_mapped = false;
- output->active->view->surface->is_mapped = false;
+ /* keep the background surface mapped at all times */
+ if (output->active->role != IVI_SURFACE_ROLE_BACKGROUND) {
+ output->active->view->is_mapped = false;
+ output->active->view->surface->is_mapped = false;
- weston_layer_entry_remove(&output->active->view->layer_link);
+ weston_layer_entry_remove(&output->active->view->layer_link);
+ }
}
output->previous_active = output->active;
output->active = surf;
return;
}
+ /* the background surface is already "maximized" so we don't need to
+ * add to the hidden layer */
+ if (surf->role == IVI_SURFACE_ROLE_BACKGROUND) {
+ ivi_layout_activate_complete(output, surf);
+ return;
+ }
+
ivi_layout_add_to_hidden_layer(surf, output);
}