From b4ae3794bc969bdb0d54f2e882f0ef36c51d7ed4 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Tue, 21 Apr 2020 12:41:31 +0300 Subject: policy: Add another hook for controlling the application state change event With the introduction of the events that notify regular applications of others' application state we require some way of controlling that. This patch adds another hook for controlling just that. Bug-AGL: SPEC-3269 Signed-off-by: Marius Vlad Change-Id: I2ade01eb5dfa454e360edd2e3943df91975da88f --- src/policy.h | 1 + src/shell.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/policy.h b/src/policy.h index 2499278..67da4aa 100644 --- a/src/policy.h +++ b/src/policy.h @@ -73,6 +73,7 @@ struct ivi_policy_api { bool (*surface_deactivate)(struct ivi_surface *surf, void *user_data); bool (*surface_activate_by_default)(struct ivi_surface *surf, void *user_data); + bool (*surface_advertise_state_change)(struct ivi_surface *surf, void *user_data); /** see also ivi_policy_add(). If set this will be executed before * adding a new policy rule */ diff --git a/src/shell.c b/src/shell.c index aa63b86..96f3c0a 100644 --- a/src/shell.c +++ b/src/shell.c @@ -24,6 +24,7 @@ */ #include "ivi-compositor.h" +#include "policy.h" #include #include @@ -517,12 +518,18 @@ shell_advertise_app_state(struct ivi_compositor *ivi, const char *app_id, struct desktop_client *dclient; uint32_t app_role; struct ivi_surface *surf = ivi_find_app(ivi, app_id); + struct ivi_policy *policy = ivi->policy; /* FIXME: should queue it here and see when binding agl-shell-desktop * if there are any to be sent */ if (!surf) return; + if (policy && policy->api.surface_advertise_state_change && + !policy->api.surface_advertise_state_change(surf, surf->ivi)) { + return; + } + app_role = surf->role; if (app_role == IVI_SURFACE_ROLE_POPUP) app_role = AGL_SHELL_DESKTOP_APP_ROLE_POPUP; -- cgit 1.2.3-korg