{
EINA_LIST_FOREACH(e_input_seat_evdev_list_get(seat), l2, edev)
{
+ g_mutex_lock(&edev->touch.blocked_mutex);
edev->touch.blocked = EINA_TRUE;
+ g_mutex_unlock(&edev->touch.blocked_mutex);
}
}
}
EINA_LIST_FOREACH(e_input_seat_evdev_list_get(seat), l2, edev)
{
g_mutex_lock(&edev->touch.raw_pressed_mutex);
+
if (edev->touch.raw_pressed == 0x0)
- edev->touch.blocked = EINA_FALSE;
+ {
+ g_mutex_lock(&edev->touch.blocked_mutex);
+ edev->touch.blocked = EINA_FALSE;
+ g_mutex_unlock(&edev->touch.blocked_mutex);
+ }
+
g_mutex_unlock(&edev->touch.raw_pressed_mutex);
}
}
edev->touch.raw_pressed |= (1 << edev->mt_slot);
g_mutex_unlock(&edev->touch.raw_pressed_mutex);
+ g_mutex_lock(&edev->touch.blocked_mutex);
if (edev->touch.blocked)
{
g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
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);
+ g_mutex_unlock(&edev->touch.blocked_mutex);
return;
}
+ g_mutex_unlock(&edev->touch.blocked_mutex);
+
_device_handle_touch_motion_send(edev, event);
_device_handle_touch_event_send(edev, event, ECORE_EVENT_MOUSE_BUTTON_DOWN);
}
if (!(edev->touch.pressed & (1 << edev->mt_slot)))
{
+ g_mutex_lock(&edev->touch.blocked_mutex);
if (edev->touch.blocked)
{
+ g_mutex_unlock(&edev->touch.blocked_mutex);
return;
}
+ g_mutex_unlock(&edev->touch.blocked_mutex);
}
_device_handle_touch_motion_send(edev, event);
edev->touch.raw_pressed &= ~(1 << edev->mt_slot);
g_mutex_unlock(&edev->touch.raw_pressed_mutex);
+ g_mutex_lock(&edev->touch.blocked_mutex);
if (edev->touch.blocked)
{
if (!(edev->touch.pressed & (1 << edev->mt_slot)))
edev->touch.blocked = EINA_FALSE;
}
g_mutex_unlock(&edev->touch.raw_pressed_mutex);
+ g_mutex_unlock(&edev->touch.blocked_mutex);
return;
}
}
+ g_mutex_unlock(&edev->touch.blocked_mutex);
_device_handle_touch_event_send(edev, event, ECORE_EVENT_MOUSE_BUTTON_UP);
}
_device_touch_count_update(edev);
g_mutex_init(&edev->touch.raw_pressed_mutex);
+ g_mutex_init(&edev->touch.blocked_mutex);
edev->touch.coords = calloc(1, sizeof(E_Input_Coord)*e_input_touch_max_count_get());
if (!edev->touch.coords)
edev->touch.coords = NULL;
}
g_mutex_clear(&edev->touch.raw_pressed_mutex);
+ g_mutex_clear(&edev->touch.blocked_mutex);
eina_stringshare_del(edev->output_name);
ecore_thread_main_loop_end();