}
static Eina_Bool
-_ecore_evas_tbm_evas_device_find(Evas *evas, const char *identifier, Ecore_Device_Class ecore_cls)
+_ecore_evas_tbm_evas_device_find(Evas *evas, const char *name, const char *identifier, Ecore_Device_Class ecore_cls)
{
Eina_List *list, *l;
Evas_Device *device;
+ char *evas_device_name;
char *evas_device_description;
Evas_Device_Class evas_cls = EVAS_DEVICE_CLASS_NONE;
EINA_SAFETY_ON_NULL_RETURN_VAL(evas, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(identifier, EINA_FALSE);
evas_cls = _ecore_evas_tbm_ecore_device_class_to_evas(ecore_cls);
list = (Eina_List *)evas_device_list(evas, NULL);
EINA_LIST_FOREACH(list, l, device)
{
+ evas_device_name = (char *)evas_device_name_get(device);
evas_device_description = (char *)evas_device_description_get(device);
- if (!evas_device_description) continue;
-
- if (_ecore_evas_tbm_strcmp(evas_device_description, identifier) &&
+ if (!evas_device_name || !evas_device_description) continue;
+ if (_ecore_evas_tbm_strcmp(evas_device_name, name) &&
+ _ecore_evas_tbm_strcmp(evas_device_description, identifier) &&
evas_device_class_get(device) == evas_cls)
{
return EINA_TRUE;
}
}
- return EINA_FALSE;
}
static Evas_Device *
-_ecore_evas_tbm_default_seat_get(Evas *evas)
+_ecore_evas_tbm_seat_get(Evas *evas, const char *seatname)
{
Eina_List *list, *l;
Evas_Device *device;
+ const char *evas_device_name;
const char *evas_device_description;
EINA_SAFETY_ON_NULL_RETURN_VAL(evas, EINA_FALSE);
if ((evas_device_class_get(device) == EVAS_DEVICE_CLASS_SEAT) &&
!strncmp(evas_device_description, "Enlightenment seat", sizeof("Enlightenment seat")))
{
- return device;
+ evas_device_name = evas_device_name_get(device);
+ if (seatname && evas_device_name)
+ {
+ if (!strncmp(evas_device_name, seatname, sizeof(seatname)))
+ return device;
+ else
+ continue;
+ }
+ else
+ return device;
}
}
return NULL;
if (ee->prop.window != ev->window) return ECORE_CALLBACK_PASS_ON;
if (!ev->identifier) return ECORE_CALLBACK_PASS_ON;
- if (_ecore_evas_tbm_evas_device_find(ee->evas, ev->identifier, ev->clas)) return ECORE_CALLBACK_PASS_ON;
+ if (_ecore_evas_tbm_evas_device_find(ee->evas, ev->name, ev->identifier, ev->clas)) return ECORE_CALLBACK_PASS_ON;
- seat = _ecore_evas_tbm_default_seat_get(ee->evas);
+ seat = _ecore_evas_tbm_seat_get(ee->evas, ev->seatname);
evas_device_add_full(ee->evas, ev->name,
ev->identifier,
Ecore_Evas *ee = (Ecore_Evas *)data;
Eina_List *list, *l, *l_next;
Evas_Device *device;
+ const char *evas_device_name;
const char *evas_device_description;
Evas_Device_Class evas_cls = EVAS_DEVICE_CLASS_NONE;
list = (Eina_List *)evas_device_list(ee->evas, NULL);
EINA_LIST_FOREACH_SAFE(list, l, l_next, device)
{
- evas_device_description = evas_device_description_get(device);
- if (!evas_device_description) continue;
+ evas_device_name = (char *)evas_device_name_get(device);
+ evas_device_description = (char *)evas_device_description_get(device);
+ if (!evas_device_name || !evas_device_description) continue;
- if (_ecore_evas_tbm_strcmp(evas_device_description, ev->identifier) &&
+ if (_ecore_evas_tbm_strcmp(evas_device_name, ev->name) &&
+ _ecore_evas_tbm_strcmp(evas_device_description, ev->identifier) &&
evas_device_class_get(device) == evas_cls)
{
evas_device_del(device);