diff --git a/TermTk/TTkCore/shortcut.py b/TermTk/TTkCore/shortcut.py index 457a02de..90a30b60 100644 --- a/TermTk/TTkCore/shortcut.py +++ b/TermTk/TTkCore/shortcut.py @@ -75,6 +75,14 @@ class TTkShortcut(): TTkShortcut._shortcuts[key] = [] TTkShortcut._shortcuts[key].append(self) + def dispose(self): + self.activated.clear() + if self._key in TTkShortcut._shortcuts: + if self in TTkShortcut._shortcuts[self._key]: + TTkShortcut._shortcuts[self._key].remove(self) + if not TTkShortcut._shortcuts[self._key]: + del TTkShortcut._shortcuts[self._key] + @staticmethod def processKey(key, focusWidget): # TTkLog.debug(f"{str(key)=}") diff --git a/TermTk/TTkWidgets/frame.py b/TermTk/TTkWidgets/frame.py index 4d5ba29e..6f93c48b 100644 --- a/TermTk/TTkWidgets/frame.py +++ b/TermTk/TTkWidgets/frame.py @@ -72,6 +72,15 @@ class TTkFrame(TTkContainer): super().__init__(*args, **kwargs) self.setBorder(self._border) + def dispose(self): + if self._menubarTop: + self._menubarTop.dispose() + if self._menubarBottom: + self._menubarBottom.dispose() + self._menubarTop = None + self._menubarBottom = None + super().dispose() + def newMenubarTop(self): '''newMenubarTop diff --git a/TermTk/TTkWidgets/menubar.py b/TermTk/TTkWidgets/menubar.py index 6e52920a..dc2ec1f0 100644 --- a/TermTk/TTkWidgets/menubar.py +++ b/TermTk/TTkWidgets/menubar.py @@ -80,9 +80,10 @@ class TTkMenuBarButton(TTkMenuButton): class TTkMenuBarLayout(TTkHBoxLayout): '''TTkMenuBarLayout''' - __slots__ = ('_itemsLeft', '_itemsCenter', '_itemsRight', '_buttons') + __slots__ = ('_itemsLeft', '_itemsCenter', '_itemsRight', '_buttons', '_shortcuts') def __init__(self, *args, **kwargs): self._buttons = [] + self._shortcuts = [] TTkHBoxLayout.__init__(self, *args, **kwargs) self._itemsLeft = TTkHBoxLayout() self._itemsCenter = TTkHBoxLayout() @@ -101,6 +102,7 @@ class TTkMenuBarLayout(TTkHBoxLayout): for ch in shortcuts: shortcut = TTkShortcut(key=TTkK.ALT | ord(ch.upper())) shortcut.activated.connect(button.shortcutEvent) + self._shortcuts.append(shortcut) self._mbItems(alignment).addWidget(button) self._buttons.append(button) self.update() @@ -121,3 +123,9 @@ class TTkMenuBarLayout(TTkHBoxLayout): self._itemsLeft.removeItems(self._itemsLeft.children()) self._itemsCenter.removeItems(self._itemsCenter.children()) self._itemsRight.removeItems(self._itemsRight.children()) + + def dispose(self): + for sc in self._shortcuts: + sc.dispose() + self._shortcuts = [] +