From 69411f08d70df5b01f4e4a3f087870a32d485706 Mon Sep 17 00:00:00 2001 From: hoteira Date: Wed, 18 Feb 2026 22:26:12 +0100 Subject: [PATCH 1/2] fix(ListView): clear stuck hover state during scrollbar drag --- src/textual/widgets/_list_view.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/textual/widgets/_list_view.py b/src/textual/widgets/_list_view.py index f6e1ece423..7870e9658c 100644 --- a/src/textual/widgets/_list_view.py +++ b/src/textual/widgets/_list_view.py @@ -394,3 +394,12 @@ def _on_list_item__child_clicked(self, event: ListItem._ChildClicked) -> None: def __len__(self) -> int: """Compute the length (in number of items) of the list view.""" return len(self._nodes) + + def _on_scroll_to(self, message) -> None: + """Clear any stuck hovered items that the mouse is no longer over""" + hovered = self.query(".-hovered") + if hovered: + for item in hovered: + if not item.is_mouse_over: + item.set_class(False, "-hovered") + super()._on_scroll_to(message) \ No newline at end of file From 8b60199505c46f255059304374c6701188333cf9 Mon Sep 17 00:00:00 2001 From: hoteira Date: Fri, 20 Feb 2026 12:27:33 +0100 Subject: [PATCH 2/2] Removed any hover interaction when dragging the scrollbar as suggested by @TomJGooding --- src/textual/widgets/_list_item.py | 4 +++- src/textual/widgets/_list_view.py | 11 +---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/textual/widgets/_list_item.py b/src/textual/widgets/_list_item.py index 0df949c1be..b0b2d29347 100644 --- a/src/textual/widgets/_list_item.py +++ b/src/textual/widgets/_list_item.py @@ -35,5 +35,7 @@ def watch_highlighted(self, value: bool) -> None: @on(events.Enter) @on(events.Leave) def on_enter_or_leave(self, event: events.Enter | events.Leave) -> None: + """Remove mouse hover when dragging the scrollbar""" event.stop() - self.set_class(self.is_mouse_over, "-hovered") + mouse_captured = self.app.mouse_captured is not None + self.set_class(self.is_mouse_over and not mouse_captured, "-hovered") diff --git a/src/textual/widgets/_list_view.py b/src/textual/widgets/_list_view.py index 7870e9658c..536b800973 100644 --- a/src/textual/widgets/_list_view.py +++ b/src/textual/widgets/_list_view.py @@ -393,13 +393,4 @@ def _on_list_item__child_clicked(self, event: ListItem._ChildClicked) -> None: def __len__(self) -> int: """Compute the length (in number of items) of the list view.""" - return len(self._nodes) - - def _on_scroll_to(self, message) -> None: - """Clear any stuck hovered items that the mouse is no longer over""" - hovered = self.query(".-hovered") - if hovered: - for item in hovered: - if not item.is_mouse_over: - item.set_class(False, "-hovered") - super()._on_scroll_to(message) \ No newline at end of file + return len(self._nodes) \ No newline at end of file