diff options
-rw-r--r-- | src/policy.h | 1 | ||||
-rw-r--r-- | src/shell.c | 7 |
2 files changed, 8 insertions, 0 deletions
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 <assert.h> #include <errno.h> @@ -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; |