summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/policy.h1
-rw-r--r--src/shell.c7
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;