Skip to content

Commit 2dc3364

Browse files
clean top layer and restore it
1 parent ae10c36 commit 2dc3364

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

internal_filesystem/apps/com.lightningpiggy.displaywallet/assets/displaywallet.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
import mpos.config
44
import mpos.ui
5-
import mpos.apps
65

76
# screens:
87
main_screen = None
98
settings_screen = None
109

11-
1210
# Settings screen implementation
1311
class SettingsScreen():
1412
def __init__(self):

internal_filesystem/lib/mpos/ui.py

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,14 @@ def create_rootscreen():
108108
rootlabel.align(lv.ALIGN.CENTER, 0, 0)
109109

110110

111+
timer1 = None
112+
timer2 = None
113+
timer3 = None
114+
timer4 = None
115+
111116
def create_notification_bar():
112117
global notification_bar
118+
global timer1, timer2, timer3, timer4
113119
# Create notification bar
114120
notification_bar = lv.obj(lv.layer_top())
115121
notification_bar.set_size(lv.pct(100), NOTIFICATION_BAR_HEIGHT)
@@ -212,7 +218,7 @@ def update_memfree(timer):
212218
show_bar_animation.set_custom_exec_cb(lambda not_used, value : notification_bar.set_y(value))
213219

214220

215-
def create_drawer(display):
221+
def create_drawer(display=None):
216222
global drawer
217223
drawer=lv.obj(lv.layer_top())
218224
drawer.set_size(lv.pct(100),lv.pct(90))
@@ -232,7 +238,8 @@ def create_drawer(display):
232238
def slider_event(e):
233239
value=slider.get_value()
234240
slider_label.set_text(f"{value}%")
235-
display.set_backlight(value)
241+
if display:
242+
display.set_backlight(value)
236243

237244
slider.add_event_cb(slider_event,lv.EVENT.VALUE_CHANGED,None)
238245
wifi_btn=lv.button(drawer)
@@ -382,6 +389,35 @@ def get_event_name(event_code):
382389
return EVENT_MAP.get(event_code, f"Unknown event {event_code}")
383390

384391

392+
def close_top_layer_msgboxes():
393+
"""
394+
Iterate through all widgets in lv.layer_top() and close any lv.msgbox instances.
395+
"""
396+
top_layer = lv.layer_top()
397+
if not top_layer:
398+
print("No top layer found")
399+
return
400+
401+
# Get number of children
402+
child_count = top_layer.get_child_count_by_type(lv.msgbox_backdrop_class)
403+
print(f"Top layer has {child_count} msgbox_backdrops")
404+
405+
# Iterate through children (use index to avoid modifying list during deletion)
406+
i = 0
407+
while i < top_layer.get_child_count_by_type(lv.msgbox_backdrop_class):
408+
child = top_layer.get_child_by_type(i,lv.msgbox_backdrop_class)
409+
print("Found msgbox, closing it")
410+
msgbox = child.get_child_by_type(0,lv.msgbox_class)
411+
msgbox.close() # Close the message box
412+
# Note: lv.msgbox_close() may delete the object, so child count may change
413+
414+
# Optional: Verify no msgboxes remain
415+
child_count = top_layer.get_child_count_by_type(lv.msgbox_backdrop_class)
416+
if child_count == 0:
417+
print("All msgboxes closed, top layer empty")
418+
else:
419+
print(f"Top layer still has {child_count} children")
420+
385421

386422
screen_stack = []
387423

@@ -400,6 +436,16 @@ def load_screen(screen):
400436
def back_screen():
401437
global screen_stack
402438
if len(screen_stack) > 1:
439+
print("Cleaning top layer")
440+
timer1.delete()
441+
timer2.delete()
442+
timer3.delete()
443+
timer4.delete()
444+
lv.layer_top().clean()
445+
mpos.ui.create_notification_bar()
446+
mpos.ui.create_drawer()
447+
#close_top_layer_msgboxes() # problem is they are created AFTER it goes to the previous screen!
448+
403449
print("Loading previous screen")
404450
screen_stack.pop() # Remove current screen
405451
prevscreen = screen_stack[-1] # load previous screen

0 commit comments

Comments
 (0)