diff --git a/src/textual/_node_list.py b/src/textual/_node_list.py index b8d16f2f4..8bfcd584d 100644 --- a/src/textual/_node_list.py +++ b/src/textual/_node_list.py @@ -40,18 +40,31 @@ class NodeList: return widget in self._nodes def _append(self, widget: Widget) -> None: + """Append a Widget. + + Args: + widget (Widget): A widget. + """ if widget not in self._nodes_set: self._nodes.append(widget) self._nodes_set.add(widget) self._updates += 1 def _remove(self, widget: Widget) -> None: + """Remove a widget from the list. + + Removing a widget not in the list is a null-op. + + Args: + widget (Widget): A Widget in the list. + """ if widget in self._nodes_set: del self._nodes[self._nodes.index(widget)] self._nodes_set.remove(widget) self._updates += 1 def _clear(self) -> None: + """Clear the node list.""" if self._nodes: self._nodes.clear() self._nodes_set.clear() diff --git a/src/textual/app.py b/src/textual/app.py index bb32b3555..68912f63f 100644 --- a/src/textual/app.py +++ b/src/textual/app.py @@ -603,7 +603,7 @@ class App(Generic[ReturnType], DOMNode): as keyword args they will be assigned an id of the key. """ - self.register(self.screen, *anon_widgets, **widgets) + self._register(self.screen, *anon_widgets, **widgets) def mount_all(self, widgets: Iterable[Widget]) -> None: """Mount widgets from an iterable. @@ -612,7 +612,7 @@ class App(Generic[ReturnType], DOMNode): widgets (Iterable[Widget]): An iterable of widgets. """ for widget in widgets: - self.register(self.screen, widget) + self._register(self.screen, widget) def push_screen(self, screen: Screen | None = None) -> Screen: """Push a new screen on the screen stack. @@ -856,7 +856,7 @@ class App(Generic[ReturnType], DOMNode): return True return False - def register( + def _register( self, parent: DOMNode, *anon_widgets: Widget, **widgets: Widget ) -> None: """Mount widget(s) so they may receive events. @@ -878,13 +878,13 @@ class App(Generic[ReturnType], DOMNode): widget.id = widget_id self._register_child(parent, widget) if widget.children: - self.register(widget, *widget.children) + self._register(widget, *widget.children) apply_stylesheet(widget) for _widget_id, widget in name_widgets: widget.post_message_no_wait(events.Mount(sender=parent)) - def unregister(self, widget: Widget) -> None: + def _unregister(self, widget: Widget) -> None: """Unregister a widget. Args: @@ -1016,7 +1016,7 @@ class App(Generic[ReturnType], DOMNode): # If the event has been forwarded it may have bubbled up back to the App if isinstance(event, events.Mount): screen = Screen() - self.register(self, screen) + self._register(self, screen) self.push_screen(screen) await super().on_event(event) diff --git a/src/textual/message_pump.py b/src/textual/message_pump.py index 085b30207..8940b95b2 100644 --- a/src/textual/message_pump.py +++ b/src/textual/message_pump.py @@ -219,7 +219,7 @@ class MessagePump: print(self, "close_messages") self._closing = True await self._message_queue.put(MessagePriority(None)) - self.app.unregister(self) + self.app._unregister(self) cancel_tasks = list(self._child_tasks) for task in cancel_tasks: task.cancel() diff --git a/src/textual/widget.py b/src/textual/widget.py index 2876df3bb..652c4b384 100644 --- a/src/textual/widget.py +++ b/src/textual/widget.py @@ -191,7 +191,7 @@ class Widget(DOMNode): """ - self.app.register(self, *anon_widgets, **widgets) + self.app._register(self, *anon_widgets, **widgets) self.screen.refresh() def compose(self) -> ComposeResult: