Refresh scrollbars when overflow changes.

This commit is contained in:
Rodrigo Girão Serrão
2023-01-23 18:00:37 +00:00
parent 33724e4697
commit bb1e8d2eec
2 changed files with 18 additions and 2 deletions

View File

@@ -701,6 +701,9 @@ class StringEnumProperty:
"""
return obj.get_rule(self.name, self._default)
def _before_refresh(self, obj: StylesBase, value: str | None) -> None:
"""Do any housekeeping before asking for a layout refresh after a value change."""
def __set__(self, obj: StylesBase, value: str | None = None):
"""Set the string property and ensure it is in the set of allowed values.
@@ -714,6 +717,7 @@ class StringEnumProperty:
_rich_traceback_omit = True
if value is None:
if obj.clear_rule(self.name):
self._before_refresh(obj, value)
obj.refresh(layout=self._layout)
else:
if value not in self._valid_values:
@@ -726,9 +730,20 @@ class StringEnumProperty:
),
)
if obj.set_rule(self.name, value):
self._before_refresh(obj, value)
obj.refresh(layout=self._layout)
class OverflowProperty(StringEnumProperty):
"""Descriptor for overflow styles that forces widgets to refresh scrollbars."""
def _before_refresh(self, obj: StylesBase, value: str | None) -> None:
from ..widget import Widget # Avoid circular import
if isinstance(obj.node, Widget):
obj.node._refresh_scrollbars()
class NameProperty:
"""Descriptor for getting and setting name properties."""

View File

@@ -26,6 +26,7 @@ from ._style_properties import (
NameListProperty,
NameProperty,
OffsetProperty,
OverflowProperty,
ScalarListProperty,
ScalarProperty,
SpacingProperty,
@@ -246,8 +247,8 @@ class StylesBase(ABC):
dock = DockProperty()
overflow_x = StringEnumProperty(VALID_OVERFLOW, "hidden")
overflow_y = StringEnumProperty(VALID_OVERFLOW, "hidden")
overflow_x = OverflowProperty(VALID_OVERFLOW, "hidden")
overflow_y = OverflowProperty(VALID_OVERFLOW, "hidden")
layer = NameProperty()
layers = NameListProperty()