static char *_env_e_default_xkb_variant = NULL;
static char *_env_e_default_xkb_opts = NULL;
+static int constraint_last_hint_x = -1;
+static int constraint_last_hint_y = -1;
+
static Eina_Bool
_e_comp_wl_input_is_position_inside_constraint_region(E_Comp_Wl_Pointer_Constraint *constraint,
wl_fixed_t fx,
if (constraint->ec &&
constraint->has_hint_set)
{
-
INF("Pointer Constraint. Pointer Warp to (%d, %d)", constraint->hint_x, constraint->hint_y);
e_input_device_pointer_warp(NULL, constraint->hint_x, constraint->hint_y);
}
+ else if (constraint_last_hint_x != -1 && constraint_last_hint_y != -1)
+ {
+ INF("Pointer Constraint. Pointer Warp to (%d, %d) last_hint_x/y",
+ constraint_last_hint_x, constraint_last_hint_y);
+ e_input_device_pointer_warp(NULL, constraint_last_hint_x, constraint_last_hint_y);
+ }
}
static void
}
constraint->active = EINA_TRUE;
+ constraint->has_hint_set = EINA_FALSE; // reset the value for new lock
+ constraint->is_hint_pending = EINA_FALSE; // reset the value for new lock
+ constraint_last_hint_x = -1;
+ constraint_last_hint_y = -1;
E_Client *ec = constraint->ec;
comp_wl->ptr_constraints.activated = EINA_TRUE;
comp_wl->ptr_constraints.ec = ec;
WRN("Pointer Constraint. Committed. hint (%d, %d)",
constraint->hint_x, constraint->hint_y);
}
+ if (!constraint->active)
+ {
+ WRN("Pointer Constraint. Committed. constraint not active");
+ constraint_last_hint_x = constraint->hint_x;
+ constraint_last_hint_y = constraint->hint_y;
+ }
}
if (constraint->is_region_pending)