mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
error on self pop
This commit is contained in:
@@ -2514,13 +2514,18 @@ class App(Generic[ReturnType], DOMNode):
|
||||
Returns:
|
||||
The screen that was replaced.
|
||||
"""
|
||||
|
||||
_rich_traceback_omit = True
|
||||
screen_stack = self._screen_stack
|
||||
if len(screen_stack) <= 1:
|
||||
raise ScreenStackError(
|
||||
"Can't pop screen; there must be at least one screen on the stack"
|
||||
)
|
||||
|
||||
if active_message_pump.get() is self.screen:
|
||||
raise ScreenError(
|
||||
f"Can't pop screen {self.screen} from it's own message loop; Consider using the @work decorator."
|
||||
)
|
||||
|
||||
previous_screen = screen_stack.pop()
|
||||
previous_screen._pop_result_callback()
|
||||
self.screen.post_message(events.ScreenResume())
|
||||
|
||||
@@ -7,7 +7,7 @@ import threading
|
||||
import pytest
|
||||
|
||||
from textual import work
|
||||
from textual.app import App, ComposeResult, ScreenStackError
|
||||
from textual.app import App, ComposeResult, ScreenError, ScreenStackError
|
||||
from textual.events import MouseMove
|
||||
from textual.geometry import Offset
|
||||
from textual.screen import Screen
|
||||
@@ -624,3 +624,20 @@ async def test_worker_cancellation():
|
||||
# Press enter to activate button to dismiss them
|
||||
await pilot.press("enter")
|
||||
await pilot.press("enter")
|
||||
|
||||
|
||||
async def test_self_pop_screen():
|
||||
"""Regression test for https://github.com/Textualize/textual/issues/5008"""
|
||||
|
||||
class MyScreen(Screen):
|
||||
def on_mount(self):
|
||||
self.app.pop_screen()
|
||||
|
||||
class PopApp(App):
|
||||
def on_mount(self) -> None:
|
||||
self.push_screen(MyScreen())
|
||||
|
||||
app = PopApp()
|
||||
with pytest.raises(ScreenError):
|
||||
async with app.run_test() as pilot:
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user