From: duna.oh Date: Fri, 9 Dec 2022 06:44:35 +0000 (+0900) Subject: input_generator: use a new request 'init_generator_with_sync' X-Git-Tag: accepted/tizen/unified/20230215.155620~1 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fapi%2Fefl-util.git;a=commitdiff_plain;h=ba07e0cf4ecaad20bc26812c635e6e4f72d47f61 input_generator: use a new request 'init_generator_with_sync' init_generator_with_sync req. is available since tizen_input_device_manager v.5 efl_util_input_initialize_generator_with_sync() API is modified to use a new request 'init_generator_with_sync' and listens to error_none event, not listens to device_add/remove events. Change-Id: I66e08fa51dab79a02505d6884d8cc4d578c14eb0 --- diff --git a/src/efl_util.c b/src/efl_util.c index aabd4c2..6cb96d1 100644 --- a/src/efl_util.c +++ b/src/efl_util.c @@ -45,8 +45,6 @@ #endif #define LOG_TAG "TIZEN_N_EFL_UTIL" -#define EFL_UTIL_INPUT_GENERATOR_DEFAULT_TIME_OUT 1000 -#define EFL_UTIL_INPUT_GENERATOR_DEFAULT_DISPATCH_TIME_OUT 10 #define EFL_UTIL_INPUT_GENERATOR_TOUCH_MAX_FINGER 10 typedef struct _Efl_Util_Wl_Surface_Lv_Info @@ -119,13 +117,6 @@ typedef struct _Efl_Util_Gesture_Palm_Cover_Grab_Data Efl_Util_Gesture_Common_Grab_Data base; } Efl_Util_Gesture_Palm_Cover_Grab_Data; -typedef struct _Efl_Util_Device_Info -{ - struct tizen_input_device *device; - Ecore_Device_Class clas; - Eina_Stringshare *name; -} Efl_Util_Device_Info; - typedef struct _E_Devicemgr_Inputgen_Touch_Axis { double radius_x; @@ -244,10 +235,6 @@ static void _cb_wl_conformant_region(void *data, struct tizen static void _cb_wl_tz_display_policy_brightness_done(void *data, struct tizen_display_policy *tizen_display_policy, struct wl_surface *surface_resource, int32_t brightness, uint32_t state); -static void _cb_device_info(void *data, struct tizen_input_device *tizen_input_device EINA_UNUSED, const char *name, uint32_t clas, uint32_t subclas EINA_UNUSED, struct wl_array *axes EINA_UNUSED); -static void _cb_event_device(void *data EINA_UNUSED, struct tizen_input_device *tizen_input_device EINA_UNUSED, unsigned int serial EINA_UNUSED, const char *name EINA_UNUSED, uint32_t time EINA_UNUSED); -static void _cb_axis(void *data EINA_UNUSED, struct tizen_input_device *tizen_input_device EINA_UNUSED, uint32_t axis_type EINA_UNUSED, wl_fixed_t value EINA_UNUSED); - static void _cb_device_add(void *data EINA_UNUSED, struct tizen_input_device_manager *tizen_input_device_manager EINA_UNUSED, uint32_t serial EINA_UNUSED, const char *identifier EINA_UNUSED, struct tizen_input_device *device EINA_UNUSED, struct wl_seat *seat EINA_UNUSED); static void _cb_device_remove(void *data EINA_UNUSED, struct tizen_input_device_manager *tizen_input_device_manager EINA_UNUSED, uint32_t serial EINA_UNUSED, const char *identifier EINA_UNUSED, struct tizen_input_device *device EINA_UNUSED, struct wl_seat *seat EINA_UNUSED); static void _cb_error(void *data EINA_UNUSED, struct tizen_input_device_manager *tizen_input_device_manager EINA_UNUSED, uint32_t errorcode); @@ -291,13 +278,6 @@ struct tizen_policy_listener _wl_tz_policy_listener = _cb_wl_conformant_region, }; -static const struct tizen_input_device_listener _wl_tz_input_device_listener = -{ - _cb_device_info, - _cb_event_device, - _cb_axis, -}; - struct tizen_input_device_manager_listener _wl_tz_devmgr_listener = { _cb_device_add, @@ -1209,96 +1189,6 @@ struct _efl_util_inputgen_h E_Devicemgr_Inputgen_Touch_Axis *axis_info; }; -static Eina_Bool -_efl_util_input_check_wait_device_full(void) -{ - Eina_List *l, *ll, *l_next; - Efl_Util_Device_Info *dev, *wait_dev; - int wait_cnt = 0; - - wait_cnt = eina_list_count(_eflutil.wl.devmgr.wait_devices); - if (wait_cnt <= 0) return EINA_TRUE; - - EINA_LIST_FOREACH(_eflutil.wl.devmgr.devices, l, dev) - { - EINA_LIST_FOREACH_SAFE(_eflutil.wl.devmgr.wait_devices, ll, l_next, wait_dev) - { - if ((dev->clas == wait_dev->clas) && - (!strncmp(dev->name, wait_dev->name, eina_stringshare_strlen(wait_dev->name)))) - { - eina_stringshare_del(wait_dev->name); - _eflutil.wl.devmgr.wait_devices = eina_list_remove_list(_eflutil.wl.devmgr.wait_devices, ll); - free(wait_dev); - - wait_cnt--; - if (wait_cnt <= 0) return EINA_TRUE; - - break; - } - } - } - - return EINA_FALSE; -} - -static Eina_Bool -_efl_util_input_check_wait_device(const char *name, unsigned int type) -{ - Eina_List *l, *l_next; - Efl_Util_Device_Info *wait_dev; - int wait_cnt = 0; - - wait_cnt = eina_list_count(_eflutil.wl.devmgr.wait_devices); - if (wait_cnt <= 0) return EINA_TRUE; - - EINA_LIST_FOREACH_SAFE(_eflutil.wl.devmgr.wait_devices, l, l_next, wait_dev) - { - if ((type == wait_dev->clas) && - (!strncmp(name, wait_dev->name, eina_stringshare_strlen(wait_dev->name)))) - { - eina_stringshare_del(wait_dev->name); - _eflutil.wl.devmgr.wait_devices = eina_list_remove_list(_eflutil.wl.devmgr.wait_devices, l); - free(wait_dev); - - wait_cnt--; - if (wait_cnt <= 0) return EINA_TRUE; - - break; - } - } - - return EINA_FALSE; -} - -static void -_cb_device_info(void *data, struct tizen_input_device *tizen_input_device EINA_UNUSED, const char *name, uint32_t clas, uint32_t subclas EINA_UNUSED, struct wl_array *axes EINA_UNUSED) -{ - Efl_Util_Device_Info *dev; - - if (!(dev = data)) return; - dev->clas = (Ecore_Device_Class)clas; - dev->name = eina_stringshare_add(name); - - if (_eflutil.wl.devmgr.wait_timer && - _efl_util_input_check_wait_device(name, clas)) - { - wl_event_source_remove(_eflutil.wl.devmgr.wait_timer); - _eflutil.wl.devmgr.wait_timer = NULL; - } -} - -/* LCOV_EXCL_START */ -static void -_cb_event_device(void *data EINA_UNUSED, struct tizen_input_device *tizen_input_device EINA_UNUSED, unsigned int serial EINA_UNUSED, const char *name EINA_UNUSED, uint32_t time EINA_UNUSED) -{ - ; -} - -static void -_cb_axis(void *data EINA_UNUSED, struct tizen_input_device *tizen_input_device EINA_UNUSED, uint32_t axis_type EINA_UNUSED, wl_fixed_t value EINA_UNUSED) -{ - ; -} /* LCOV_EXCL_STOP */ static void @@ -1309,17 +1199,7 @@ _cb_device_add(void *data EINA_UNUSED, struct tizen_input_device *device, struct wl_seat *seat EINA_UNUSED) { - Efl_Util_Device_Info *dev; - - EINA_SAFETY_ON_NULL_RETURN(device); - - dev = (Efl_Util_Device_Info *)calloc(1, sizeof(Efl_Util_Device_Info)); - EINA_SAFETY_ON_NULL_RETURN(dev); - - dev->device = device; - tizen_input_device_add_listener(device, &_wl_tz_input_device_listener, dev); - - _eflutil.wl.devmgr.devices = eina_list_append(_eflutil.wl.devmgr.devices, dev); + ; } static void @@ -1330,22 +1210,7 @@ _cb_device_remove(void *data EINA_UNUSED, struct tizen_input_device *device, struct wl_seat *seat EINA_UNUSED) { - Eina_List *l, *l_next; - Efl_Util_Device_Info *dev; - - EINA_LIST_FOREACH_SAFE(_eflutil.wl.devmgr.devices, l, l_next, dev) - { - if (dev->device == device) - { - if (dev->name) eina_stringshare_del(dev->name); - tizen_input_device_release(dev->device); - - _eflutil.wl.devmgr.devices = eina_list_remove_list(_eflutil.wl.devmgr.devices, l); - free(dev); - - break; - } - } + ; } static void @@ -1395,88 +1260,6 @@ _efl_util_input_convert_input_generator_error(int ret) } } -/* LCOV_EXCL_START */ -static int -_timer_wait(void *data) -{ - Efl_Util_Device_Info *dev; - - _eflutil.wl.devmgr.request_notified = TIZEN_INPUT_DEVICE_MANAGER_ERROR_NO_SYSTEM_RESOURCES; - - if (eina_list_count(_eflutil.wl.devmgr.wait_devices) > 0) - { - EINA_LIST_FREE(_eflutil.wl.devmgr.wait_devices, dev) - { - eina_stringshare_del(dev->name); - dev->name = NULL; - } - } - - wl_event_source_remove(_eflutil.wl.devmgr.wait_timer); - _eflutil.wl.devmgr.wait_timer = NULL; - - return 1; -} -/* LCOV_EXCL_STOP */ - -static void -_efl_util_input_initialize_wait_device(void) -{ - struct wl_event_loop *loop; - int ret = -1; - - if (_efl_util_input_check_wait_device_full()) return; - - loop = wl_event_loop_create(); - _eflutil.wl.devmgr.wait_timer = wl_event_loop_add_timer(loop, _timer_wait, NULL); - if (_eflutil.wl.devmgr.wait_timer) - { - ret = wl_event_source_timer_update(_eflutil.wl.devmgr.wait_timer, - EFL_UTIL_INPUT_GENERATOR_DEFAULT_TIME_OUT); - if (ret != 0) - { - _timer_wait(NULL); - return; - } - } - - while (_eflutil.wl.devmgr.wait_timer) - { - wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue); - ret = wl_event_loop_dispatch(loop, EFL_UTIL_INPUT_GENERATOR_DEFAULT_DISPATCH_TIME_OUT); - if (ret != 0) _timer_wait(NULL); - } -} - -static void -_efl_util_input_initialize_append_device(const char *name, Ecore_Device_Class clas) -{ - Efl_Util_Device_Info *dev; - - dev = (Efl_Util_Device_Info *)calloc(1, sizeof(Efl_Util_Device_Info)); - EINA_SAFETY_ON_NULL_RETURN(dev); - - dev->name = eina_stringshare_add(name); - dev->clas = clas; - - _eflutil.wl.devmgr.wait_devices = eina_list_append(_eflutil.wl.devmgr.wait_devices, dev); -} - -static void -_efl_util_input_initialize_add_wait_device(const char *name, unsigned int dev_type) -{ - EINA_SAFETY_ON_NULL_RETURN(name); - - if (dev_type & EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN) - _efl_util_input_initialize_append_device(name, ECORE_DEVICE_CLASS_TOUCH); - - if (dev_type & EFL_UTIL_INPUT_DEVTYPE_KEYBOARD) - _efl_util_input_initialize_append_device(name, ECORE_DEVICE_CLASS_KEYBOARD); - - if (dev_type & EFL_UTIL_INPUT_DEVTYPE_POINTER) - _efl_util_input_initialize_append_device(name, ECORE_DEVICE_CLASS_MOUSE); -} - static efl_util_inputgen_h _efl_util_input_create_inputgen(unsigned int dev_type, const char *name, int *ret, int with_name) { @@ -1523,7 +1306,9 @@ _efl_util_input_create_inputgen(unsigned int dev_type, const char *name, int *re while (!_eflutil.wl.devmgr.devicemgr) wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue); - if (with_name) + if (with_name == 2) + tizen_input_device_manager_init_generator_with_sync(_eflutil.wl.devmgr.devicemgr, clas, inputgen_h->name); + else if (with_name == 1) tizen_input_device_manager_init_generator_with_name(_eflutil.wl.devmgr.devicemgr, clas, inputgen_h->name); else tizen_input_device_manager_init_generator(_eflutil.wl.devmgr.devicemgr, clas); @@ -1582,32 +1367,11 @@ efl_util_input_initialize_generator_with_sync(unsigned int dev_type, const char int ret = EFL_UTIL_ERROR_NONE; efl_util_inputgen_h inputgen_h = NULL; - inputgen_h = efl_util_input_initialize_generator_with_name(dev_type, name); + inputgen_h = _efl_util_input_create_inputgen(dev_type, name, &ret, 2); if (!inputgen_h) return NULL; - _efl_util_input_initialize_add_wait_device(inputgen_h->name, dev_type); - _efl_util_input_initialize_wait_device(); - if (_eflutil.wl.devmgr.request_notified != -1) - { - ret = _efl_util_input_convert_input_generator_error(_eflutil.wl.devmgr.request_notified); - _eflutil.wl.devmgr.request_notified = -1; - } - - set_last_result(ret); - if (ret != TIZEN_INPUT_DEVICE_MANAGER_ERROR_NONE) - goto out; - return inputgen_h; - -out: - if (inputgen_h) - { - free(inputgen_h); - inputgen_h = NULL; - } - - return NULL; } API int