mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
@@ -540,7 +540,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
severity,
|
severity,
|
||||||
)
|
)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
self.on_exception(error)
|
self._handle_exception(error)
|
||||||
|
|
||||||
def action_screenshot(self, path: str | None = None) -> None:
|
def action_screenshot(self, path: str | None = None) -> None:
|
||||||
"""Action to save a screenshot."""
|
"""Action to save a screenshot."""
|
||||||
@@ -964,9 +964,9 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
if self.mouse_over != widget:
|
if self.mouse_over != widget:
|
||||||
try:
|
try:
|
||||||
if self.mouse_over is not None:
|
if self.mouse_over is not None:
|
||||||
await self.mouse_over.forward_event(events.Leave(self))
|
await self.mouse_over._forward_event(events.Leave(self))
|
||||||
if widget is not None:
|
if widget is not None:
|
||||||
await widget.forward_event(events.Enter(self))
|
await widget._forward_event(events.Enter(self))
|
||||||
finally:
|
finally:
|
||||||
self.mouse_over = widget
|
self.mouse_over = widget
|
||||||
|
|
||||||
@@ -1005,7 +1005,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
self._exit_renderables.extend(pre_rendered)
|
self._exit_renderables.extend(pre_rendered)
|
||||||
self._close_messages_no_wait()
|
self._close_messages_no_wait()
|
||||||
|
|
||||||
def on_exception(self, error: Exception) -> None:
|
def _handle_exception(self, error: Exception) -> None:
|
||||||
"""Called with an unhandled exception.
|
"""Called with an unhandled exception.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -1071,7 +1071,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
self.CSS, path=app_css_path, is_default_css=False
|
self.CSS, path=app_css_path, is_default_css=False
|
||||||
)
|
)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
self.on_exception(error)
|
self._handle_exception(error)
|
||||||
self._print_error_renderables()
|
self._print_error_renderables()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -1094,7 +1094,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
await ready_callback()
|
await ready_callback()
|
||||||
await process_messages()
|
await process_messages()
|
||||||
await self.animator.stop()
|
await self.animator.stop()
|
||||||
await self.close_all()
|
await self._close_all()
|
||||||
|
|
||||||
self._running = True
|
self._running = True
|
||||||
try:
|
try:
|
||||||
@@ -1120,7 +1120,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
finally:
|
finally:
|
||||||
driver.stop_application_mode()
|
driver.stop_application_mode()
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
self.on_exception(error)
|
self._handle_exception(error)
|
||||||
finally:
|
finally:
|
||||||
self._running = False
|
self._running = False
|
||||||
self._print_error_renderables()
|
self._print_error_renderables()
|
||||||
@@ -1221,7 +1221,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
async def _disconnect_devtools(self):
|
async def _disconnect_devtools(self):
|
||||||
await self.devtools.disconnect()
|
await self.devtools.disconnect()
|
||||||
|
|
||||||
def start_widget(self, parent: Widget, widget: Widget) -> None:
|
def _start_widget(self, parent: Widget, widget: Widget) -> None:
|
||||||
"""Start a widget (run it's task) so that it can receive messages.
|
"""Start a widget (run it's task) so that it can receive messages.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -1235,7 +1235,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
def is_mounted(self, widget: Widget) -> bool:
|
def is_mounted(self, widget: Widget) -> bool:
|
||||||
return widget in self._registry
|
return widget in self._registry
|
||||||
|
|
||||||
async def close_all(self) -> None:
|
async def _close_all(self) -> None:
|
||||||
while self._registry:
|
while self._registry:
|
||||||
child = self._registry.pop()
|
child = self._registry.pop()
|
||||||
await child._close_messages()
|
await child._close_messages()
|
||||||
@@ -1279,7 +1279,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
try:
|
try:
|
||||||
console.print(renderable)
|
console.print(renderable)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
self.on_exception(error)
|
self._handle_exception(error)
|
||||||
finally:
|
finally:
|
||||||
self._end_update()
|
self._end_update()
|
||||||
console.file.flush()
|
console.file.flush()
|
||||||
@@ -1348,16 +1348,16 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
if isinstance(event, events.Key) and self.focused is not None:
|
if isinstance(event, events.Key) and self.focused is not None:
|
||||||
# Key events are sent direct to focused widget
|
# Key events are sent direct to focused widget
|
||||||
if self.bindings.allow_forward(event.key):
|
if self.bindings.allow_forward(event.key):
|
||||||
await self.focused.forward_event(event)
|
await self.focused._forward_event(event)
|
||||||
else:
|
else:
|
||||||
# Key has allow_forward=False which disallows forward to focused widget
|
# Key has allow_forward=False which disallows forward to focused widget
|
||||||
await super().on_event(event)
|
await super().on_event(event)
|
||||||
else:
|
else:
|
||||||
# Forward the event to the view
|
# Forward the event to the view
|
||||||
await self.screen.forward_event(event)
|
await self.screen._forward_event(event)
|
||||||
elif isinstance(event, events.Paste):
|
elif isinstance(event, events.Paste):
|
||||||
if self.focused is not None:
|
if self.focused is not None:
|
||||||
await self.focused.forward_event(event)
|
await self.focused._forward_event(event)
|
||||||
else:
|
else:
|
||||||
await super().on_event(event)
|
await super().on_event(event)
|
||||||
|
|
||||||
@@ -1514,7 +1514,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
async def action_toggle_class(self, selector: str, class_name: str) -> None:
|
async def action_toggle_class(self, selector: str, class_name: str) -> None:
|
||||||
self.screen.query(selector).toggle_class(class_name)
|
self.screen.query(selector).toggle_class(class_name)
|
||||||
|
|
||||||
def on_terminal_supports_synchronized_output(
|
def _on_terminal_supports_synchronized_output(
|
||||||
self, message: messages.TerminalSupportsSynchronizedOutput
|
self, message: messages.TerminalSupportsSynchronizedOutput
|
||||||
) -> None:
|
) -> None:
|
||||||
log("[b green]SynchronizedOutput mode is supported")
|
log("[b green]SynchronizedOutput mode is supported")
|
||||||
|
|||||||
@@ -327,7 +327,7 @@ class MessagePump(metaclass=MessagePumpMeta):
|
|||||||
except CancelledError:
|
except CancelledError:
|
||||||
raise
|
raise
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
self.app.on_exception(error)
|
self.app._handle_exception(error)
|
||||||
break
|
break
|
||||||
finally:
|
finally:
|
||||||
self._message_queue.task_done()
|
self._message_queue.task_done()
|
||||||
@@ -340,7 +340,7 @@ class MessagePump(metaclass=MessagePumpMeta):
|
|||||||
try:
|
try:
|
||||||
await invoke(method, event)
|
await invoke(method, event)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
self.app.on_exception(error)
|
self.app._handle_exception(error)
|
||||||
break
|
break
|
||||||
|
|
||||||
log("CLOSED", self)
|
log("CLOSED", self)
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ class Screen(Widget):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
self.app.on_exception(error)
|
self.app._handle_exception(error)
|
||||||
return
|
return
|
||||||
display_update = self._compositor.render(full=full)
|
display_update = self._compositor.render(full=full)
|
||||||
if display_update is not None:
|
if display_update is not None:
|
||||||
@@ -277,9 +277,9 @@ class Screen(Widget):
|
|||||||
style=event.style,
|
style=event.style,
|
||||||
)
|
)
|
||||||
mouse_event.set_forwarded()
|
mouse_event.set_forwarded()
|
||||||
await widget.forward_event(mouse_event)
|
await widget._forward_event(mouse_event)
|
||||||
|
|
||||||
async def forward_event(self, event: events.Event) -> None:
|
async def _forward_event(self, event: events.Event) -> None:
|
||||||
if event.is_forwarded:
|
if event.is_forwarded:
|
||||||
return
|
return
|
||||||
event.set_forwarded()
|
event.set_forwarded()
|
||||||
@@ -307,7 +307,7 @@ class Screen(Widget):
|
|||||||
event.set_forwarded()
|
event.set_forwarded()
|
||||||
await self.post_message(event)
|
await self.post_message(event)
|
||||||
else:
|
else:
|
||||||
await widget.forward_event(event.offset(-region.x, -region.y))
|
await widget._forward_event(event.offset(-region.x, -region.y))
|
||||||
|
|
||||||
elif isinstance(event, (events.MouseScrollDown, events.MouseScrollUp)):
|
elif isinstance(event, (events.MouseScrollDown, events.MouseScrollUp)):
|
||||||
try:
|
try:
|
||||||
@@ -319,6 +319,6 @@ class Screen(Widget):
|
|||||||
if scroll_widget is self:
|
if scroll_widget is self:
|
||||||
await self.post_message(event)
|
await self.post_message(event)
|
||||||
else:
|
else:
|
||||||
await scroll_widget.forward_event(event)
|
await scroll_widget._forward_event(event)
|
||||||
else:
|
else:
|
||||||
await self.post_message(event)
|
await self.post_message(event)
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ class Timer:
|
|||||||
await invoke(self._callback)
|
await invoke(self._callback)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
app = active_app.get()
|
app = active_app.get()
|
||||||
app.on_exception(error)
|
app._handle_exception(error)
|
||||||
else:
|
else:
|
||||||
event = events.Timer(
|
event = events.Timer(
|
||||||
self.sender,
|
self.sender,
|
||||||
|
|||||||
@@ -430,7 +430,7 @@ class Widget(DOMNode):
|
|||||||
if self._scrollbar_corner is not None:
|
if self._scrollbar_corner is not None:
|
||||||
return self._scrollbar_corner
|
return self._scrollbar_corner
|
||||||
self._scrollbar_corner = ScrollBarCorner()
|
self._scrollbar_corner = ScrollBarCorner()
|
||||||
self.app.start_widget(self, self._scrollbar_corner)
|
self.app._start_widget(self, self._scrollbar_corner)
|
||||||
return self._scrollbar_corner
|
return self._scrollbar_corner
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -447,7 +447,7 @@ class Widget(DOMNode):
|
|||||||
self._vertical_scrollbar = scroll_bar = ScrollBar(
|
self._vertical_scrollbar = scroll_bar = ScrollBar(
|
||||||
vertical=True, name="vertical", thickness=self.scrollbar_size_vertical
|
vertical=True, name="vertical", thickness=self.scrollbar_size_vertical
|
||||||
)
|
)
|
||||||
self.app.start_widget(self, scroll_bar)
|
self.app._start_widget(self, scroll_bar)
|
||||||
return scroll_bar
|
return scroll_bar
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -465,7 +465,7 @@ class Widget(DOMNode):
|
|||||||
vertical=False, name="horizontal", thickness=self.scrollbar_size_horizontal
|
vertical=False, name="horizontal", thickness=self.scrollbar_size_horizontal
|
||||||
)
|
)
|
||||||
|
|
||||||
self.app.start_widget(self, scroll_bar)
|
self.app._start_widget(self, scroll_bar)
|
||||||
return scroll_bar
|
return scroll_bar
|
||||||
|
|
||||||
def _refresh_scrollbars(self) -> None:
|
def _refresh_scrollbars(self) -> None:
|
||||||
@@ -1338,7 +1338,7 @@ class Widget(DOMNode):
|
|||||||
offset_x, offset_y = self.screen.get_offset(self)
|
offset_x, offset_y = self.screen.get_offset(self)
|
||||||
return self.screen.get_style_at(x + offset_x, y + offset_y)
|
return self.screen.get_style_at(x + offset_x, y + offset_y)
|
||||||
|
|
||||||
async def forward_event(self, event: events.Event) -> None:
|
async def _forward_event(self, event: events.Event) -> None:
|
||||||
event.set_forwarded()
|
event.set_forwarded()
|
||||||
await self.post_message(event)
|
await self.post_message(event)
|
||||||
|
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ class AppTest(App):
|
|||||||
|
|
||||||
await let_asyncio_process_some_events()
|
await let_asyncio_process_some_events()
|
||||||
|
|
||||||
def on_exception(self, error: Exception) -> None:
|
def _handle_exception(self, error: Exception) -> None:
|
||||||
# In tests we want the errors to be raised, rather than printed to a Console
|
# In tests we want the errors to be raised, rather than printed to a Console
|
||||||
raise error
|
raise error
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user