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):
|
async def on_mount(self):
|
||||||
"""Build layout here."""
|
"""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(
|
uber1 = Widget(
|
||||||
Placeholder(id="child1", classes="list-item"),
|
Placeholder(id="child1", classes="list-item"),
|
||||||
Placeholder(id="child2", classes="list-item"),
|
Placeholder(id="child2", classes="list-item"),
|
||||||
@@ -38,7 +32,6 @@ class BasicApp(App):
|
|||||||
Placeholder(classes="list-item"),
|
Placeholder(classes="list-item"),
|
||||||
)
|
)
|
||||||
self.mount(uber1=uber1)
|
self.mount(uber1=uber1)
|
||||||
await first_child.focus()
|
|
||||||
|
|
||||||
async def on_key(self, event: events.Key) -> None:
|
async def on_key(self, event: events.Key) -> None:
|
||||||
await self.dispatch_key(event)
|
await self.dispatch_key(event)
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ class App(Generic[ReturnType], DOMNode):
|
|||||||
if node is None:
|
if node is None:
|
||||||
pop()
|
pop()
|
||||||
else:
|
else:
|
||||||
if node.is_container and node.can_focus:
|
if node.is_container and node.can_focus_children:
|
||||||
push(iter(node.focusable_children))
|
push(iter(node.focusable_children))
|
||||||
else:
|
else:
|
||||||
if node.can_focus:
|
if node.can_focus:
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class RenderCache(NamedTuple):
|
|||||||
class Widget(DOMNode):
|
class Widget(DOMNode):
|
||||||
|
|
||||||
can_focus: bool = False
|
can_focus: bool = False
|
||||||
|
can_focus_children: bool = True
|
||||||
|
|
||||||
CSS = """
|
CSS = """
|
||||||
"""
|
"""
|
||||||
@@ -347,9 +348,12 @@ class Widget(DOMNode):
|
|||||||
x=self.scroll_target_x + self.container_size.width, animate=animate
|
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__()
|
super().__init_subclass__()
|
||||||
cls.can_focus = can_focus
|
cls.can_focus = can_focus
|
||||||
|
cls.can_focus_children = can_focus_children
|
||||||
|
|
||||||
def __rich_repr__(self) -> rich.repr.Result:
|
def __rich_repr__(self) -> rich.repr.Result:
|
||||||
yield "id", self.id, None
|
yield "id", self.id, None
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ class Focusable(Widget, can_focus=True):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class NonFocusable(Widget, can_focus=False):
|
class NonFocusable(Widget, can_focus=False, can_focus_children=False):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user