summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/desktop.c14
-rw-r--r--src/layout.c12
-rw-r--r--src/shell.c11
3 files changed, 34 insertions, 3 deletions
diff --git a/src/desktop.c b/src/desktop.c
index 37f4222..f28d0c9 100644
--- a/src/desktop.c
+++ b/src/desktop.c
@@ -366,10 +366,15 @@ skip_output_asignment:
weston_log("Removed surface %p, app_id %s, role %s\n", surface,
app_id, ivi_layout_get_surface_role_name(surface));
- if (app_id && output)
+ if (app_id && output) {
shell_advertise_app_state(output->ivi, app_id,
NULL, AGL_SHELL_DESKTOP_APP_STATE_DESTROYED);
+ if (wl_resource_get_version(output->ivi->shell_client.resource) >= AGL_SHELL_APP_STATE_SINCE_VERSION)
+ agl_shell_send_app_state(output->ivi->shell_client.resource,
+ app_id, AGL_SHELL_APP_STATE_TERMINATED);
+ }
+
wl_list_remove(&surface->link);
free(surface);
@@ -396,6 +401,13 @@ desktop_committed(struct weston_desktop_surface *dsurface,
wl_list_init(&surface->link);
ivi_check_pending_desktop_surface(surface);
surface->checked_pending = true;
+
+ /* we'll do it now at commit time, because we might not have an
+ * appid by the time we've created the weston_desktop_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_STARTED);
}
if (!surface->advertised_on_launch &&
diff --git a/src/layout.c b/src/layout.c
index 15858ff..25221e2 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -194,6 +194,7 @@ ivi_layout_activate_complete(struct ivi_output *output,
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);
@@ -281,8 +282,13 @@ ivi_layout_activate_complete(struct ivi_output *output,
}
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 *
@@ -1031,4 +1037,8 @@ ivi_layout_deactivate(struct ivi_compositor *ivi, const char *app_id)
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);
}
diff --git a/src/shell.c b/src/shell.c
index 4ab5e42..f7ec6a2 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1052,10 +1052,19 @@ shell_ready(struct wl_client *client, struct wl_resource *shell_res)
}
wl_list_for_each_safe(surface, tmp, &ivi->pending_surfaces, link) {
+ const char *app_id;
+
wl_list_remove(&surface->link);
wl_list_init(&surface->link);
ivi_check_pending_desktop_surface(surface);
surface->checked_pending = true;
+ app_id = weston_desktop_surface_get_app_id(surface->dsurface);
+
+ if (app_id &&
+ 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_STARTED);
}
}
@@ -1532,7 +1541,7 @@ int
ivi_shell_create_global(struct ivi_compositor *ivi)
{
ivi->agl_shell = wl_global_create(ivi->compositor->wl_display,
- &agl_shell_interface, 2,
+ &agl_shell_interface, 3,
ivi, bind_agl_shell);
if (!ivi->agl_shell) {
weston_log("Failed to create wayland global.\n");