#define LOG_TAG "TIZEN_N_EFL_UTIL"
-
-
-/* callback handler index */
-#define CBH_NOTI_LEV 0
-#define CBH_SCR_MODE 1
-#define CBH_MAX 2
-
-typedef void (*Efl_Util_Cb)(Evas_Object *, int, void *);
-
-typedef struct _Efl_Util_Callback_Info
-{
- Evas_Object *win;
- Efl_Util_Cb cb;
- void *data;
-} Efl_Util_Callback_Info;
+#define EFL_UTIL_INPUT_GENERATOR_DEFAULT_TIME_OUT 1000
+#define EFL_UTIL_INPUT_GENERATOR_DEFAULT_DISPATCH_TIME_OUT 10
typedef struct _Efl_Util_Wl_Surface_Lv_Info
{
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 _Efl_Util_Data
{
/* wayland related stuffs */
{
struct tizen_input_device_manager *devicemgr;
int request_notified;
+ Eina_List *devices;
+ Eina_List *wait_devices;
+ struct wl_event_source *wait_timer;
} devmgr;
struct
{
int event_init;
} gesture;
} wl;
-
- struct
- {
- Eina_List *info_list; /* list of callback info */
- unsigned int atom; /* x11 atom */
- } cb_handler[CBH_MAX];
} Efl_Util_Data;
static Efl_Util_Data _eflutil =
{ 0, NULL, NULL }, /* display_policy protocol */
{ NULL, -1, EINA_FALSE } /* tizen_gesture protocol */
},
- {
- { NULL, 0 }, /* handler for notification level */
- { NULL, 0 } /* handler for screen mode */
- },
};
-static Eina_Bool _cb_info_add(Evas_Object *win, Efl_Util_Cb cb, void *data, int idx);
-static Eina_Bool _cb_info_del_by_win(Evas_Object *win, int idx);
-static Eina_List *_cb_info_list_get(int idx);
-static Efl_Util_Callback_Info *_cb_info_find_by_win(Evas_Object *win, int idx);
static Eina_Bool _wl_init(void);
static void _cb_wl_reg_global(void *data, struct wl_registry *reg, unsigned int name, const char *interface, unsigned int version);
static void _cb_wl_reg_global_remove(void *data, struct wl_registry *reg, unsigned int name);
static void _cb_wl_reg_screenshooter_global(void *data, struct wl_registry *reg, unsigned int name, const char *interface, unsigned int version);
static void _cb_wl_reg_screenshooter_global_remove(void *data, struct wl_registry *reg, unsigned int name);
-static Efl_Util_Callback_Info *_cb_info_find_by_wlsurf(void *wlsurf, int idx);
static void _cb_wl_tz_policy_conformant(void *data, struct tizen_policy *tizen_policy, struct wl_surface *surface, uint32_t is_conformant);
static void _cb_wl_tz_policy_conformant_area(void *data, struct tizen_policy *tizen_policy, struct wl_surface *surface, uint32_t conformant_part, uint32_t state, int32_t x, int32_t y, int32_t w, int32_t h);
static void _cb_wl_tz_policy_notification_done(void *data, struct tizen_policy *tizen_policy, struct wl_surface *surface, int32_t level, uint32_t state);
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);
_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,
};
static Eina_Bool
-_cb_info_add(Evas_Object *win,
- Efl_Util_Cb cb,
- void *data,
- int idx)
-{
- Efl_Util_Callback_Info *info;
-
- info = _cb_info_find_by_win(win, idx);
- if (info)
- {
- _eflutil.cb_handler[idx].info_list
- = eina_list_remove(_eflutil.cb_handler[idx].info_list,
- info);
- free(info);
- }
-
- info = (Efl_Util_Callback_Info *)calloc(1, sizeof(Efl_Util_Callback_Info));
- if (!info) return EINA_FALSE;
-
- info->win = win;
- info->cb = cb;
- info->data = data;
-
- _eflutil.cb_handler[idx].info_list
- = eina_list_append(_eflutil.cb_handler[idx].info_list,
- info);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_cb_info_del_by_win(Evas_Object *win,
- int idx)
-{
- Efl_Util_Callback_Info *info;
-
- info = _cb_info_find_by_win(win, idx);
- if (!info) return EINA_FALSE;
-
- _eflutil.cb_handler[idx].info_list
- = eina_list_remove(_eflutil.cb_handler[idx].info_list,
- info);
- free(info);
-
- return EINA_TRUE;
-}
-
-static Eina_List *
-_cb_info_list_get(int idx)
-{
- return _eflutil.cb_handler[idx].info_list;
-}
-
-static Efl_Util_Callback_Info *
-_cb_info_find_by_win(Evas_Object *win,
- int idx)
-{
- Eina_List *l, *ll;
- Efl_Util_Callback_Info *info;
-
- l = _cb_info_list_get(idx);
- EINA_LIST_FOREACH(l, ll, info)
- {
- if (info->win == win) return info;
- }
-
- return NULL;
-}
-
-static Eina_Bool
_wl_init(void)
{
struct wl_display *display_wrapper = NULL;
{
}
-static Efl_Util_Callback_Info *
-_cb_info_find_by_wlsurf(void *wlsurf,
- int idx)
-{
- Eina_List *l, *ll;
- Efl_Util_Callback_Info *info;
- Ecore_Wl2_Window *wlwin2 = NULL;
- void *wlsurf2 = NULL;
-
- l = _cb_info_list_get(idx);
- EINA_LIST_FOREACH(l, ll, info)
- {
- wlwin2 = (Ecore_Wl2_Window *)elm_win_wl_window_get(info->win);
- wlsurf2 = ecore_wl2_window_surface_get(wlwin2);
- if (wlsurf== wlsurf2) return info;
- }
-
- return NULL;
-}
-
static void
_cb_wl_tz_policy_conformant(void *data, struct tizen_policy *tizen_policy,
struct wl_surface *surface, uint32_t is_conformant)
uint32_t state)
{
Efl_Util_Wl_Surface_Lv_Info *lv_info;
- Efl_Util_Callback_Info *cb_info;
lv_info = eina_hash_find(_eflutil.wl.policy.hash_noti_lv, &surface);
if (lv_info)
lv_info->wait_for_done = EINA_FALSE;
lv_info->state = state;
}
-
- if (state != TIZEN_POLICY_ERROR_STATE_PERMISSION_DENIED) return;
-
- cb_info = _cb_info_find_by_wlsurf((void *)surface, CBH_NOTI_LEV);
- if (!cb_info) return;
- if (!cb_info->cb) return;
-
- cb_info->cb(cb_info->win,
- EFL_UTIL_ERROR_PERMISSION_DENIED,
- cb_info->data);
}
/* LCOV_EXCL_START */
uint32_t mode,
uint32_t state)
{
-
Efl_Util_Wl_Surface_Scr_Mode_Info *scr_mode_info;
- Efl_Util_Callback_Info *cb_info;
scr_mode_info = eina_hash_find(_eflutil.wl.policy.hash_scr_mode, &surface);
if (scr_mode_info)
scr_mode_info->wait_for_done = EINA_FALSE;
scr_mode_info->state = state;
}
-
- if (state != TIZEN_POLICY_ERROR_STATE_PERMISSION_DENIED) return;
-
- cb_info = _cb_info_find_by_wlsurf((void *)surface, CBH_SCR_MODE);
- if (!cb_info) return;
- if (!cb_info->cb) return;
-
- cb_info->cb(cb_info->win,
- EFL_UTIL_ERROR_PERMISSION_DENIED,
- cb_info->data);
}
/* LCOV_EXCL_START */
(level <= EFL_UTIL_NOTIFICATION_LEVEL_TOP),
EFL_UTIL_ERROR_INVALID_PARAMETER);
- if (level == EFL_UTIL_NOTIFICATION_LEVEL_1)
- {
- dlog_print(DLOG_WARN, LOG_TAG,
- "DEPRECATION WARNING: EFL_UTIL_NOTIFICATION_LEVEL_1 is deprecated and will be removed from next release. Use EFL_UTIL_NOTIFICATION_LEVEL_DEFAULT instead.");
- }
- else if (level == EFL_UTIL_NOTIFICATION_LEVEL_2)
- {
- dlog_print(DLOG_WARN, LOG_TAG,
- "DEPRECATION WARNING: EFL_UTIL_NOTIFICATION_LEVEL_2 is deprecated and will be removed from next release. Use EFL_UTIL_NOTIFICATION_LEVEL_MEDIUM instead.");
- }
- else if (level == EFL_UTIL_NOTIFICATION_LEVEL_3)
- {
- dlog_print(DLOG_WARN, LOG_TAG,
- "DEPRECATION WARNING: EFL_UTIL_NOTIFICATION_LEVEL_3 is deprecated and will be removed from next release. Use EFL_UTIL_NOTIFICATION_LEVEL_TOP instead.");
- }
-
Elm_Win_Type type;
Ecore_Wl2_Window *wlwin;
struct wl_surface *surface;
switch (lv_info->level)
{
- case TIZEN_POLICY_LEVEL_1: *level = EFL_UTIL_NOTIFICATION_LEVEL_1; break;
- case TIZEN_POLICY_LEVEL_2: *level = EFL_UTIL_NOTIFICATION_LEVEL_2; break;
- case TIZEN_POLICY_LEVEL_3: *level = EFL_UTIL_NOTIFICATION_LEVEL_3; break;
case TIZEN_POLICY_LEVEL_NONE: *level = EFL_UTIL_NOTIFICATION_LEVEL_NONE; break;
case TIZEN_POLICY_LEVEL_DEFAULT: *level = EFL_UTIL_NOTIFICATION_LEVEL_DEFAULT; break;
case TIZEN_POLICY_LEVEL_MEDIUM: *level = EFL_UTIL_NOTIFICATION_LEVEL_MEDIUM; break;
}
API int
-efl_util_set_notification_window_level_error_cb(Evas_Object *window,
- efl_util_notification_window_level_error_cb callback,
- void *user_data)
-{
- dlog_print(DLOG_WARN, LOG_TAG,
- "DEPRECATION WARNING: efl_util_set_notification_window_level_error_cb() is deprecated and will be removed from next release. Use the return value of efl_util_set_notification_window_level() instead.");
-
- Eina_Bool ret = EINA_FALSE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
- EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EFL_UTIL_ERROR_INVALID_PARAMETER);
-
- ret = _cb_info_add(window,
- (Efl_Util_Cb)callback,
- user_data,
- CBH_NOTI_LEV);
- if (!ret) return EFL_UTIL_ERROR_OUT_OF_MEMORY;
-
- return EFL_UTIL_ERROR_NONE;
-}
-
-API int
-efl_util_unset_notification_window_level_error_cb(Evas_Object *window)
-{
- dlog_print(DLOG_WARN, LOG_TAG,
- "DEPRECATION WARNING: efl_util_unset_notification_window_level_error_cb() is deprecated and will be removed from next release. Use the return value of efl_util_set_notification_window_level() instead.");
-
- Eina_Bool ret = EINA_FALSE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
-
- ret = _cb_info_del_by_win(window, CBH_NOTI_LEV);
- if (!ret) return EFL_UTIL_ERROR_INVALID_PARAMETER;
-
- return EFL_UTIL_ERROR_NONE;
-}
-
-API int
efl_util_set_window_opaque_state(Evas_Object *window,
int opaque)
{
}
API int
-efl_util_set_window_screen_mode_error_cb(Evas_Object *window,
- efl_util_window_screen_mode_error_cb callback,
- void *user_data)
-{
- /* Wearable device cannot use this. */
- if (get_tizen_profile() == TIZEN_PROFILE_WEARABLE)
- return EFL_UTIL_ERROR_NO_SUCH_DEVICE;
-
- dlog_print(DLOG_WARN, LOG_TAG,
- "DEPRECATION WARNING: efl_util_set_window_screen_mode_error_cb() is deprecated and will be removed from next release. Use the return value of efl_util_set_window_screen_mode() instead.");
-
- Eina_Bool ret = EINA_FALSE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
- EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EFL_UTIL_ERROR_INVALID_PARAMETER);
-
- ret = _cb_info_add(window,
- (Efl_Util_Cb)callback,
- user_data,
- CBH_SCR_MODE);
- if (!ret) return EFL_UTIL_ERROR_OUT_OF_MEMORY;
-
- return EFL_UTIL_ERROR_NONE;
-}
-
-API int
-efl_util_unset_window_screen_mode_error_cb(Evas_Object *window)
-{
- /* Wearable device cannot use this. */
- if (get_tizen_profile() == TIZEN_PROFILE_WEARABLE)
- return EFL_UTIL_ERROR_NO_SUCH_DEVICE;
-
- dlog_print(DLOG_WARN, LOG_TAG,
- "DEPRECATION WARNING: efl_util_unset_window_screen_mode_error_cb() is deprecated and will be removed from next release. Use the return value of efl_util_set_window_screen_mode() instead.");
-
- Eina_Bool ret = EINA_FALSE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
-
- ret = _cb_info_del_by_win(window, CBH_SCR_MODE);
- if (!ret) return EFL_UTIL_ERROR_INVALID_PARAMETER;
-
- return EFL_UTIL_ERROR_NONE;
-}
-
-API int
efl_util_set_window_brightness(Evas_Object *window, int brightness)
{
Ecore_Wl2_Window *wlwin;
char name[32];
};
+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
_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 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);
}
-/* LCOV_EXCL_START */
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 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;
+ }
+ }
}
-/* LCOV_EXCL_STOP */
static void
_cb_error(void *data EINA_UNUSED,
}
}
+/* 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);
+}
+
API efl_util_inputgen_h
efl_util_input_initialize_generator(unsigned int dev_type)
{
return NULL;
}
+API efl_util_inputgen_h
+efl_util_input_initialize_generator_with_sync(unsigned int dev_type, const char *name)
+{
+ int ret = EFL_UTIL_ERROR_NONE;
+ efl_util_inputgen_h inputgen_h = NULL;
+ unsigned int clas = 0x0;
+
+ if (!dev_type ||
+ dev_type & ~(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN
+ | EFL_UTIL_INPUT_DEVTYPE_KEYBOARD
+ | EFL_UTIL_INPUT_DEVTYPE_POINTER))
+ {
+ set_last_result(EFL_UTIL_ERROR_NO_SUCH_DEVICE);
+ goto out;
+ }
+
+ inputgen_h = (efl_util_inputgen_h)calloc(1, sizeof(struct _efl_util_inputgen_h));
+ if (!inputgen_h)
+ {
+ set_last_result(EFL_UTIL_ERROR_OUT_OF_MEMORY);
+ goto out;
+ }
+
+ inputgen_h->init_type |= dev_type;
+ if (name) strncpy(inputgen_h->name, name, 31);
+ else strncpy(inputgen_h->name, "Input Generator", 31);
+
+ ret = _wl_init();
+ if (ret == (int)EINA_FALSE)
+ {
+ set_last_result(EFL_UTIL_ERROR_INVALID_PARAMETER);
+ goto out;
+ }
+
+ if (dev_type & EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN)
+ clas |= TIZEN_INPUT_DEVICE_MANAGER_CLAS_TOUCHSCREEN;
+ if (dev_type & EFL_UTIL_INPUT_DEVTYPE_KEYBOARD)
+ clas |= TIZEN_INPUT_DEVICE_MANAGER_CLAS_KEYBOARD;
+ if (dev_type & EFL_UTIL_INPUT_DEVTYPE_POINTER)
+ clas |= TIZEN_INPUT_DEVICE_MANAGER_CLAS_MOUSE;
+
+ while (!_eflutil.wl.devmgr.devicemgr)
+ wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+
+ tizen_input_device_manager_init_generator_with_name(_eflutil.wl.devmgr.devicemgr, clas, inputgen_h->name);
+
+ while (_eflutil.wl.devmgr.request_notified == -1)
+ wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+
+ ret = _efl_util_input_convert_input_generator_error(_eflutil.wl.devmgr.request_notified);
+ _eflutil.wl.devmgr.request_notified = -1;
+
+ if (ret == EFL_UTIL_ERROR_NONE)
+ {
+ _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
efl_util_input_deinitialize_generator(efl_util_inputgen_h inputgen_h)