prompt-toolkit / python-prompt-toolkit

Library for building powerful interactive command line applications in Python
https://python-prompt-toolkit.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
9.28k stars 715 forks source link

Allow nested scrolling of Windows #1701

Open joouha opened 1 year ago

joouha commented 1 year ago

These changes mean that Windows will return NotImplemented when attempting to scroll beyond their scrollable limits.

This means mouse scroll events can bubble up to a scrollable parent container when a window has finished scrolling.

In the following screen recording, you can see that when the TextArea moves under the mouse while scrolling the parent pane, it begins scrolling, and when the TextArea has scrolled all the way to the bottom, the parent pane resumes scrolling:

nested-scrolling.webm

I've also changed the reported line-count of the DummyControl to 1 rather than 100*100 for this to work. Without this, Windows without content believe their DummyControl is always scrollable and accept all scroll events. I can't find any issues with doing this - why was the DummyControl's content's line count set to 100*100?

joouha commented 11 months ago

I don't think the test failures are related to the proposed changes

joouha commented 8 months ago

I've rebased and fixed the issues with checks.

This would also allow implementing a wrapping Container which can automatically disable mouse support for an app if you've scrolled to the top, allowing the terminal scrollback buffer to be scrolled instead.

Screencast_20240117_193406-1.webm