2121import sys
2222import argparse
2323import math
24+ import time
2425import evdev
2526from evdev import InputDevice , UInput , ecodes as e
2627
@@ -168,8 +169,10 @@ def __init__(self, ui, device, classic_overlap=False):
168169 self .center_x = (abs_x .min + abs_x .max ) / 2.0
169170 self .half_range_x = (abs_x .max - abs_x .min ) / 2.0
170171
171- self .threshold = 0.9 # activation threshold
172+ self .threshold = 0.95 # activation threshold
172173 self .hysteresis = 0.05 # prevents flicker
174+ self .deadzone_delay = 0.2
175+ self .deadzone_enter_time = None
173176
174177 self .current_x = 0.0
175178 self .current_y = 0.0
@@ -230,6 +233,8 @@ def set_deadzone(self):
230233 """Deactivate all arrow keys."""
231234 if not self .state ["deadzone" ]:
232235 self .state ["deadzone" ] = True
236+ self .deadzone_enter_time = time .monotonic ()
237+
233238 if self .state ["up" ]:
234239 self .state ["up" ] = False
235240 self .ui .write (e .EV_KEY , e .KEY_UP , 0 )
@@ -244,17 +249,22 @@ def set_deadzone(self):
244249 self .ui .write (e .EV_KEY , e .KEY_DOWN , 0 )
245250 self .ui .syn ()
246251
247- def handle_state (self , active , angle ): # pylint: disable=too-many-statements too-many-branches
252+ # pylint: disable=too-many-statements too-many-branches
253+ def handle_state (self , active , angle ):
248254 """Handle the states for the arrow keys."""
249255 if not active :
250256 self .set_deadzone ()
251257 return
252258
259+ if self .state ["deadzone" ]:
260+ if time .monotonic () - self .deadzone_enter_time < self .deadzone_delay :
261+ return
262+ self .state ["deadzone" ] = False
263+
253264 sector_point_right_up = 45
254265 sector_point_left_up = 135
255266 sector_point_right_down = - 45
256267 sector_point_left_down = - 135
257- self .state ["deadzone" ] = False
258268
259269 # Up
260270 if sector_point_right_up < angle < sector_point_left_up :
@@ -309,17 +319,22 @@ def handle_state(self, active, angle): # pylint: disable=too-many-statements to
309319 self .ui .write (e .EV_KEY , e .KEY_DOWN , 1 )
310320 self .ui .syn ()
311321
312- def handle_state_classic (self , active , angle ): # pylint: disable=too-many-statements too-many-branches
322+ # pylint: disable=too-many-statements too-many-branches
323+ def handle_state_classic (self , active , angle ):
313324 """Handle the states for the arrow keys."""
314325 if not active :
315326 self .set_deadzone ()
316327 return
317328
318- size_up = 142
319- size_right = 142
320- size_left = 142
321- size_down = 142
322- self .state ["deadzone" ] = False
329+ if self .state ["deadzone" ]:
330+ if time .monotonic () - self .deadzone_enter_time < self .deadzone_delay :
331+ return
332+ self .state ["deadzone" ] = False
333+
334+ size_up = 138
335+ size_right = 138
336+ size_left = 138
337+ size_down = 138
323338
324339 # Up
325340 if 90 - size_up / 2 < angle < 90 + size_up / 2 :
0 commit comments