@@ -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+
111116def 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
386422screen_stack = []
387423
@@ -400,6 +436,16 @@ def load_screen(screen):
400436def 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