ui: fix dialog memory leak (#36767)

* weakref alternative

* and here

* clean up

* fix

* rm
This commit is contained in:
Shane Smiskol
2025-12-04 01:56:38 -08:00
committed by GitHub
parent 93f2076c7e
commit 45b7d60263
2 changed files with 11 additions and 1 deletions
+10
View File
@@ -40,6 +40,11 @@ class BigDialogBase(NavWidget, abc.ABC):
# move to right side
self._right_btn._rect.x = self._rect.x + self._rect.width - self._right_btn._rect.width
def hide_event(self):
# Free reference to self to allow refcount to go to zero
super().hide_event()
self.set_back_callback(None)
def _render(self, _) -> DialogResult:
"""
Allows `gui_app.set_modal_overlay(BigDialog(...))`.
@@ -163,6 +168,11 @@ class BigInputDialog(BigDialogBase):
confirm_callback(self._keyboard.text())
self._confirm_callback = confirm_callback_wrapper
def hide_event(self):
# Free reference to self to allow refcount to go to zero
super().hide_event()
self._confirm_callback = None
def _update_state(self):
super()._update_state()
+1 -1
View File
@@ -252,7 +252,7 @@ class NavWidget(Widget, abc.ABC):
def set_back_enabled(self, enabled: bool | Callable[[], bool]) -> None:
self._back_enabled = enabled
def set_back_callback(self, callback: Callable[[], None]) -> None:
def set_back_callback(self, callback: Callable[[], None] | None) -> None:
self._back_callback = callback
def _handle_mouse_event(self, mouse_event: MouseEvent) -> None: