add new can_focus_children attribute

This commit is contained in:
Will McGugan
2022-05-05 10:36:59 +01:00
parent 7ae4c73a7a
commit e382fc14b1
4 changed files with 7 additions and 10 deletions

View File

@@ -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)

View File

@@ -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:

View File

@@ -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

View File

@@ -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