Skip to content

Commit 50274e7

Browse files
Gesture navigation: improve robustness
1 parent 322bf3b commit 50274e7

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

internal_filesystem/lib/mpos/ui/gesture_navigation.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import lvgl as lv
2+
from lvgl import LvReferenceError
23
from .anim import smooth_show, smooth_hide
34
from .view import back_screen
45
from .topmenu import open_drawer, drawer_open, NOTIFICATION_BAR_HEIGHT
@@ -17,6 +18,18 @@
1718
def is_short_movement(dx, dy):
1819
return dx < short_movement_threshold and dy < short_movement_threshold
1920

21+
def _passthrough_click(x, y, indev):
22+
obj = lv.indev_search_obj(lv.screen_active(), lv.point_t({'x': x, 'y': y}))
23+
# print(f"Found object: {obj}")
24+
if obj:
25+
try:
26+
# print(f"Simulating press/click/release on {obj}")
27+
obj.send_event(lv.EVENT.PRESSED, indev)
28+
obj.send_event(lv.EVENT.CLICKED, indev)
29+
obj.send_event(lv.EVENT.RELEASED, indev) # gets lost
30+
except LvReferenceError as e:
31+
print(f"Object to click is gone: {e}")
32+
2033
def _back_swipe_cb(event):
2134
if drawer_open:
2235
print("ignoring back gesture because drawer is open")
@@ -51,13 +64,7 @@ def _back_swipe_cb(event):
5164
back_screen()
5265
elif is_short_movement(dx, dy):
5366
# print("Short movement - treating as tap")
54-
obj = lv.indev_search_obj(lv.screen_active(), lv.point_t({'x': x, 'y': y}))
55-
# print(f"Found object: {obj}")
56-
if obj:
57-
# print(f"Simulating press/click/release on {obj}")
58-
obj.send_event(lv.EVENT.PRESSED, indev)
59-
obj.send_event(lv.EVENT.CLICKED, indev)
60-
obj.send_event(lv.EVENT.RELEASED, indev)
67+
_passthrough_click(x, y, indev)
6168

6269
def _top_swipe_cb(event):
6370
if drawer_open:
@@ -95,13 +102,7 @@ def _top_swipe_cb(event):
95102
open_drawer()
96103
elif is_short_movement(dx, dy):
97104
# print("Short movement - treating as tap")
98-
obj = lv.indev_search_obj(lv.screen_active(), lv.point_t({'x': x, 'y': y}))
99-
# print(f"Found object: {obj}")
100-
if obj :
101-
# print(f"Simulating press/click/release on {obj}")
102-
obj.send_event(lv.EVENT.PRESSED, indev)
103-
obj.send_event(lv.EVENT.CLICKED, indev)
104-
obj.send_event(lv.EVENT.RELEASED, indev)
105+
_passthrough_click(x, y, indev)
105106

106107
def handle_back_swipe():
107108
global backbutton

0 commit comments

Comments
 (0)