policy: Add another hook for controlling the application state change 06/24406/3
authorMarius Vlad <marius.vlad@collabora.com>
Tue, 21 Apr 2020 09:41:31 +0000 (12:41 +0300)
committerMarius Vlad <marius.vlad@collabora.com>
Tue, 12 May 2020 18:56:35 +0000 (21:56 +0300)
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 <marius.vlad@collabora.com>
Change-Id: I2ade01eb5dfa454e360edd2e3943df91975da88f

src/policy.h
src/shell.c

index 2499278..67da4aa 100644 (file)
@@ -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  */
index aa63b86..96f3c0a 100644 (file)
@@ -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;