meson.build: Increase the build version of agl-compositor
[src/agl-compositor.git] / src / policy.h
1 #ifndef POLICY_H
2 #define POLICY_H
3
4 #include "ivi-compositor.h"
5 #include "agl-shell-policy-server-protocol.h"
6
7 struct ivi_policy;
8
9 struct state_event {
10         uint32_t value;
11         char *name;
12         struct wl_list link;    /* ivi_policy::states or ivi_policy::events */
13 };
14
15 struct ivi_a_policy {
16         struct ivi_policy *policy;
17
18         char *app_id;
19         uint32_t state;
20         uint32_t event;
21         uint32_t timeout;
22         struct ivi_output *output;
23         struct wl_event_source *timer;
24
25         struct wl_list link;    /* ivi_policy::ivi_policies */
26 };
27
28 struct ivi_policy_api {
29         size_t struct_size;
30
31         bool (*surface_create)(struct ivi_surface *surf, void *user_data);
32         bool (*surface_commited)(struct ivi_surface *surf, void *user_data);
33         bool (*surface_activate)(struct ivi_surface *surf, void *user_data);
34
35         bool (*policy_rule_allow_to_add)(void *user_data);
36         void (*policy_rule_try_event)(struct ivi_a_policy *a_policy);
37 };
38
39 struct ivi_policy {
40         struct ivi_compositor *ivi;
41         struct ivi_policy_api api;
42         void *user_data;
43
44         /* used to inject policies back to the compositor */
45         struct wl_global *policy_shell;
46         struct wl_resource *resource;
47         struct wl_list policies;        /* ivi_policy_inject::link */
48
49         uint32_t current_state;
50         uint32_t previous_state;
51         bool state_change_in_progress;
52
53         struct wl_list states;  /* state_event::link */
54         struct wl_list events;  /* state_event::link */
55
56         struct wl_listener listener_check_policies;
57         struct wl_signal signal_state_change;
58 };
59
60
61 struct ivi_policy *
62 ivi_policy_create(struct ivi_compositor *compositor,
63                   const struct ivi_policy_api *api, void *user_data);
64 void
65 ivi_policy_destroy(struct ivi_policy *ivi_policy);
66
67 int
68 ivi_policy_init(struct ivi_compositor *ivi);
69
70 #endif