struct weston_view *view = surf->view;
struct weston_seat *wseat = get_ivi_shell_weston_first_seat(ivi);
struct ivi_shell_seat *ivi_seat = get_ivi_shell_seat(wseat);
+ const char *app_id = weston_desktop_surface_get_app_id(surf->dsurface);
if (weston_view_is_mapped(view)) {
weston_layer_entry_remove(&view->layer_link);
surf->mapped = true;
view->surface->is_mapped = true;
+ /* handle a movement from one output to another */
+ if (surf->current_completed_output &&
+ surf->current_completed_output != output) {
+
+ /* we're migrating the same surface but to another output */
+ if (surf->current_completed_output->active == surf) {
+ struct weston_view *ev =
+ surf->current_completed_output->active->view;
+
+ weston_layer_entry_remove(&ev->layer_link);
+ surf->current_completed_output->previous_active =
+ surf->current_completed_output->active;
+ surf->current_completed_output->active = NULL;
+
+ /* damage all possible outputs to avoid stale views */
+ weston_compositor_damage_all(ivi->compositor);
+ }
+ }
+
+
if (output->active) {
output->active->view->is_mapped = false;
output->active->view->surface->is_mapped = false;
}
weston_log("Activation completed for app_id %s, role %s, output %s\n",
- weston_desktop_surface_get_app_id(surf->dsurface),
+ app_id,
ivi_layout_get_surface_role_name(surf), output->name);
+
+ if (wl_resource_get_version(ivi->shell_client.resource) >= AGL_SHELL_APP_STATE_SINCE_VERSION)
+ agl_shell_send_app_state(ivi->shell_client.resource,
+ app_id, AGL_SHELL_APP_STATE_ACTIVATED);
+
}
struct ivi_output *
/* do not 're'-activate surfaces that are split or active */
if (surf == output->active ||
- ivi_layout_surface_is_split_or_fullscreen(surf))
+ ivi_layout_surface_is_split_or_fullscreen(surf)) {
+ weston_log("Application %s is already active on output %s\n",
+ app_id, output->output->name);
return;
+ }
if (surf->role == IVI_SURFACE_ROLE_REMOTE) {
struct ivi_output *remote_output =
weston_view_geometry_dirty(view);
weston_surface_damage(view->surface);
}
+
+ if (wl_resource_get_version(ivi->shell_client.resource) >= AGL_SHELL_APP_STATE_SINCE_VERSION)
+ agl_shell_send_app_state(ivi->shell_client.resource, app_id,
+ AGL_SHELL_APP_STATE_DEACTIVATED);
}