policy: Init policy framework
[src/agl-compositor.git] / src / policy.h
diff --git a/src/policy.h b/src/policy.h
new file mode 100644 (file)
index 0000000..bccc5ef
--- /dev/null
@@ -0,0 +1,70 @@
+#ifndef POLICY_H
+#define POLICY_H
+
+#include "ivi-compositor.h"
+#include "agl-shell-policy-server-protocol.h"
+
+struct ivi_policy;
+
+struct state_event {
+       uint32_t value;
+       char *name;
+       struct wl_list link;    /* ivi_policy::states or ivi_policy::events */
+};
+
+struct ivi_a_policy {
+       struct ivi_policy *policy;
+
+       char *app_id;
+       uint32_t state;
+       uint32_t event;
+       uint32_t timeout;
+       struct ivi_output *output;
+       struct wl_event_source *timer;
+
+       struct wl_list link;    /* ivi_policy::ivi_policies */
+};
+
+struct ivi_policy_api {
+       size_t struct_size;
+
+       bool (*surface_create)(struct ivi_surface *surf, void *user_data);
+       bool (*surface_commited)(struct ivi_surface *surf, void *user_data);
+       bool (*surface_activate)(struct ivi_surface *surf, void *user_data);
+
+       bool (*policy_rule_allow_to_add)(void *user_data);
+       void (*policy_rule_try_event)(struct ivi_a_policy *a_policy);
+};
+
+struct ivi_policy {
+       struct ivi_compositor *ivi;
+       struct ivi_policy_api api;
+       void *user_data;
+
+       /* used to inject policies back to the compositor */
+       struct wl_global *policy_shell;
+       struct wl_resource *resource;
+       struct wl_list policies;        /* ivi_policy_inject::link */
+
+       uint32_t current_state;
+       uint32_t previous_state;
+       bool state_change_in_progress;
+
+       struct wl_list states;  /* state_event::link */
+       struct wl_list events;  /* state_event::link */
+
+       struct wl_listener listener_check_policies;
+       struct wl_signal signal_state_change;
+};
+
+
+struct ivi_policy *
+ivi_policy_create(struct ivi_compositor *compositor,
+                  const struct ivi_policy_api *api, void *user_data);
+void
+ivi_policy_destroy(struct ivi_policy *ivi_policy);
+
+int
+ivi_policy_init(struct ivi_compositor *ivi);
+
+#endif