mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
add new can_focus_children attribute
This commit is contained in:
@@ -23,12 +23,6 @@ class BasicApp(App):
|
||||
async def on_mount(self):
|
||||
"""Build layout here."""
|
||||
|
||||
uber2 = Widget()
|
||||
uber2.add_children(
|
||||
Widget(id="uber2-child1"),
|
||||
Widget(id="uber2-child2"),
|
||||
)
|
||||
first_child = Placeholder(id="child1", classes="list-item")
|
||||
uber1 = Widget(
|
||||
Placeholder(id="child1", classes="list-item"),
|
||||
Placeholder(id="child2", classes="list-item"),
|
||||
@@ -38,7 +32,6 @@ class BasicApp(App):
|
||||
Placeholder(classes="list-item"),
|
||||
)
|
||||
self.mount(uber1=uber1)
|
||||
await first_child.focus()
|
||||
|
||||
async def on_key(self, event: events.Key) -> None:
|
||||
await self.dispatch_key(event)
|
||||
|
||||
@@ -224,7 +224,7 @@ class App(Generic[ReturnType], DOMNode):
|
||||
if node is None:
|
||||
pop()
|
||||
else:
|
||||
if node.is_container and node.can_focus:
|
||||
if node.is_container and node.can_focus_children:
|
||||
push(iter(node.focusable_children))
|
||||
else:
|
||||
if node.can_focus:
|
||||
|
||||
@@ -65,6 +65,7 @@ class RenderCache(NamedTuple):
|
||||
class Widget(DOMNode):
|
||||
|
||||
can_focus: bool = False
|
||||
can_focus_children: bool = True
|
||||
|
||||
CSS = """
|
||||
"""
|
||||
@@ -347,9 +348,12 @@ class Widget(DOMNode):
|
||||
x=self.scroll_target_x + self.container_size.width, animate=animate
|
||||
)
|
||||
|
||||
def __init_subclass__(cls, can_focus: bool = True) -> None:
|
||||
def __init_subclass__(
|
||||
cls, can_focus: bool = True, can_focus_children: bool = True
|
||||
) -> None:
|
||||
super().__init_subclass__()
|
||||
cls.can_focus = can_focus
|
||||
cls.can_focus_children = can_focus_children
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "id", self.id, None
|
||||
|
||||
@@ -7,7 +7,7 @@ class Focusable(Widget, can_focus=True):
|
||||
pass
|
||||
|
||||
|
||||
class NonFocusable(Widget, can_focus=False):
|
||||
class NonFocusable(Widget, can_focus=False, can_focus_children=False):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user