test: adapt the change of policy request
[platform/core/uifw/libds-tizen.git] / src / keyrouter / keyrouter.h
index ffbb3cd..bd3faa9 100644 (file)
@@ -5,37 +5,59 @@
 #include <wayland-server.h>
 #include <tizen-extension-server-protocol.h>
 
+#include "libds-tizen/keyrouter.h"
+
 #define KEYROUTER_MAX_KEYS 512
 
-struct ds_tizen_keyrouter_key_info
-{
-       void *data;
-       struct wl_list link;
+/**
+ * Keyroute mode of keyroutes returned by keyrouter_grab_get_keyroutes()
+ * for a given keycode.
+ */
+enum keyroute_mode {
+    /**
+     * The keycode is not under any keyroute mode.
+     * The compositor may send a keycode to a focused wayland cliet as usual.
+     */
+    KEYROUTE_MODE_NONE,
+    /**
+     * Exclusive mode means that a given keycode is required to be sent
+     * exclusively to wayland clients of returned keyroutes. So the compositor
+     * must not send this keycode to any other wayland clients except for
+     * returned wayland clients.
+     */
+    KEYROUTE_MODE_EXCLUSIVE,
+    /**
+     * The keycode is required to be shared with returned wayland clients.
+     * The compositor must send the keycode not only to returned wayland
+     * clients, but also to a focused wayland client.
+     */
+    KEYROUTE_MODE_SHARED,
 };
 
-struct ds_tizen_keyrouter_grabbed
+struct keyroute_info
 {
-    int keycode;
+    struct wl_client *wl_client;
+    struct wl_list link;
+};
 
+struct keyrouter_grabbed
+{
     struct {
-        struct wl_list excl;
-        struct wl_list or_excl;
-        struct wl_list top;
-        struct wl_list shared;
+        struct wl_list excl; // keyroute_info::link
+        struct wl_list or_excl; // keyroute_info::link
+        struct wl_list top; // keyroute_info::link
+        struct wl_list shared; // keyroute_info::link
     } grab;
 
     struct wl_list pressed;
 };
 
-struct ds_tizen_keyrouter_grab
+struct keyrouter_grab
 {
-    struct ds_tizen_keyrouter_grabbed *hard_keys;
-
-    void *focus_client;
-    void *top_client;
+    struct keyrouter_grabbed hard_keys[KEYROUTER_MAX_KEYS];
 };
 
-struct ds_tizen_keyrouter_key_options
+struct keyrouter_key_options
 {
     bool enabled;
     bool no_privilege;
@@ -53,18 +75,21 @@ struct ds_tizen_keyrouter
         struct wl_signal destroy;
     } events;
 
-    struct ds_tizen_keyrouter_key_options *opts;
+    struct keyrouter_key_options *opts;
 
-    struct ds_tizen_keyrouter_grab *keyrouter_grab;
+    struct keyrouter_grab keygrab;
+
+    bool security_initialized;
 };
 
-struct ds_tizen_keyrouter_client
+struct keyrouter_client
 {
     struct ds_tizen_keyrouter *keyrouter;
 
     struct wl_resource *resource;
+    struct wl_client *wl_client;
 
-    bool grabbed;
+    bool privileged;
 
     struct wl_list link; // ds_tizen_keyrouter::clients
 };
@@ -82,27 +107,18 @@ struct ds_tizen_ungrab_data
        int err;
 };
 
-struct ds_tizen_keyrouter_grab *
-keyrouter_grab_create(void);
-void
-keyrouter_grab_destroy(struct ds_tizen_keyrouter_grab *keyrouter_grab);
-int
-keyrouter_grab_grab_key(struct ds_tizen_keyrouter_grab *keyrouter_grab,
-        int type, int keycode, void *data);
-void
-keyrouter_grab_ungrab_key(struct ds_tizen_keyrouter_grab *keyrouter_grab,
-        int type, int keycode, void *data);
-int
-keyrouter_grab_key_process(struct ds_tizen_keyrouter_grab *keyrouter_grab,
-        int keycode, int pressed, struct wl_list *delivery_list);
-void
-keyrouter_grab_set_focus_client(struct ds_tizen_keyrouter_grab *keyrouter_grab,
-        void *focus_client);
-void
-keyrouter_grab_set_top_client(struct ds_tizen_keyrouter_grab *keyrouter_grab,
-        void *top_client);
-bool
-keyrouter_grab_check_grabbed_key(struct ds_tizen_keyrouter_grab *keyrouter_grab,
-        int keycode);
+void keyrouter_grab_init(struct keyrouter_grab *keygrab);
+
+void keyrouter_grab_finish(struct keyrouter_grab *keygrab);
+
+int keyrouter_grab_grab_key(struct keyrouter_grab *keygrab, int mode,
+        int keycode, struct wl_client *wl_client);
+
+void keyrouter_grab_ungrab_key(struct keyrouter_grab *keygrab, int mode,
+        int keycode, struct wl_client *wl_client);
+
+enum keyroute_mode
+keyrouter_grab_get_keyroutes(struct keyrouter_grab *keygrab, int keycode,
+        struct wl_client *topmost_client, struct wl_array *keyroutes);
 
 #endif