From 450d2888ebfd8be82f07b0a266da978b469384f9 Mon Sep 17 00:00:00 2001 From: kabeer khan Date: Wed, 4 Mar 2015 14:55:17 +0000 Subject: [PATCH] Add key up/down with keycode event handler Summary: To catch key press event added key up/down with keycode event handler Signed-off-by: kabeer khan Reviewers: cedric, tasn Differential Revision: https://phab.enlightenment.org/D2052 --- src/lib/tsuite_evas_hook.c | 124 ++++++++++++++++++++++++++++++++++++- src/lib/tsuite_file_data.c | 86 ++++++++++++++++++++++++- src/lib/tsuite_file_data.h | 18 ++++++ 3 files changed, 226 insertions(+), 2 deletions(-) diff --git a/src/lib/tsuite_evas_hook.c b/src/lib/tsuite_evas_hook.c index dabf41b..03ca995 100644 --- a/src/lib/tsuite_evas_hook.c +++ b/src/lib/tsuite_evas_hook.c @@ -120,6 +120,16 @@ evt_time_get(unsigned int tm, Variant_st *v) key_down_key_up *t = v->data; return t->timestamp; } + case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE: + { + key_down_key_up_with_keycode *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_KEY_UP_WITH_KEYCODE: + { + key_down_key_up_with_keycode *t = v->data; + return t->timestamp; + } case TSUITE_EVENT_TAKE_SHOT: { take_screenshot *t = v->data; @@ -496,6 +506,33 @@ tsuite_feed_event(void *data) break; } + case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE: + { + key_down_key_up_with_keycode *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_key_down_with_keycode timestamp=<%u> t->n_evas=<%d> t->keycode=<%u>\n", __func__, t->timestamp, t->n_evas, t->keycode); +#endif + evas_event_feed_key_down_with_keycode(eina_list_nth(evas_list, t->n_evas), + t->keyname, t->key, t->string, + t->compose, time(NULL), NULL, t->keycode); + + break; + } + case TSUITE_EVENT_KEY_UP_WITH_KEYCODE: + { + key_down_key_up_with_keycode *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_key_up_with_keycode timestamp=<%u> t->n_evas=<%d> t->keycode=<%u>\n", __func__, t->timestamp, t->n_evas, t->keycode); +#endif + evas_event_feed_key_up(eina_list_nth(evas_list, t->n_evas), + t->keyname, t->key, t->string, + t->compose, time(NULL), NULL); + + break; + } + case TSUITE_EVENT_TAKE_SHOT: { take_screenshot *t = v->data; @@ -627,7 +664,6 @@ tsuite_event_type_get(Evas_Callback_Type t) return TSUITE_EVENT_KEY_DOWN; case EVAS_CALLBACK_KEY_UP: return TSUITE_EVENT_KEY_UP; - default: return TSUITE_EVENT_NOT_SUPPORTED; } @@ -908,3 +944,89 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, orig(e, keyname, key, string, compose, timestamp, data); } + +EAPI void +evas_event_feed_key_down_with_keycode(Evas *e, const char *keyname, const char *key, + const char *string, const char *compose, + unsigned int timestamp, const void *data, unsigned int keycode) +{ + int evt = TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE; + void (*orig) (Evas *e, const char *keyname, const char *key, + const char *string, const char *compose, + unsigned int timestamp, const void *data, unsigned int keycode) = + dlsym(RTLD_NEXT, __func__); +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + if (!strcmp(key, shot_key)) + { +#ifdef DEBUG_TSUITE + printf("Take Screenshot: %s timestamp=<%u>\n", __func__, timestamp); +#endif + take_screenshot t = { timestamp, evas_list_find(e) }; + if (t.n_evas >= 0) + ADD_TO_LIST(TSUITE_EVENT_TAKE_SHOT, take_screenshot, t); + + orig(e, keyname, key, string, compose, timestamp, data, keycode); + return; + } + + + if (vr_list && _hook_setting->recording) + { /* Construct duplicate strings, free them when list if freed */ + key_down_key_up_with_keycode t; + t.timestamp = timestamp; + t.keyname = eina_stringshare_add(keyname); + t.key = eina_stringshare_add(key); + t.string = eina_stringshare_add(string); + t.compose = eina_stringshare_add(compose); + t.n_evas = evas_list_find(e); + t.keycode = keycode; + if (t.n_evas >= 0) + ADD_TO_LIST(evt, key_down_key_up, t); + } + + orig(e, keyname, key, string, compose, timestamp, data, keycode); +} + +EAPI void +evas_event_feed_key_up_with_keycode(Evas *e, const char *keyname, const char *key, + const char *string, const char *compose, + unsigned int timestamp, const void *data, unsigned int keycode) +{ + void (*orig) (Evas *e, const char *keyname, const char *key, + const char *string, const char *compose, + unsigned int timestamp, const void *data, unsigned int keycode) = + dlsym(RTLD_NEXT, __func__); + + if (!strcmp(key, shot_key)) + { +#ifdef DEBUG_TSUITE + printf("Take Screenshot: %s timestamp=<%u>\n", __func__, timestamp); +#endif + orig(e, keyname, key, string, compose, timestamp, data, keycode); + return; /* Take screenshot done on key-down */ + } + + int evt = TSUITE_EVENT_KEY_UP_WITH_KEYCODE; +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + + if (vr_list && _hook_setting->recording) + { /* Construct duplicate strings, free them when list if freed */ + key_down_key_up_with_keycode t; + t.timestamp = timestamp; + t.keyname = eina_stringshare_add(keyname); + t.key = eina_stringshare_add(key); + t.string = eina_stringshare_add(string); + t.compose = eina_stringshare_add(compose); + t.n_evas = evas_list_find(e); + t.keycode = keycode; + if (t.n_evas >= 0) + ADD_TO_LIST(evt, key_down_key_up, t); + } + + orig(e, keyname, key, string, compose, timestamp, data, keycode); +} + diff --git a/src/lib/tsuite_file_data.c b/src/lib/tsuite_file_data.c index 840eab9..685f31c 100644 --- a/src/lib/tsuite_file_data.c +++ b/src/lib/tsuite_file_data.c @@ -22,6 +22,8 @@ static eet_event_type_mapping eet_mapping[] = { { TSUITE_EVENT_MULTI_MOVE, TSUITE_EVENT_MULTI_MOVE_STR }, { TSUITE_EVENT_KEY_DOWN, TSUITE_EVENT_KEY_DOWN_STR }, { TSUITE_EVENT_KEY_UP, TSUITE_EVENT_KEY_UP_STR }, + { TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE, TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE_STR }, + { TSUITE_EVENT_KEY_UP_WITH_KEYCODE, TSUITE_EVENT_KEY_UP_WITH_KEYCODE_STR }, { TSUITE_EVENT_TAKE_SHOT, TSUITE_EVENT_TAKE_SHOT_STR }, { TSUITE_EVENT_NOT_SUPPORTED, NULL } }; @@ -57,7 +59,9 @@ free_events(Lists_st *st, char *recording) if (recording) { Tsuite_Event_Type e = tsuite_event_mapping_type_get(v->t.type); - if ((e == TSUITE_EVENT_KEY_DOWN) || (e == TSUITE_EVENT_KEY_UP)) + if ((e == TSUITE_EVENT_KEY_DOWN) || (e == TSUITE_EVENT_KEY_UP) + || (e == TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE) + || (e == TSUITE_EVENT_KEY_UP_WITH_KEYCODE)) { /* Allocated in tsuite_evas_hook.c */ key_down_key_up *t = v->data; eina_stringshare_del(t->keyname); @@ -157,6 +161,18 @@ print_events(Lists_st *vr_list) printf("%d evas_event_feed_key_up timestamp=<%u> t->n_evas=<%d>\n", n, t->timestamp, t->n_evas); break; } + case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE: + { + key_down_key_up_with_keycode *t = v->data; + printf("%d evas_event_feed_key_down_with_keycode timestamp=<%u> t->n_evas=<%d>\n", n, t->timestamp, t->n_evas); + break; + } + case TSUITE_EVENT_KEY_UP_WITH_KEYCODE: + { + key_down_key_up_with_keycode *t = v->data; + printf("%d evas_event_feed_key_up_with_keycode timestamp=<%u> t->n_evas=<%d>\n", n, t->timestamp, t->n_evas); + break; + } case TSUITE_EVENT_TAKE_SHOT: { take_screenshot *t = v->data; @@ -455,6 +471,36 @@ Variant_st *key_down_key_up_new(Tsuite_Event_Type type, return va; } +key_down_key_up_with_keycode *key_down_key_up_with_keycode_set(unsigned int timestamp, + const char *keyname, const char *key, const char *string, + const char *compose, int n_evas, unsigned int keycode) +{ + key_down_key_up_with_keycode *st = calloc(1, sizeof(key_down_key_up_with_keycode)); + if (st) + { + st->timestamp = timestamp; + st->keyname = keyname; + st->key = key; + st->string = string; + st->compose = compose; + st->n_evas = n_evas; + st->keycode = keycode; + } + + return st; +} + +Variant_st *key_down_key_up_with_keycode_new(Tsuite_Event_Type type, + unsigned int timestamp, const char *keyname, const char *key, + const char *string, const char *compose, int n_evas, unsigned int keycode) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[type].name; + va->data = key_down_key_up_with_keycode_set(timestamp, keyname, key, string, + compose, n_evas, keycode); + return va; +} + take_screenshot *take_screenshot_set(unsigned int timestamp, int n_evas) { take_screenshot *st = calloc(1, sizeof(take_screenshot)); @@ -596,6 +642,36 @@ key_down_key_up_desc_make(void) return _d; } +Eet_Data_Descriptor * +key_down_key_up_with_keycode_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *_d; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, key_down_key_up_with_keycode); + _d = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "timestamp", + timestamp, EET_T_UINT); + + EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "keyname", + keyname, EET_T_STRING); + + EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "key", + key, EET_T_STRING); + + EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "string", + string, EET_T_STRING); + + EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "compose", + compose, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "n_evas", + n_evas, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "keycode", + keycode, EET_T_INT); + + return _d; +} + Eet_Data_Descriptor * multi_event_desc_make(void) { @@ -670,6 +746,7 @@ data_desc *_data_descriptors_init(void) desc->multi_event = multi_event_desc_make(); desc->multi_move = multi_move_desc_make(); desc->key_down_key_up = key_down_key_up_desc_make(); + desc->key_down_key_up_with_keycode = key_down_key_up_with_keycode_desc_make(); /* for variant */ EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Variant_st); @@ -713,6 +790,12 @@ data_desc *_data_descriptors_init(void) EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, TSUITE_EVENT_KEY_UP_STR, desc->key_down_key_up); + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE_STR, desc->key_down_key_up_with_keycode); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_KEY_UP_WITH_KEYCODE_STR, desc->key_down_key_up_with_keycode); + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, TSUITE_EVENT_TAKE_SHOT_STR, desc->take_screenshot); @@ -737,6 +820,7 @@ void _data_descriptors_shutdown(void) eet_data_descriptor_free(desc->multi_event); eet_data_descriptor_free(desc->multi_move); eet_data_descriptor_free(desc->key_down_key_up); + eet_data_descriptor_free(desc->key_down_key_up_with_keycode); eet_data_descriptor_free(desc->take_screenshot); eet_data_descriptor_free(desc->_lists_descriptor); eet_data_descriptor_free(desc->_variant_descriptor); diff --git a/src/lib/tsuite_file_data.h b/src/lib/tsuite_file_data.h index 8d3087b..16cca38 100644 --- a/src/lib/tsuite_file_data.h +++ b/src/lib/tsuite_file_data.h @@ -20,6 +20,8 @@ enum _Tsuite_Event_Type TSUITE_EVENT_MULTI_MOVE, TSUITE_EVENT_KEY_DOWN, TSUITE_EVENT_KEY_UP, + TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE, + TSUITE_EVENT_KEY_UP_WITH_KEYCODE, TSUITE_EVENT_TAKE_SHOT }; typedef enum _Tsuite_Event_Type Tsuite_Event_Type; @@ -103,6 +105,17 @@ struct _key_down_key_up int n_evas; }; +struct _key_down_key_up_with_keycode +{ + unsigned int timestamp; + const char *keyname; + const char *key; + const char *string; + const char *compose; + int n_evas; + unsigned int keycode; +}; + struct _multi_event { int d; @@ -143,6 +156,7 @@ typedef struct _mouse_wheel mouse_wheel; typedef struct _multi_event multi_event; typedef struct _multi_move multi_move; typedef struct _key_down_key_up key_down_key_up; +typedef struct _key_down_key_up_with_keycode key_down_key_up_with_keycode; typedef struct _mouse_in_mouse_out take_screenshot; /* START - EET support typedefs */ @@ -157,6 +171,8 @@ typedef struct _mouse_in_mouse_out take_screenshot; #define TSUITE_EVENT_MULTI_MOVE_STR "tsuite_event_multi_move" #define TSUITE_EVENT_KEY_DOWN_STR "tsuite_event_key_down" #define TSUITE_EVENT_KEY_UP_STR "tsuite_event_key_up" +#define TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE_STR "tsuite_event_key_down_with_keycode" +#define TSUITE_EVENT_KEY_UP_WITH_KEYCODE_STR "tsuite_event_key_up_with_keycode" #define TSUITE_EVENT_TAKE_SHOT_STR "tsuite_event_take_shot" struct _Lists_st @@ -175,6 +191,7 @@ struct _data_desc Eet_Data_Descriptor *multi_event; Eet_Data_Descriptor *multi_move; Eet_Data_Descriptor *key_down_key_up; + Eet_Data_Descriptor *key_down_key_up_with_keycode; /* list, variant EET desc support */ Eet_Data_Descriptor *_lists_descriptor; @@ -191,6 +208,7 @@ Eet_Data_Descriptor *mouse_down_mouse_up_desc_make(void); Eet_Data_Descriptor *mouse_move_desc_make(void); Eet_Data_Descriptor *mouse_wheel_desc_make(void); Eet_Data_Descriptor *key_down_key_up_desc_make(void); +Eet_Data_Descriptor *key_down_key_up_with_keycode_desc_make(void); Eet_Data_Descriptor *multi_event_desc_make(void); Eet_Data_Descriptor *multi_move_desc_make(void); data_desc *_data_descriptors_init(void);