weston_view_set_output(view, woutput);
weston_view_set_position(view, woutput->x, woutput->y);
-#ifdef AGL_COMP_DEBUG
- weston_log("(background) position view %p, x %d, y %d\n", view,
- woutput->x, woutput->y);
-#endif
+ weston_log("(background) position view %p, x %d, y %d, on output %s\n", view,
+ woutput->x, woutput->y, output->name);
view->is_mapped = true;
view->surface->is_mapped = true;
dsurface = panel->dsurface;
view = panel->view;
geom = weston_desktop_surface_get_geometry(dsurface);
-#ifdef AGL_COMP_DEBUG
+
weston_log("(panel) geom.width %d, geom.height %d, geom.x %d, geom.y %d\n",
geom.width, geom.height, geom.x, geom.y);
-#endif
+
switch (panel->panel.edge) {
case AGL_SHELL_EDGE_TOP:
output->area.y += geom.height;
weston_view_set_output(view, woutput);
weston_view_set_position(view, x, y);
-#ifdef AGL_COMP_DEBUG
+
weston_log("(panel) edge %d position view %p, x %d, y %d\n",
panel->panel.edge, view, x, y);
-#endif
-
- /* this is necessary for cases we already mapped it desktop_committed()
- * but we not running the older qtwayland, so we still have a chance
- * for this to run at the next test */
- if (view->surface->is_mapped) {
- weston_layer_entry_remove(&view->layer_link);
-
- view->is_mapped = false;
- view->surface->is_mapped = false;
- }
-
- /* give ivi_layout_panel_committed() a chance to map the view/surface
- * instead */
- if ((geom.width == geom.height && geom.width == 0) &&
- (geom.x == geom.y && geom.x == 0) &&
- panel->panel.edge != AGL_SHELL_EDGE_TOP)
- return;
view->is_mapped = true;
view->surface->is_mapped = true;
-#ifdef AGL_COMP_DEBUG
- weston_log("panel type %d inited\n", panel->panel.edge);
-#endif
+
+ weston_log("panel type %d inited on output %s\n", panel->panel.edge,
+ output->name);
+
weston_layer_entry_insert(&ivi->panel.view_list, &view->layer_link);
}
surf->desktop.pending_output = NULL;
}
- weston_log("Activation completed for app_id %s, role %s\n",
+ weston_log("Activation completed for app_id %s, role %s, output %s\n",
weston_desktop_surface_get_app_id(surf->dsurface),
- ivi_layout_get_surface_role_name(surf));
+ ivi_layout_get_surface_role_name(surf), output->name);
}
-static struct ivi_output *
-ivi_layout_find_app_id(const char *app_id, struct ivi_compositor *ivi)
+struct ivi_output *
+ivi_layout_find_with_app_id(const char *app_id, struct ivi_compositor *ivi)
{
struct ivi_output *out;
return;
/* check first if there aren't any outputs being set */
- r_output = ivi_layout_find_app_id(app_id, surf->ivi);
+ r_output = ivi_layout_find_with_app_id(app_id, surf->ivi);
+
+ 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);
+ }
+
/* try finding an output with a background and use that */
if (!r_output)
struct weston_output *woutput = output->output;
struct weston_view *view = surface->view;
- struct weston_geometry geom;
if (surface->view->is_mapped)
return;
- geom = weston_desktop_surface_get_geometry(dsurface);
- weston_log("(popup) geom x %d, y %d, width %d, height %d\n", geom.x, geom.y,
- geom.width, geom.height);
-
assert(surface->role == IVI_SURFACE_ROLE_POPUP);
weston_view_set_output(view, woutput);
- if (surface->popup.x || surface->popup.y)
- weston_view_set_position(view, surface->popup.x, surface->popup.y);
- else
- weston_view_set_position(view, geom.x, geom.y);
+ weston_view_set_position(view, surface->popup.x, surface->popup.y);
+
+ /* only clip the pop-up dialog window if we have a valid
+ * width and height being passed on. Users might not want to have one
+ * set-up so only enfore it is really passed on. */
+ if (surface->popup.bb.width > 0 && surface->popup.bb.height > 0)
+ weston_view_set_mask(view, surface->popup.bb.x, surface->popup.bb.y,
+ surface->popup.bb.width, surface->popup.bb.height);
+
weston_layer_entry_insert(&ivi->popup.view_list, &view->layer_link);
weston_view_update_transform(view);
ivi_layout_popup_committed(surface);
}
-void
-ivi_layout_panel_committed(struct ivi_surface *surface)
-{
- struct ivi_compositor *ivi = surface->ivi;
- struct ivi_output *output = surface->bg.output;
- struct weston_output *woutput = output->output;
- struct weston_desktop_surface *dsurface = surface->dsurface;
- struct weston_surface *wsurface =
- weston_desktop_surface_get_surface(dsurface);
- struct weston_geometry geom;
- int x = woutput->x;
- int y = woutput->y;
-
- assert(surface->role == IVI_SURFACE_ROLE_PANEL);
-
- /*
- * If the desktop_surface geometry is not set and the panel is not a
- * top one, we'll give this a chance to run, as some qtwayland version
- * seem to have a 'problem', where the panel initilization part will
- * have a desktop surface with 0 as geometry for *all* its members
- * (width/height). Doing that will result in the panel not being
- * displayed at all.
- *
- * Later versions of qtwayland do have the correct window geometry for
- * the desktop surface so the weston_surface is already mapped in
- * ivi_panel_init().
- */
- if (wsurface->is_mapped)
- return;
-
- geom = weston_desktop_surface_get_geometry(dsurface);
-
-#ifdef AGL_COMP_DEBUG
- weston_log("geom.width %d, geom.height %d, geom.x %d, geom.y %d\n",
- geom.width, geom.height, geom.x, geom.y);
-#endif
-
- switch (surface->panel.edge) {
- case AGL_SHELL_EDGE_TOP:
- /* Do nothing */
- break;
- case AGL_SHELL_EDGE_BOTTOM:
- y += woutput->height - geom.height;
- break;
- case AGL_SHELL_EDGE_LEFT:
- /* Do nothing */
- break;
- case AGL_SHELL_EDGE_RIGHT:
- x += woutput->width - geom.width;
- break;
- }
-#ifndef AGL_COMP_DEBUG
- weston_log("panel type %d commited\n", surface->panel.edge);
-#endif
-
- weston_view_set_output(surface->view, woutput);
- weston_view_set_position(surface->view, x, y);
- weston_layer_entry_insert(&ivi->panel.view_list,
- &surface->view->layer_link);
-
- weston_view_update_transform(surface->view);
- weston_view_schedule_repaint(surface->view);
-
- wsurface->is_mapped = true;
- surface->view->is_mapped = true;
-}
-
static bool
ivi_layout_surface_is_split_or_fullscreen(struct ivi_surface *surf)
{
ivi_layout_surface_is_split_or_fullscreen(surf))
return;
+ if (surf->role == IVI_SURFACE_ROLE_REMOTE) {
+ struct ivi_output *remote_output =
+ ivi_layout_find_with_app_id(app_id, ivi);
+
+ /* if already active on a remote output do not
+ * attempt to activate it again */
+ if (remote_output && remote_output->active == surf)
+ return;
+ }
+
dsurf = surf->dsurface;
view = surf->view;