E_CONFIG_VAL(D, T, commit_handler_timer.interval, DOUBLE);
E_CONFIG_VAL(D, T, e_wheel_click_angle, INT);
E_CONFIG_VAL(D, T, input_output_assign_policy, INT);
+ E_CONFIG_VAL(D, T, touch_block_on_palm, INT);
}
EINTERN E_Comp_Config *
cfg->input_output_assign_policy = 0;
+ cfg->touch_block_on_palm = 0;
+
return cfg;
error:
static void _device_configured_size_get(E_Input_Evdev *edev, int *x, int *y, int *w, int *h);
static void _device_output_assign(E_Input_Evdev *edev, E_Input_Seat_Capabilities cap);
+static Eina_Bool _touch_blocked_by_palm, _touch_up_blocked_by_palm;
+
void
e_input_evdev_device_calibration_set(E_Input_Evdev *edev)
{
atomic_fetch_or(&edev->touch.raw_pressed, (1 << edev->mt_slot));
+ if (_touch_blocked_by_palm)
+ {
+ ELOGF("Touch", "Down (id: %d, x: %d, y: %d) is blocked during palm", NULL,
+ edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy);
+ return;
+ }
+
if (edev->touch.blocked)
{
void *blocked_client = atomic_load(&edev->seat->dev->blocked_client);
edev->touch.coords[edev->mt_slot].y = edev->seat->ptr.iy;
}
+ if (_touch_blocked_by_palm)
+ {
+ ELOGF("Touch", "Move (id: %d, x: %d, y: %d) is blocked during palm", NULL,
+ edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy);
+ return;
+ }
+
if (!(edev->touch.pressed & (1 << edev->mt_slot)))
{
if (edev->touch.blocked)
atomic_fetch_and(&edev->touch.raw_pressed, ~(1 << edev->mt_slot));
+ if (_touch_blocked_by_palm)
+ {
+ ELOGF("Touch", "Up (id: %d, x: %d, y: %d) is blocked during palm", NULL,
+ edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy);
+
+ return;
+ }
+ else if (_touch_up_blocked_by_palm)
+ {
+ ELOGF("Touch", "Up (id: %d, x: %d, y: %d) is blocked lastly on palm up.", NULL,
+ edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy);
+
+ _touch_up_blocked_by_palm = EINA_FALSE;
+
+ return;
+ }
+
if (edev->touch.blocked)
{
if (!(edev->touch.pressed & (1 << edev->mt_slot)))
if (comp_conf && comp_conf->input_log_enable)
ELOGF("Touch", "Axis (label: %d, value: %lf)", NULL, axis?axis->label:-1, axis?axis->value:0.0);
+ if (comp_conf && comp_conf->touch_block_on_palm == 1)
+ {
+ if (touch_value > 0)
+ {
+ _touch_blocked_by_palm = EINA_TRUE;
+ _touch_up_blocked_by_palm = EINA_TRUE;
+ }
+ else
+ {
+ _touch_blocked_by_palm = EINA_FALSE;
+ }
+ }
+
ev->dev = ecore_device_ref(ecore_dev);
ecore_event_add(ECORE_EVENT_AXIS_UPDATE, ev, _e_input_aux_data_event_free, NULL);