You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
793 lines
25 KiB
793 lines
25 KiB
#define _GNU_SOURCE 1 |
|
#define EFL_EO_API_SUPPORT |
|
#define EFL_BETA_API_SUPPORT |
|
#include <Eo.h> |
|
#include <Eet.h> |
|
#include <Evas.h> |
|
#include <Ecore.h> |
|
|
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <unistd.h> |
|
#include <sys/types.h> |
|
#include <sys/sysinfo.h> |
|
#include <dlfcn.h> |
|
#include "tsuite_file_data.h" |
|
#include "exactness_private.h" |
|
|
|
#define TSUITE_MAX_PATH 1024 |
|
#define SHOT_KEY_STR "F2" |
|
#define SAVE_KEY_STR "F3" |
|
#define IMAGE_FILENAME_EXT ".png" |
|
|
|
struct _evas_hook_setting |
|
{ |
|
char *dest_dir; |
|
char *test_name; |
|
char *file_name; |
|
Eina_Bool verbose; |
|
}; |
|
typedef struct _evas_hook_setting evas_hook_setting; |
|
|
|
static char *shot_key = SHOT_KEY_STR; |
|
static Lists_st *vr_list = NULL; |
|
static evas_hook_setting *_hook_setting = NULL; |
|
static Tsuite_Data ts; |
|
static Eina_List *evas_list = NULL; /* List of Evas pointers */ |
|
|
|
static Tsuite_Event_Type |
|
tsuite_event_pointer_type_get(Efl_Pointer_Action t) |
|
{ |
|
switch(t) |
|
{ |
|
case EFL_POINTER_ACTION_IN: return TSUITE_EVENT_MOUSE_IN; |
|
case EFL_POINTER_ACTION_OUT: return TSUITE_EVENT_MOUSE_OUT; |
|
case EFL_POINTER_ACTION_DOWN: return TSUITE_EVENT_MULTI_DOWN; |
|
case EFL_POINTER_ACTION_UP: return TSUITE_EVENT_MULTI_UP; |
|
case EFL_POINTER_ACTION_MOVE: return TSUITE_EVENT_MULTI_MOVE; |
|
case EFL_POINTER_ACTION_WHEEL: return TSUITE_EVENT_MOUSE_WHEEL; |
|
default: |
|
return TSUITE_EVENT_NOT_SUPPORTED; |
|
} |
|
} |
|
|
|
#ifdef DEBUG_TSUITE |
|
static const char * |
|
_event_name_get(Tsuite_Event_Type type) |
|
{ |
|
switch(type) |
|
{ |
|
case TSUITE_EVENT_MOUSE_IN: return "Mouse In"; |
|
case TSUITE_EVENT_MOUSE_OUT: return "Mouse Out"; |
|
case TSUITE_EVENT_MOUSE_DOWN: return "Mouse Down"; |
|
case TSUITE_EVENT_MOUSE_UP: return "Mouse Up"; |
|
case TSUITE_EVENT_MOUSE_MOVE: return "Mouse Move"; |
|
case TSUITE_EVENT_MOUSE_WHEEL: return "Mouse Wheel"; |
|
case TSUITE_EVENT_MULTI_DOWN: return "Multi Down"; |
|
case TSUITE_EVENT_MULTI_UP: return "Multi Up"; |
|
case TSUITE_EVENT_MULTI_MOVE: return "Multi Move"; |
|
case TSUITE_EVENT_KEY_DOWN: return "Key Down"; |
|
case TSUITE_EVENT_KEY_UP: return "Key Up"; |
|
case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE: return "Key Down with Keycode"; |
|
case TSUITE_EVENT_KEY_UP_WITH_KEYCODE: return "Key Up with Keycode"; |
|
case TSUITE_EVENT_TAKE_SHOT: return "Take shot"; |
|
default: return NULL; |
|
} |
|
} |
|
#endif |
|
|
|
static Eina_Bool |
|
_is_hook_duplicate(const Variant_st *v, Tsuite_Event_Type ev_type, const void *info, int len) |
|
{ |
|
if (v->t.type == tsuite_event_mapping_type_str_get(ev_type) && |
|
!memcmp(v->data, info, len)) return EINA_TRUE; |
|
return EINA_FALSE; |
|
} |
|
|
|
/* Adding variant to list, this list is later written to EET file */ |
|
#define ADD_TO_LIST(EVT_TYPE, INFO) \ |
|
do { /* This macro will add event to EET data list */ \ |
|
if (vr_list) \ |
|
{ \ |
|
const Variant_st *prev_v = eina_list_last_data_get(vr_list->variant_list); \ |
|
if (!prev_v || !_is_hook_duplicate(prev_v, EVT_TYPE, &INFO, sizeof(INFO))) \ |
|
{ \ |
|
printf("Recording %s\n", tsuite_event_mapping_type_str_get(EVT_TYPE)); \ |
|
Variant_st *v = malloc(sizeof(Variant_st)); \ |
|
v->data = malloc(sizeof(INFO)); \ |
|
_variant_type_set(tsuite_event_mapping_type_str_get(EVT_TYPE), \ |
|
&v->t, EINA_FALSE); \ |
|
memcpy(v->data, &INFO, sizeof(INFO)); \ |
|
vr_list->variant_list = eina_list_append(vr_list->variant_list, v); \ |
|
} \ |
|
} \ |
|
} while (0) |
|
|
|
static int |
|
evas_list_find(void *ptr) |
|
{ /* We just compare the pointers */ |
|
Eina_List *l; |
|
void *data; |
|
int n = 0; |
|
|
|
EINA_LIST_FOREACH(evas_list, l, data) |
|
{ /* Get the nuber of Evas Pointer */ |
|
if (ptr == data) |
|
{ |
|
return n; |
|
} |
|
|
|
n++; |
|
} |
|
|
|
return -1; |
|
} |
|
|
|
static void |
|
_evas_hook_init(void) |
|
{ /* Pointer taken from tsuite.c */ |
|
shot_key = getenv("TSUITE_SHOT_KEY"); |
|
if (!shot_key) shot_key = SHOT_KEY_STR; |
|
|
|
if (!vr_list) |
|
{ |
|
struct sysinfo s_info; |
|
sysinfo(&s_info); |
|
vr_list = calloc(1, sizeof(*vr_list)); |
|
vr_list->first_timestamp = s_info.uptime * 1000; |
|
#ifdef DEBUG_TSUITE |
|
printf("Uptime=<%u>\n", vr_list->first_timestamp); |
|
#endif |
|
} |
|
} |
|
|
|
static int _ecore_init_count = 0; |
|
|
|
EAPI int |
|
ecore_init(void) |
|
{ |
|
Eina_Bool initing = EINA_FALSE; |
|
int ret; |
|
int (*_ecore_init)(void) = |
|
dlsym(RTLD_NEXT, "ecore_init"); |
|
|
|
_ecore_init_count++; |
|
|
|
if ((_ecore_init_count == 1) && (!_hook_setting)) |
|
{ |
|
const char *tmp; |
|
_hook_setting = calloc(1, sizeof(evas_hook_setting)); |
|
_hook_setting->dest_dir = getenv("TSUITE_DEST_DIR"); |
|
_hook_setting->test_name = getenv("TSUITE_TEST_NAME"); |
|
_hook_setting->file_name = getenv("TSUITE_FILE_NAME"); |
|
tmp = getenv("TSUITE_VERBOSE"); |
|
if (tmp) |
|
_hook_setting->verbose = atoi(tmp); |
|
#ifdef DEBUG_TSUITE |
|
printf("<%s> test_name=<%s>\n", __func__, _hook_setting->test_name); |
|
printf("<%s> dest_dir=<%s>\n", __func__, _hook_setting->dest_dir); |
|
printf("<%s> rec file is <%s>\n", __func__, _hook_setting->file_name); |
|
#endif |
|
initing = EINA_TRUE; |
|
} |
|
|
|
ret = _ecore_init(); |
|
eet_init(); |
|
|
|
if (initing) |
|
{ |
|
_evas_hook_init(); |
|
} |
|
|
|
return ret; |
|
} |
|
|
|
EAPI int |
|
ecore_shutdown(void) |
|
{ |
|
int (*_ecore_shutdown)(void) = |
|
dlsym(RTLD_NEXT, "ecore_shutdown"); |
|
|
|
_ecore_init_count--; |
|
|
|
if (_ecore_init_count == 0) |
|
{ |
|
if (_hook_setting) |
|
{ |
|
if (vr_list) |
|
write_events(_hook_setting->file_name, vr_list); |
|
|
|
vr_list = free_events(vr_list, EINA_TRUE); |
|
|
|
free(_hook_setting); |
|
_hook_setting = NULL; |
|
} |
|
|
|
if (ts.td) |
|
free(ts.td); |
|
|
|
evas_list = eina_list_free(evas_list); |
|
|
|
memset(&ts, 0, sizeof(Tsuite_Data)); |
|
} |
|
|
|
eet_shutdown(); |
|
return _ecore_shutdown(); |
|
} |
|
|
|
static void |
|
_event_pointer_cb(void *data, const Efl_Event *event) |
|
{ |
|
Eo *eo_e = data; |
|
Eo *evp = event->info; |
|
if (!evp) return; |
|
|
|
int timestamp = efl_input_timestamp_get(evp); |
|
int n_evas = evas_list_find(eo_e); |
|
Efl_Pointer_Action action = efl_input_pointer_action_get(evp); |
|
Tsuite_Event_Type evt = tsuite_event_pointer_type_get(action); |
|
|
|
if (!timestamp) return; |
|
|
|
#ifdef DEBUG_TSUITE |
|
printf("Calling \"%s\" timestamp=<%u>\n", _event_name_get(evt), timestamp); |
|
#endif |
|
|
|
switch (action) |
|
{ |
|
case EFL_POINTER_ACTION_MOVE: |
|
{ |
|
double rad = 0, radx = 0, rady = 0, pres = 0, ang = 0, fx = 0, fy = 0; |
|
int tool = efl_input_pointer_tool_get(evp); |
|
Eina_Position2D pos = efl_input_pointer_position_get(evp); |
|
multi_move t = { tool, pos.x, pos.y, rad, radx, rady, pres, ang, fx, fy, timestamp, n_evas }; |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
break; |
|
} |
|
case EFL_POINTER_ACTION_DOWN: case EFL_POINTER_ACTION_UP: |
|
{ |
|
double rad = 0, radx = 0, rady = 0, pres = 0, ang = 0, fx = 0, fy = 0; |
|
int b = efl_input_pointer_button_get(evp); |
|
int tool = efl_input_pointer_tool_get(evp); |
|
Eina_Position2D pos = efl_input_pointer_position_get(evp); |
|
Efl_Pointer_Flags flags = efl_input_pointer_button_flags_get(evp); |
|
multi_event t = { tool, b, pos.x, pos.y, rad, radx, rady, pres, ang, |
|
fx, fy, flags, timestamp, n_evas }; |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
break; |
|
} |
|
case EFL_POINTER_ACTION_IN: case EFL_POINTER_ACTION_OUT: |
|
{ |
|
mouse_in_mouse_out t = { timestamp, n_evas }; |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
break; |
|
} |
|
case EFL_POINTER_ACTION_WHEEL: |
|
{ |
|
Eina_Bool horiz = efl_input_pointer_wheel_horizontal_get(evp); |
|
int z = efl_input_pointer_wheel_delta_get(evp); |
|
mouse_wheel t = { horiz, z, timestamp, n_evas }; |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
break; |
|
} |
|
default: |
|
break; |
|
} |
|
} |
|
|
|
static void |
|
_event_key_cb(void *data, const Efl_Event *event) |
|
{ |
|
Efl_Input_Key *evk = event->info; |
|
Eo *eo_e = data; |
|
if (!evk) return; |
|
const char *key = efl_input_key_name_get(evk); |
|
int timestamp = efl_input_timestamp_get(evk); |
|
int n_evas = evas_list_find(eo_e); |
|
Tsuite_Event_Type evt = TSUITE_EVENT_KEY_UP_WITH_KEYCODE; |
|
|
|
if (efl_input_key_pressed_get(evk)) |
|
{ |
|
if (!strcmp(key, shot_key)) |
|
{ |
|
#ifdef DEBUG_TSUITE |
|
printf("Take Screenshot: %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
take_screenshot t = { timestamp, n_evas }; |
|
if (t.n_evas >= 0) ADD_TO_LIST(TSUITE_EVENT_TAKE_SHOT, t); |
|
return; |
|
} |
|
if (!strcmp(key, SAVE_KEY_STR)) |
|
{ |
|
if (_hook_setting) |
|
{ |
|
if (vr_list) |
|
write_events(_hook_setting->file_name, vr_list); |
|
#ifdef DEBUG_TSUITE |
|
printf("Save events: %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
} |
|
return; |
|
} |
|
evt = TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE; |
|
} |
|
else |
|
{ |
|
if (!strcmp(key, shot_key) || !strcmp(key, SAVE_KEY_STR)) return; |
|
} |
|
if (vr_list) |
|
{ /* Construct duplicate strings, free them when list if freed */ |
|
key_down_key_up_with_keycode t; |
|
t.timestamp = timestamp; |
|
t.keyname = eina_stringshare_add(key); |
|
t.key = eina_stringshare_add(efl_input_key_get(evk)); |
|
t.string = eina_stringshare_add(efl_input_key_string_get(evk)); |
|
t.compose = eina_stringshare_add(efl_input_key_compose_get(evk)); |
|
t.keycode = efl_input_key_code_get(evk); |
|
t.n_evas = n_evas; |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
} |
|
} |
|
|
|
// note: "hold" event comes from above (elm), not below (ecore) |
|
EFL_CALLBACKS_ARRAY_DEFINE(_event_pointer_callbacks, |
|
{ EFL_EVENT_POINTER_MOVE, _event_pointer_cb }, |
|
{ EFL_EVENT_POINTER_DOWN, _event_pointer_cb }, |
|
{ EFL_EVENT_POINTER_UP, _event_pointer_cb }, |
|
{ EFL_EVENT_POINTER_IN, _event_pointer_cb }, |
|
{ EFL_EVENT_POINTER_OUT, _event_pointer_cb }, |
|
{ EFL_EVENT_POINTER_WHEEL, _event_pointer_cb }, |
|
{ EFL_EVENT_FINGER_MOVE, _event_pointer_cb }, |
|
{ EFL_EVENT_FINGER_DOWN, _event_pointer_cb }, |
|
{ EFL_EVENT_FINGER_UP, _event_pointer_cb }, |
|
{ EFL_EVENT_KEY_DOWN, _event_key_cb }, |
|
{ EFL_EVENT_KEY_UP, _event_key_cb } |
|
) |
|
|
|
EAPI Evas * |
|
evas_new(void) |
|
{ |
|
Evas * (*_evas_new)(void) = dlsym(RTLD_NEXT, __FUNCTION__); |
|
Evas *evas = _evas_new(); |
|
evas_list = eina_list_append(evas_list, evas); |
|
efl_event_callback_array_add(evas, _event_pointer_callbacks(), evas); |
|
#ifdef DEBUG_TSUITE |
|
printf("Appended EVAS=<%p> list size=<%d>\n", evas, eina_list_count(evas_list)); |
|
#endif |
|
|
|
return evas; |
|
} |
|
|
|
static Tsuite_Event_Type |
|
tsuite_event_type_get(Evas_Callback_Type t) |
|
{ |
|
switch(t) |
|
{ |
|
case EVAS_CALLBACK_MOUSE_IN: |
|
return TSUITE_EVENT_MOUSE_IN; |
|
case EVAS_CALLBACK_MOUSE_OUT: |
|
return TSUITE_EVENT_MOUSE_OUT; |
|
case EVAS_CALLBACK_MOUSE_DOWN: |
|
return TSUITE_EVENT_MOUSE_DOWN; |
|
case EVAS_CALLBACK_MOUSE_UP: |
|
return TSUITE_EVENT_MOUSE_UP; |
|
case EVAS_CALLBACK_MOUSE_MOVE: |
|
return TSUITE_EVENT_MOUSE_MOVE; |
|
case EVAS_CALLBACK_MOUSE_WHEEL: |
|
return TSUITE_EVENT_MOUSE_WHEEL; |
|
case EVAS_CALLBACK_MULTI_DOWN: |
|
return TSUITE_EVENT_MULTI_DOWN; |
|
case EVAS_CALLBACK_MULTI_UP: |
|
return TSUITE_EVENT_MULTI_UP; |
|
case EVAS_CALLBACK_MULTI_MOVE: |
|
return TSUITE_EVENT_MULTI_MOVE; |
|
case EVAS_CALLBACK_KEY_DOWN: |
|
return TSUITE_EVENT_KEY_DOWN; |
|
case EVAS_CALLBACK_KEY_UP: |
|
return TSUITE_EVENT_KEY_UP; |
|
default: |
|
return TSUITE_EVENT_NOT_SUPPORTED; |
|
} |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
mouse_in_mouse_out t = { timestamp, evas_list_find(e) }; |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_IN); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, unsigned int timestamp, const void *data) = |
|
dlsym(RTLD_NEXT, __func__); |
|
|
|
orig(e, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
mouse_in_mouse_out t = { timestamp, evas_list_find(e) }; |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_OUT); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, unsigned int timestamp, const void *data) = |
|
dlsym(RTLD_NEXT, __func__); |
|
|
|
orig(e, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, |
|
unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
mouse_down_mouse_up t = { b, flags, timestamp, evas_list_find(e) }; |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_DOWN); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, int b, Evas_Button_Flags flags, |
|
unsigned int timestamp, const void *data) = |
|
dlsym(RTLD_NEXT, __func__); |
|
|
|
orig(e, b, flags, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, |
|
unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
mouse_down_mouse_up t = { b, flags, timestamp, evas_list_find(e) }; |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_UP); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, int b, Evas_Button_Flags flags, |
|
unsigned int timestamp, const void *data) = |
|
dlsym(RTLD_NEXT, __func__); |
|
|
|
orig(e, b, flags, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, |
|
const void *data) |
|
{ |
|
if (!timestamp) return; |
|
mouse_move t = { x, y, timestamp, evas_list_find(e) }; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_MOVE); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, int x, int y, unsigned int timestamp, |
|
const void *data) = dlsym(RTLD_NEXT, __func__); |
|
orig(e, x, y, timestamp, data); |
|
} |
|
|
|
/* FIXME: Handle framespace. */ |
|
EAPI void |
|
evas_event_input_mouse_move(Evas *e, int x, int y, unsigned int timestamp, |
|
const void *data) |
|
{ |
|
if (!timestamp) return; |
|
mouse_move t = { x, y, timestamp, evas_list_find(e) }; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_MOVE); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, int x, int y, unsigned int timestamp, |
|
const void *data) = dlsym(RTLD_NEXT, __func__); |
|
orig(e, x, y, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_mouse_wheel(Evas *e, int direction, int z, |
|
unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
mouse_wheel t = { direction, z, timestamp, evas_list_find(e) }; |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_WHEEL); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, int direction, int z, unsigned int timestamp, |
|
const void *data) = dlsym(RTLD_NEXT, __func__); |
|
|
|
orig(e, direction, z, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_multi_down(Evas *e, int d, int x, int y, |
|
double rad, double radx, double rady, double pres, double ang, |
|
double fx, double fy, Evas_Button_Flags flags, |
|
unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
multi_event t = { d, 0, x, y, rad, radx, rady, pres, ang, |
|
fx, fy, flags, timestamp, evas_list_find(e)}; |
|
|
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MULTI_DOWN); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, int d, int x, int y, double rad, |
|
double radx, double rady, double pres, double ang, |
|
double fx, double fy, Evas_Button_Flags flags, |
|
unsigned int timestamp, const void *data) = |
|
dlsym(RTLD_NEXT, __func__); |
|
orig(e, d, x, y, rad, radx, rady, pres, ang, fx, fy, flags, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_multi_up(Evas *e, int d, int x, int y, |
|
double rad, double radx, double rady, double pres, double ang, |
|
double fx, double fy, Evas_Button_Flags flags, |
|
unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
multi_event t = { d, 0, x, y, rad, radx, rady, pres, ang, fx, fy, flags, timestamp, evas_list_find(e) }; |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MULTI_UP); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, int d, int x, int y, double rad, |
|
double radx, double rady, double pres, double ang, |
|
double fx, double fy, Evas_Button_Flags flags, |
|
unsigned int timestamp, const void *data) = |
|
dlsym(RTLD_NEXT, __func__); |
|
|
|
orig(e, d, x, y, rad, radx, rady, pres, ang, fx, fy, flags, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_multi_move(Evas *e, int d, int x, int y, double rad, |
|
double radx, double rady, double pres, double ang, |
|
double fx, double fy, unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
multi_move t = { d, x, y, rad, radx, rady, pres, ang, fx, fy, timestamp, evas_list_find(e) }; |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_MULTI_MOVE); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
|
|
void (*orig) (Evas *e, int d, int x, int y, double rad, |
|
double radx, double rady, double pres, double ang, |
|
double fx, double fy, unsigned int timestamp, const void *data) = |
|
dlsym(RTLD_NEXT, __func__); |
|
|
|
orig(e, d, x, y, rad, radx, rady, pres, ang, fx, fy, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, |
|
const char *string, const char *compose, |
|
unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
int evt = tsuite_event_type_get(EVAS_CALLBACK_KEY_DOWN); |
|
void (*orig) (Evas *e, const char *keyname, const char *key, |
|
const char *string, const char *compose, |
|
unsigned int timestamp, const void *data) = |
|
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, t); |
|
|
|
orig(e, keyname, key, string, compose, timestamp, data); |
|
return; |
|
} |
|
|
|
if (!strcmp(key, SAVE_KEY_STR)) |
|
{ |
|
if (_hook_setting) |
|
{ |
|
if (vr_list) |
|
write_events(_hook_setting->file_name, vr_list); |
|
#ifdef DEBUG_TSUITE |
|
printf("Save events: %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
} |
|
return; |
|
} |
|
|
|
if (vr_list) |
|
{ /* Construct duplicate strings, free them when list if freed */ |
|
key_down_key_up 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); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
} |
|
|
|
orig(e, keyname, key, string, compose, timestamp, data); |
|
} |
|
|
|
EAPI void |
|
evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, |
|
const char *string, const char *compose, |
|
unsigned int timestamp, const void *data) |
|
{ |
|
if (!timestamp) return; |
|
void (*orig) (Evas *e, const char *keyname, const char *key, |
|
const char *string, const char *compose, |
|
unsigned int timestamp, const void *data) = |
|
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); |
|
return; /* Take screenshot done on key-down */ |
|
} |
|
|
|
if (!strcmp(key, SAVE_KEY_STR)) |
|
{ |
|
#ifdef DEBUG_TSUITE |
|
printf("Save events: %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
orig(e, keyname, key, string, compose, timestamp, data); |
|
return; /* Save events done on key-down */ |
|
} |
|
|
|
int evt = { tsuite_event_type_get(EVAS_CALLBACK_KEY_UP) }; |
|
#ifdef DEBUG_TSUITE |
|
printf("Calling %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
|
|
if (vr_list) |
|
{ /* Construct duplicate strings, free them when list if freed */ |
|
key_down_key_up 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); |
|
if (t.n_evas >= 0) ADD_TO_LIST(evt, t); |
|
} |
|
|
|
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) |
|
{ |
|
if (!timestamp) return; |
|
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, t); |
|
|
|
orig(e, keyname, key, string, compose, timestamp, data, keycode); |
|
return; |
|
} |
|
|
|
if (!strcmp(key, SAVE_KEY_STR)) |
|
{ |
|
if (_hook_setting) |
|
{ |
|
if (vr_list) |
|
write_events(_hook_setting->file_name, vr_list); |
|
#ifdef DEBUG_TSUITE |
|
printf("Save events: %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
} |
|
return; |
|
} |
|
|
|
if (vr_list) |
|
{ /* 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, 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) |
|
{ |
|
if (!timestamp) return; |
|
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 */ |
|
} |
|
|
|
if (!strcmp(key, SAVE_KEY_STR)) |
|
{ |
|
#ifdef DEBUG_TSUITE |
|
printf("Save events: %s timestamp=<%u>\n", __func__, timestamp); |
|
#endif |
|
orig(e, keyname, key, string, compose, timestamp, data, keycode); |
|
return; /* Save events 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) |
|
{ /* 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, t); |
|
} |
|
|
|
orig(e, keyname, key, string, compose, timestamp, data, keycode); |
|
} |
|
|
|
|