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 <kabeer.khan@samsung.com>

Reviewers: cedric, tasn

Differential Revision: https://phab.enlightenment.org/D2052
This commit is contained in:
kabeer khan 2015-03-04 14:55:17 +00:00 committed by Tom Hacohen
parent 93620e389f
commit 450d2888eb
3 changed files with 226 additions and 2 deletions

View File

@ -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);
}

View File

@ -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);

View File

@ -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);