Skip to content

Commit dbdcf27

Browse files
authored
skip if not mounted (#3847)
* skip if not mounted * avoid refresh before mount * micro op * ws
1 parent bac7119 commit dbdcf27

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

src/textual/css/styles.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -713,13 +713,15 @@ def get_rule(self, rule: str, default: object = None) -> object:
713713
def refresh(
714714
self, *, layout: bool = False, children: bool = False, parent: bool = False
715715
) -> None:
716-
if parent and self.node and self.node.parent:
717-
self.node.parent.refresh()
718-
if self.node is not None:
719-
self.node.refresh(layout=layout)
720-
if children:
721-
for child in self.node.walk_children(with_self=False, reverse=True):
722-
child.refresh(layout=layout)
716+
node = self.node
717+
if node is None or not node._is_mounted:
718+
return
719+
if parent and node._parent is not None:
720+
node._parent.refresh()
721+
node.refresh(layout=layout)
722+
if children:
723+
for child in node.walk_children(with_self=False, reverse=True):
724+
child.refresh(layout=layout)
723725

724726
def reset(self) -> None:
725727
"""Reset the rules to initial state."""
@@ -757,11 +759,12 @@ def extract_rules(
757759
A list containing a tuple of <RULE NAME>, <SPECIFICITY> <RULE VALUE>.
758760
"""
759761
is_important = self.important.__contains__
762+
default_rules = 0 if is_default_rules else 1
760763
rules: list[tuple[str, Specificity6, Any]] = [
761764
(
762765
rule_name,
763766
(
764-
0 if is_default_rules else 1,
767+
default_rules,
765768
1 if is_important(rule_name) else 0,
766769
*specificity,
767770
tie_breaker,

src/textual/css/stylesheet.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ def apply(
448448
for name in rules_map.keys() & node._selector_names
449449
for rule in rules_map[name]
450450
}
451-
rules = [rule for rule in reversed(self.rules) if rule in limit_rules]
451+
rules = list(filter(limit_rules.__contains__, reversed(self.rules)))
452452

453453
# Collect the rules defined in the stylesheet
454454
node._has_hover_style = any("hover" in rule.pseudo_classes for rule in rules)

src/textual/widget.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3121,6 +3121,8 @@ def refresh(
31213121
Returns:
31223122
The `Widget` instance.
31233123
"""
3124+
if not self._is_mounted:
3125+
return self
31243126
if layout:
31253127
self._layout_required = True
31263128
self._stabilize_scrollbar = None

0 commit comments

Comments
 (0)