{
E_Devicemgr_Input_Device *dev;
E_Devicemgr_Input_Device_User_Data *device_user_data;
+ E_Devicemgr_Input_Device_Mgr_Data *mgr_data;
- e_devicemgr->wl_data->dev_resources = eina_list_remove(e_devicemgr->wl_data->dev_resources, resource);
-
+ DMDBG("Unbind tizen_input_device: %u (client: %p)", wl_resource_get_id(resource), wl_resource_get_client(resource));
if (!(device_user_data = wl_resource_get_user_data(resource))) return;
+ mgr_data = device_user_data->mgr_data;
+ if (mgr_data)
+ {
+ mgr_data->user_data_list = eina_list_remove(mgr_data->user_data_list, device_user_data);
+ }
+
dev = device_user_data->dev;
device_user_data->dev = NULL;
device_user_data->dev_mgr_res = NULL;
device_user_data->seat_res = NULL;
+ device_user_data->dev_res = NULL;
+ device_user_data->mgr_data = NULL;
E_FREE(device_user_data);
+ wl_resource_set_user_data(resource, NULL);
if (!dev) return;
dev->resources = eina_list_remove(dev->resources, resource);
struct wl_client *wc;
E_Devicemgr_Input_Device_User_Data *device_user_data;
struct wl_array axes;
+ E_Devicemgr_Input_Device_Mgr_Data *mgr_data;
/* TODO: find the seat corresponding to event */
serial = wl_display_next_serial(e_comp_wl->wl.disp);
{
wc = wl_resource_get_client(seat_res);
- EINA_LIST_FOREACH(e_devicemgr->wl_data->resources, ll, dev_mgr_res)
+ EINA_LIST_FOREACH(e_devicemgr->wl_data->mgr_data_list, ll, mgr_data)
{
+ dev_mgr_res = mgr_data->resource;
if (wl_resource_get_client(dev_mgr_res) != wc) continue;
res = wl_resource_create(wc, &tizen_input_device_interface, 1, 0);
if (!res)
device_user_data->dev = dev;
device_user_data->dev_mgr_res = dev_mgr_res;
device_user_data->seat_res = seat_res;
+ device_user_data->dev_res = res;
+ device_user_data->mgr_data = mgr_data;
dev->resources = eina_list_append(dev->resources, res);
- e_devicemgr->wl_data->dev_resources = eina_list_append(e_devicemgr->wl_data->dev_resources, res);
+ mgr_data->user_data_list = eina_list_append(mgr_data->user_data_list, device_user_data);
+
wl_resource_set_implementation(res, &_e_devicemgr_wl_device_interface, device_user_data,
_e_devicemgr_wl_device_cb_unbind);
tizen_input_device_manager_send_device_add(dev_mgr_res, serial, dev->identifier, res, seat_res);
struct wl_resource *res, *seat_res, *dev_mgr_res;
uint32_t serial;
E_Devicemgr_Input_Device_User_Data *device_user_data;
+ E_Devicemgr_Input_Device_Mgr_Data *mgr_data;
serial = wl_display_next_serial(e_comp_wl->wl.disp);
EINA_LIST_FOREACH(e_comp_wl->seat.resources, l, seat_res)
{
wc = wl_resource_get_client(seat_res);
- EINA_LIST_FOREACH(e_devicemgr->wl_data->resources, ll, dev_mgr_res)
+ EINA_LIST_FOREACH(e_devicemgr->wl_data->mgr_data_list, ll, mgr_data)
{
+ dev_mgr_res = mgr_data->resource;
if (wl_resource_get_client(dev_mgr_res) != wc) continue;
EINA_LIST_FOREACH(dev->resources, lll, res)
{
if (device_user_data->seat_res != seat_res)
continue;
+ device_user_data->dev = NULL;
tizen_input_device_manager_send_device_remove(dev_mgr_res, serial, dev->identifier, res, seat_res);
}
}
}
- EINA_LIST_FREE(dev->resources, res)
- {
- device_user_data = wl_resource_get_user_data(res);
- if (device_user_data)
- {
- device_user_data->dev = NULL;
- device_user_data->dev_mgr_res = NULL;
- device_user_data->seat_res = NULL;
- E_FREE(device_user_data);
- }
-
- wl_resource_set_user_data(res, NULL);
- }
+ eina_list_free(dev->resources);
}
void
Eina_List *l, *ll;
uint32_t serial;
struct wl_client *wc;
+ E_Devicemgr_Input_Device_Mgr_Data *mgr_data;
serial = wl_display_next_serial(e_comp_wl->wl.disp);
{
wc = wl_resource_get_client(seat_resource);
- EINA_LIST_FOREACH(e_devicemgr->wl_data->resources, ll, dev_mgr_resource)
+ EINA_LIST_FOREACH(e_devicemgr->wl_data->mgr_data_list, ll, mgr_data)
{
+ dev_mgr_resource = mgr_data->resource;
if (wl_resource_get_client(dev_mgr_resource) != wc) continue;
if (wl_resource_get_version(dev_mgr_resource) < 4) continue;
tizen_input_device_manager_send_max_touch_count(dev_mgr_resource, serial, slot, seat_resource);
static void
_e_devicemgr_wl_cb_unbind(struct wl_resource *resource)
{
- struct wl_resource *device_res;
- Eina_List *l, *l_next;
- struct wl_client* wc;
+ E_Devicemgr_Input_Device_Mgr_Data *mgr_data;
+ E_Devicemgr_Input_Device_User_Data *device_user_data;
if(!e_comp_wl) return;
- DMINF("Unbind tizen_input_device_manager: %u (client: %p)", wl_resource_get_id(resource), wl_resource_get_client(resource));
+ mgr_data = wl_resource_get_user_data(resource);
+ if (!mgr_data) return;
- EINA_LIST_FOREACH_SAFE(e_devicemgr->wl_data->dev_resources, l, l_next, device_res)
- {
- wc = wl_resource_get_client(resource);
- if (wl_resource_get_client(device_res) != wc) continue;
+ DMDBG("Unbind tizen_input_device_manager: %u (client: %p)", wl_resource_get_id(resource), wl_resource_get_client(resource));
- DMINF("Destroy tizen_input_device:%u", wl_resource_get_id(device_res));
- wl_resource_destroy(device_res);
+ EINA_LIST_FREE(mgr_data->user_data_list, device_user_data)
+ {
+ DMINF("Destroy dev_res:%u", wl_resource_get_id(device_user_data->dev_res));
+ device_user_data->mgr_data = NULL;
+ wl_resource_destroy(device_user_data->dev_res);
}
+ e_devicemgr->wl_data->mgr_data_list = eina_list_remove(e_devicemgr->wl_data->mgr_data_list, mgr_data);
- e_devicemgr->wl_data->resources = eina_list_remove(e_devicemgr->wl_data->resources, resource);
+ E_FREE(mgr_data);
}
static void
E_Devicemgr_Input_Device *dev;
struct wl_array axes;
E_Devicemgr_Input_Device_User_Data *device_user_data;
+ E_Devicemgr_Input_Device_Mgr_Data *mgr_data;
+
+ mgr_data = E_NEW(E_Devicemgr_Input_Device_Mgr_Data, 1);
+ if (!mgr_data)
+ {
+ wl_client_post_no_memory(client);
+ return;
+ }
if (!(res = wl_resource_create(client, &tizen_input_device_manager_interface, version, id)))
{
return;
}
- e_devicemgr->wl_data->resources = eina_list_append(e_devicemgr->wl_data->resources, res);
+ mgr_data->resource = res;
+ mgr_data->user_data_list = NULL;
+ e_devicemgr->wl_data->mgr_data_list = eina_list_append(e_devicemgr->wl_data->mgr_data_list, mgr_data);
- wl_resource_set_implementation(res, &_e_devicemgr_wl_implementation, NULL,
+ wl_resource_set_implementation(res, &_e_devicemgr_wl_implementation, mgr_data,
_e_devicemgr_wl_cb_unbind);
EINA_LIST_FOREACH(e_comp_wl->seat.resources, l, seat_res)
device_user_data->dev = dev;
device_user_data->dev_mgr_res = res;
device_user_data->seat_res = seat_res;
+ device_user_data->dev_res = device_res;
+ device_user_data->mgr_data = mgr_data;
dev->resources = eina_list_append(dev->resources, device_res);
- e_devicemgr->wl_data->dev_resources = eina_list_append(e_devicemgr->wl_data->dev_resources, device_res);
+ mgr_data->user_data_list = eina_list_append(mgr_data->user_data_list, device_user_data);
wl_resource_set_implementation(device_res, &_e_devicemgr_wl_device_interface, device_user_data,
_e_devicemgr_wl_device_cb_unbind);
DMERR("Could not add tizen_input_device_manager to wayland globals");
return EINA_FALSE;
}
- e_devicemgr->wl_data->resources = NULL;
- e_devicemgr->wl_data->dev_resources = NULL;
+ e_devicemgr->wl_data->mgr_data_list = NULL;
/* initialization of cynara for checking privilege */
#ifdef HAVE_CYNARA
if (e_devicemgr->wl_data->global)
wl_global_destroy(e_devicemgr->wl_data->global);
e_devicemgr->wl_data->global = NULL;
+ eina_list_free(e_devicemgr->wl_data->mgr_data_list);
/* deinitialization of cynara if it has been initialized */
#ifdef HAVE_CYNARA