static 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)
{
case ECORE_DEVICE_CLASS_MOUSE:
return e_devicemgr->last_device_ptr;
case ECORE_DEVICE_CLASS_KEYBOARD:
- return e_devicemgr->last_device_kbd;
+ g_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
+ last_kbd = e_devicemgr->last_device_kbd;
+ g_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
+ return last_kbd;
case ECORE_DEVICE_CLASS_TOUCH:
return e_devicemgr->last_device_touch;
default:
e_devicemgr->last_device_ptr = device;
break;
case ECORE_DEVICE_CLASS_KEYBOARD:
+ g_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
e_devicemgr->last_device_kbd = device;
+ g_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
break;
case ECORE_DEVICE_CLASS_TOUCH:
e_devicemgr->last_device_touch = device;
static E_Devicemgr_Input_Device *
_e_comp_wl_device_client_last_device_get(E_Client *ec, Ecore_Device_Class dev_class)
{
+ E_Devicemgr_Input_Device *last_kbd = NULL;
+
switch (dev_class)
{
case ECORE_DEVICE_CLASS_MOUSE:
return ec->comp_data->last_device_ptr;
case ECORE_DEVICE_CLASS_KEYBOARD:
- return ec->comp_data->last_device_kbd;
+ g_mutex_lock(&ec->comp_data->last_device_kbd_mutex);
+ last_kbd = ec->comp_data->last_device_kbd;
+ g_mutex_unlock(&ec->comp_data->last_device_kbd_mutex);
+ return last_kbd;
case ECORE_DEVICE_CLASS_TOUCH:
return ec->comp_data->last_device_touch;
default:
ec->comp_data->last_device_ptr = device;
break;
case ECORE_DEVICE_CLASS_KEYBOARD:
+ g_mutex_lock(&ec->comp_data->last_device_kbd_mutex);
ec->comp_data->last_device_kbd = device;
+ g_mutex_unlock(&ec->comp_data->last_device_kbd_mutex);
break;
case ECORE_DEVICE_CLASS_TOUCH:
ec->comp_data->last_device_touch = device;
e_pixmap_cdata_set(ec->pixmap, ec->comp_data);
+ g_mutex_init(&ec->comp_data->last_device_kbd_mutex);
+
end:
TRACE_DS_END();
}
TRACE_DS_BEGIN(COMP_WL:CLIENT DEL CB);
+ g_mutex_clear(&ec->comp_data->last_device_kbd_mutex);
+
_e_comp_wl_hook_call(E_COMP_WL_HOOK_DEL, ec);
if ((!ec->already_unparented) && (ec->comp_data->reparented))
e_devicemgr->dconfig = dconfig;
g_mutex_init(&e_devicemgr->device_list_mutex);
+ g_mutex_init(&e_devicemgr->last_device_kbd_mutex);
res = e_devicemgr_wl_init();
EINA_SAFETY_ON_FALSE_GOTO(res, wl_failed);
e_devicemgr_shutdown(void)
{
g_mutex_clear(&e_devicemgr->device_list_mutex);
+ g_mutex_clear(&e_devicemgr->last_device_kbd_mutex);
+
eina_log_domain_unregister(_devicemgr_log_dom);
_devicemgr_log_dom = -1;
if (e_devicemgr->dconfig)