int x, y, w, h;
GList *input_region;
+ E_Devicemgr_Input_Device *last_device_kbd;
+ E_Devicemgr_Input_Device *last_device_ptr;
+ E_Devicemgr_Input_Device *last_device_touch;
struct
{
return iec->surface;
}
+
+EINTERN void
+e_input_thread_client_last_device_set(E_Input_Thread_Client *iec, Ecore_Device_Class dev_class, E_Devicemgr_Input_Device *device)
+{
+ switch (dev_class)
+ {
+ case ECORE_DEVICE_CLASS_MOUSE:
+ iec->last_device_ptr = device;
+ break;
+ case ECORE_DEVICE_CLASS_KEYBOARD:
+ iec->last_device_kbd = device;
+ break;
+ case ECORE_DEVICE_CLASS_TOUCH:
+ iec->last_device_touch = device;
+ break;
+ default:
+ break;
+ }
+}
+
+EINTERN E_Devicemgr_Input_Device *
+e_input_thread_client_last_device_get(E_Input_Thread_Client *iec, Ecore_Device_Class dev_class)
+{
+ switch (dev_class)
+ {
+ case ECORE_DEVICE_CLASS_MOUSE:
+ return iec->last_device_ptr;
+ case ECORE_DEVICE_CLASS_KEYBOARD:
+ return iec->last_device_kbd;
+ case ECORE_DEVICE_CLASS_TOUCH:
+ return iec->last_device_touch;
+ default:
+ return NULL;;
+ }
+ return NULL;
+}
EINTERN Eina_Bool e_input_thread_check_client_cloning_needed();
+EINTERN void e_input_thread_client_last_device_set(E_Input_Thread_Client *iec, Ecore_Device_Class dev_class, E_Devicemgr_Input_Device *device);
+EINTERN E_Devicemgr_Input_Device *e_input_thread_client_last_device_get(E_Input_Thread_Client *iec, Ecore_Device_Class dev_class);
+
#endif
_e_comp_wl_send_touch_cancel(ec);
}
-static E_Devicemgr_Input_Device *
-_e_comp_wl_device_last_device_get(Ecore_Device_Class dev_class)
+EINTERN E_Devicemgr_Input_Device *
+e_comp_wl_device_last_device_get(Ecore_Device_Class dev_class)
{
E_Devicemgr_Input_Device *last_kbd = NULL;
switch (dev_class)
return NULL;
}
-static void
-_e_comp_wl_device_last_device_set(Ecore_Device_Class dev_class, E_Devicemgr_Input_Device *device)
+EINTERN void
+e_comp_wl_device_last_device_set(Ecore_Device_Class dev_class, E_Devicemgr_Input_Device *device)
{
switch (dev_class)
{
dev_class = (Ecore_Device_Class)evas_device_class_get(dev);
dev_name = evas_device_description_get(dev);
- last_device = _e_comp_wl_device_last_device_get(dev_class);
+ last_device = e_comp_wl_device_last_device_get(dev_class);
ec_last_device = _e_comp_wl_device_client_last_device_get(ec, dev_class);
serial = wl_display_next_serial(e_comp_wl->wl.disp);
if (!eina_streq(input_dev->identifier, dev_name) || (input_dev->clas != dev_class)) continue;
if ((!last_device) || (last_device != input_dev) || (!ec_last_device) || (ec_last_device != input_dev))
{
- _e_comp_wl_device_last_device_set(dev_class, input_dev);
+ e_comp_wl_device_last_device_set(dev_class, input_dev);
_e_comp_wl_device_client_last_device_set(ec, dev_class, input_dev);
EINA_LIST_FOREACH(input_dev->resources, ll, dev_res)
struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
if (!surface) return;
- last_device = _e_comp_wl_device_last_device_get(dev_class);
+ last_device = e_comp_wl_device_last_device_get(dev_class);
if (!last_device) return;
_e_comp_wl_device_client_last_device_set(ec, dev_class, last_device);
{
if (!eina_streq(input_dev->identifier, dev_name) ||
(input_dev->clas != ecore_device_class_get(dev))) continue;
- _e_comp_wl_device_last_device_set(ecore_device_class_get(dev), input_dev);
+ e_comp_wl_device_last_device_set(ecore_device_class_get(dev), input_dev);
EINA_LIST_FOREACH(input_dev->resources, ll, dev_res)
{
{
if (!eina_streq(input_dev->identifier, dev_name) ||
(input_dev->clas != e_device_class_get(dev))) continue;
- _e_comp_wl_device_last_device_set(e_device_class_get(dev), input_dev);
+ e_comp_wl_device_last_device_set(e_device_class_get(dev), input_dev);
EINA_LIST_FOREACH(input_dev->resources, ll, dev_res)
{
struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EINA_FALSE);
- if (!dev) device = _e_comp_wl_device_last_device_get(ECORE_DEVICE_CLASS_TOUCH);
+ if (!dev) device = e_comp_wl_device_last_device_get(ECORE_DEVICE_CLASS_TOUCH);
wc = wl_resource_get_client(surface);
if (!time) time = e_util_timestamp_get();
struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EINA_FALSE);
- if (!dev) device = _e_comp_wl_device_last_device_get(ECORE_DEVICE_CLASS_TOUCH);
+ if (!dev) device = e_comp_wl_device_last_device_get(ECORE_DEVICE_CLASS_TOUCH);
wc = wl_resource_get_client(surface);
if (!time) time = e_util_timestamp_get();
#include "e_input_thread_client_intern.h"
#include "e_input_thread_client.h"
+#include <tizen-extension-server-protocol.h>
+
static E_Input_Event_Handler *_mouse_move_handler = NULL;
static E_Input_Event_Handler *_mouse_down_handler = NULL;
static E_Input_Event_Handler *_mouse_up_handler = NULL;
return target_iec;
}
+static void
+_e_comp_wl_device_input_thread_send_event_device(E_Input_Thread_Client *iec, E_Device *dev, uint32_t timestamp)
+{
+ E_Devicemgr_Input_Device *last_device, *input_dev, *ec_last_device;
+ struct wl_resource *dev_res;
+ const char *dev_name, *dev_identifier;
+ Ecore_Device_Class dev_class;
+ struct wl_client *wc;
+ uint32_t serial;
+ Eina_List *l, *ll;
+
+ EINA_SAFETY_ON_NULL_RETURN(dev);
+
+ if (!iec) return;
+ // if (ec->cur_mouse_action || e_comp_wl->drag)
+ // return;
+ // if (e_object_is_del(E_OBJECT(ec))) return;
+ // if ((ec->ignored) && (!ec->remote_surface.provider)) return;
+
+ struct wl_resource *surface = e_input_thread_client_wl_resource_get(iec);
+ if (!surface) return;
+
+ dev_class = e_device_class_get(dev);
+ dev_name = e_device_name_get(dev);
+ dev_identifier = e_device_identifier_get(dev);
+ last_device = e_comp_wl_device_last_device_get(dev_class);
+ ec_last_device = e_input_thread_client_last_device_get(iec, dev_class);
+
+ ELOGF("Mouse", "dev name(%s), identifier(%s), class(%d), last device(%p)", NULL, dev_name, dev_identifier, dev_class, last_device);
+
+ serial = wl_display_next_serial(e_comp_wl->wl.disp);
+ wc = wl_resource_get_client(surface);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
+ EINA_LIST_FOREACH(e_devicemgr->device_list, l, input_dev)
+ {
+ ELOGF("Mouse", "input_dev(%p), identifier(%s), name(%s), class(%d)", NULL, input_dev, input_dev->identifier, input_dev->name, input_dev->clas);
+
+ if (!eina_streq(input_dev->identifier, dev_identifier) || (input_dev->clas != dev_class)) continue;
+ if ((!last_device) || (last_device != input_dev) || (!ec_last_device) || (ec_last_device != input_dev))
+ {
+ e_comp_wl_device_last_device_set(dev_class, input_dev);
+ e_input_thread_client_last_device_set(iec, dev_class, input_dev);
+
+ EINA_LIST_FOREACH(input_dev->resources, ll, dev_res)
+ {
+ if (wl_resource_get_client(dev_res) != wc) continue;
+
+ ELOGF("Mouse", "Send event device (%s)", NULL, input_dev->identifier);
+ tizen_input_device_send_event_device(dev_res, serial, input_dev->identifier, timestamp);
+ }
+ }
+ }
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
+}
+
static Eina_Bool
_e_comp_wl_cb_mouse_move_thread_mode(void *d EINA_UNUSED, int t EINA_UNUSED, void *event)
{
NULL, ev->buttons, ev->timestamp, ev->x, ev->y, wl_fixed_from_int(ev->x), wl_fixed_from_int(ev->y),
dev_name);
+ _e_comp_wl_device_input_thread_send_event_device(iec, dev, ev->timestamp);
+
if (dev && device_class == ECORE_DEVICE_CLASS_TOUCH)
{
e_comp_wl->touch.pressed |= (1 << 0);
if (!iec)
return ECORE_CALLBACK_RENEW;
+ _e_comp_wl_device_input_thread_send_event_device(iec, dev, ev->timestamp);
+
surface = e_input_thread_client_wl_resource_get(iec);
if (!surface)
{
EINTERN void e_comp_wl_surface_send_mouse_move(struct wl_resource *surface, int x, int y, int client_x, int client_y, unsigned int timestamp);
EINTERN void e_comp_wl_surface_mouse_button_send(struct wl_resource *surface, uint32_t timestamp, uint32_t button_id, uint32_t state);
+EINTERN E_Devicemgr_Input_Device *e_comp_wl_device_last_device_get(Ecore_Device_Class dev_class);
+EINTERN void e_comp_wl_device_last_device_set(Ecore_Device_Class dev_class, E_Devicemgr_Input_Device *device);
+
#endif