wayland-input : add/free mmi_provider_event_key event and separate this as function 80/264080/1
authordyamy-lee <dyamy.lee@samsung.com>
Thu, 26 Aug 2021 10:05:37 +0000 (19:05 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Mon, 13 Sep 2021 11:26:02 +0000 (20:26 +0900)
Change-Id: I7f56a12afba8246e21df023e313dda434def7bb0

src/modules/modality_keyboard/wayland-input.c

index bb77c49..86b899e 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "wayland-input.h"
 #include "../../mmi-manager-dbg.h"
+#include "../../mmi-common.h"
 
 #include <stdlib.h>
 #include <sys/mman.h>
@@ -45,6 +46,8 @@ struct xkb_keymap *keymap;
 
 Ecore_Fd_Handler *fd_hdl;
 
+int MMI_PROVIDER_EVENT_KEY = -1;
+
 typedef struct tizen_keyrouter_notify tizen_keyrouter_notify_t;
 struct tizen_keyrouter_notify
 {
@@ -254,6 +257,42 @@ _covert_kernel_keycode_to_user_keycode(unsigned int kernel_keycode)
 }
 
 static void
+_input_event_key_cb_free(void *data EINA_UNUSED, void *event)
+{
+    mmi_provider_event_key *ev = event;
+    if(ev->keyname)
+        free(ev->keyname);
+    free(ev);
+}
+
+static void
+_input_add_key_event(unsigned int keycode, unsigned int state, unsigned int timestamp)
+{
+    const char * name = NULL;
+
+    if((name = xkb_keymap_key_get_name(keymap, keycode)))
+    {
+        LOGD("key name = %s, keycode = %d\n", name, keycode);
+
+        mmi_provider_event_key *ev = calloc(1, sizeof(mmi_provider_event_key));
+
+        if(state)
+            ev->type = MMI_EVENT_KEY_TYPE_DOWN;
+        else
+            ev->type = MMI_EVENT_KEY_TYPE_UP;
+        ev->timestamp = timestamp;
+        ev->keycode = keycode;
+        ev->key_down = state;
+        ev->keyname = strdup(name);
+
+        LOGI("type = %s, keyname = %s, key = %d, time = %d", (ev->type)?"MMI_EVENT_KEY_TYPE_DOWN":"MMI_EVENT_KEY_TYPE_UP", ev->keyname, ev->keycode, ev->timestamp);
+        ecore_event_add(MMI_PROVIDER_EVENT_KEY, ev, _input_event_key_cb_free, NULL);
+    }
+    else
+        LOGD("No matched keyname from keycode = %d\n", keycode);
+}
+
+static void
 keyboard_key(void *data, struct wl_keyboard *keyboard, unsigned int serial, unsigned int timestamp, unsigned int keycode, unsigned int state)
 {
     unsigned int user_keycode = _covert_kernel_keycode_to_user_keycode(keycode);
@@ -270,11 +309,7 @@ keyboard_key(void *data, struct wl_keyboard *keyboard, unsigned int serial, unsi
         LOGD("has_keymap | keycode : %d, state : %d, timestamp : %d\n", user_keycode, state, timestamp);
         if(keymap)
         {
-            const char * name = NULL;
-            if((name = xkb_keymap_key_get_name(keymap, user_keycode)))
-                LOGD("key name = %s, keycode = %d\n", name, user_keycode);
-            else
-                LOGD("No matched keyname from keycode = %d\n", user_keycode);
+            _input_add_key_event(user_keycode, state, timestamp);
         }
     }
 }
@@ -571,14 +606,26 @@ void _keymap_shutdown(void)
     if(keymap) xkb_map_unref(keymap);
 }
 
+void _input_event_init(void)
+{
+    MMI_PROVIDER_EVENT_KEY = ecore_event_type_new();
+}
+
+void _input_event_shutdown(void)
+{
+    MMI_PROVIDER_EVENT_KEY = -1;
+}
+
 void wayland_input_init(void)
 {
+    _input_event_init();
     _wl_init();
     _keygrab_init();
 }
 
 void wayland_input_shutdown(void)
 {
+    _input_event_shutdown();
     _wl_shutdown();
     _keymap_shutdown();
     _xkb_context_shutdown();