dev->seat = eina_stringshare_add("seat0");
dev->fd_hash = eina_hash_string_superfast_new(NULL);
+ g_mutex_init(&dev->blocked_client_mutex);
+
/* try to create xkb context */
if (!(dev->xkb_ctx = _e_input_device_cached_context_get(0)))
{
/* check for valid device */
EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
+ g_mutex_clear(&dev->blocked_client_mutex);
+
_e_input_device_remove_list(dev);
e_input_device_destroy(dev);
}
dev->blocked |= type;
+ g_mutex_lock(&dev->blocked_client_mutex);
dev->blocked_client = client;
+ g_mutex_unlock(&dev->blocked_client_mutex);
}
else if (client == E_INPUT_REQUEST_SERVER)
{
if (client != E_INPUT_REQUEST_SERVER && dev->blocked_client != client)
{
- WRN("Currently %p client has already bloked (type: 0x%x)\n", dev->blocked_client, dev->blocked);
+ WRN("Currently %p client has already blocked (type: 0x%x)\n", dev->blocked_client, dev->blocked);
return EINA_FALSE;
}
else
{
dev->blocked = 0x0;
+ g_mutex_lock(&dev->blocked_client_mutex);
dev->blocked_client = NULL;
+ g_mutex_unlock(&dev->blocked_client_mutex);
}
return EINA_TRUE;
if ((edev->seat->dev->blocked & E_INPUT_SEAT_KEYBOARD) ||
(edev->seat->dev->server_blocked & E_INPUT_SEAT_KEYBOARD))
{
+ g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Key", "Press (keycode: %d, device: %s) is blocked by %p, server: 0x%x", NULL,
code, device_name, edev->seat->dev->blocked_client,
edev->seat->dev->server_blocked);
+ g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
return;
}
}
if (!dup_found)
{
+ g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Key", "Release (keycode: %d, device: %s) is blocked by %p", NULL,
code, device_name, edev->seat->dev->blocked_client);
+ g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
return;
}
}
if ((edev->seat->dev->blocked & E_INPUT_SEAT_POINTER) ||
(edev->seat->dev->server_blocked & E_INPUT_SEAT_POINTER))
{
+ g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Mouse", "Button Press (btn: %d, device: %s) is blocked by %p, server: 0x%x", NULL,
button, ecore_device_name_get(ecore_dev), edev->seat->dev->blocked_client,
edev->seat->dev->server_blocked);
+ g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
goto end;
}
else
{
if (!(edev->mouse.pressed_button & (1 << button)))
{
+ g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Mouse", "Button Release (btn: %d, device: %s) is blocked by %p, server: 0x%x", NULL,
button, ecore_device_name_get(ecore_dev), edev->seat->dev->blocked_client,
edev->seat->dev->server_blocked);
+ g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
goto end;
}
edev->mouse.pressed_button &= ~(1 << button);
if ((edev->seat->dev->blocked & E_INPUT_SEAT_POINTER) ||
(edev->seat->dev->server_blocked & E_INPUT_SEAT_POINTER))
{
+ g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
+
if (detent_data)
ELOGF("Mouse", "Detent (direction: %d, value: %d) is blocked by %p, server: 0x%x", NULL,
direction, z, edev->seat->dev->blocked_client, edev->seat->dev->server_blocked);
else
ELOGF("Mouse", "Wheel (direction: %d, value: %d) is blocked by %p, server: 0x%x", NULL,
direction, z, edev->seat->dev->blocked_client, edev->seat->dev->server_blocked);
+
+ g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
goto end;
}
if ((edev->seat->dev->blocked & E_INPUT_SEAT_POINTER) ||
(edev->seat->dev->server_blocked & E_INPUT_SEAT_POINTER))
{
+ g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
if (detent_data)
ELOGF("Mouse", "Detent (direction: %d, value: %d) is blocked by %p, server: 0x%x", NULL,
direction, z, edev->seat->dev->blocked_client, edev->seat->dev->server_blocked);
else
ELOGF("Mouse", "Wheel (direction: %d, value: %d) is blocked by %p, server: 0x%x", NULL,
direction, z, edev->seat->dev->blocked_client, edev->seat->dev->server_blocked);
+
+ g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
goto end;
}
if (edev->touch.blocked)
{
+ g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Touch", "Down (id: %d, x: %d, y: %d) is blocked by %p, server: 0x%x", NULL,
edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy, edev->seat->dev->blocked_client,
edev->seat->dev->server_blocked);
+ g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
return;
}
{
if (!(edev->touch.pressed & (1 << edev->mt_slot)))
{
+ g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Touch", "Up (id: %d, x: %d, y: %d) is blocked by %p, server(0x%x)", NULL,
edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy, edev->seat->dev->blocked_client,
edev->seat->dev->server_blocked);
+ g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
+
if (edev->touch.raw_pressed == 0x0)
{
edev->touch.blocked = EINA_FALSE;