baca icon indicating copy to clipboard operation
baca copied to clipboard

Glitchy scrolling with (touchpad emulated) mouse wheel

Open xiota opened this issue 2 years ago • 6 comments

Using (touchpad emulated) mouse wheel to scroll with current git checkout (6318c717cfc4c3d88ac34e1624fae48e8dfab584). Looks like the scroll overshoots a little then bounces back, on each line. Does not occur with epy.

xiota avatar May 31 '23 00:05 xiota

That's weird, I cannot replicate it, is there anymore details to recreate it? Does it work on different terminals?

wustho avatar Jun 02 '23 00:06 wustho

Arch Linux. Don't really know what's relevant. It's present in all combinations of the following that I've tried:

  • bash, zsh
  • kitty, konsole, xfce4-terminal, xterm, uxterm
  • Wayland: Plasma
  • X11: Plasma, XFCE

I'm scrolling with a touchpad. Maybe it's a hardware issue. I know some touchpads report scroll behavior differently from the wheel on a mouse. Sorry for inaccurate description. Have edited to clarify.

xiota avatar Jun 02 '23 01:06 xiota

Tested with an external mouse. Same problem.

~~Tried compiling with nuitka, and the problem is absent/reduced, so scrolling may be affected by some processing. Does baca perform some calculations in a loop that epy doesn't?~~

Occasionally, the glitchy scrolling does not occur, but far more often it does. (Out of all testing so far, only 2-3 times it was not glitchy.)

xiota avatar Jun 04 '23 03:06 xiota

I was poking around in the code and found this:

contents.py (L158-L162):

    def on_mouse_scroll_down(self, _: events.MouseScrollDown) -> None:
        self.screen.scroll_down()

    def on_mouse_scroll_up(self, _: events.MouseScrollUp) -> None:
        self.screen.scroll_up()

Changing it to the following (based on Textual: widget.py) corrects the scrolling behavior:

    def on_mouse_scroll_down(self, _: events.MouseScrollDown) -> None:
        if self._scroll_down_for_pointer(animate=False):
            event.stop()

    def on_mouse_scroll_up(self, _: events.MouseScrollUp) -> None:
        if self._scroll_up_for_pointer(animate=False):
            event.stop()

xiota avatar Jun 04 '23 05:06 xiota

Switching to self.scroll_*() also seems to work. Glitchiness only occurs with self.screen.scroll_*().

xiota avatar Jun 04 '23 05:06 xiota

Did some more testing.

  • Version of textual on my computer with glitchy scrolling is v0.27.0. On another computer with the same version of textual, scroll behavior is the same. (Installing baca on Arch using AUR package.)
  • Installing with pipx install baca uses textual v0.16.0 with scrolling behaving as expected. Changing from self.screen.scroll_*() to self.scroll_*() results in no response to the scroll wheel (no scrolling).
  • Updating textual to v0.17.0 in pipx venv results in glitchy scroll behavior.

xiota avatar Jun 08 '23 03:06 xiota