A few years ago, I wrote a post about scrolling in GTK+ 3. Time for another look!
The common case
The basic idea of the changes described back then is still the same. We expect touchpad (or track point) scrolling to be one of the most common forms of scrolling, and the scrollbar operates as a narrow indicator for this.
As you can see, we change the cursor to indicate scrolling, and it you can freely scroll in all directions. It is kinetic, too.
Classical scrolling
Of course, it is still possible to just click and drag the slider, for classical scrolling.
Another aspect of ‘classical’ scrolling is that you can click on the trough outside the slider, and either warp the position to where you clicked, or jump in page-size increments.
By default, a primary click warps, and Shift-primary click goes by pages. We just added back middle click as an alternative to Shift-primary click, since this is a common alternative that many people are used to. For mainly historical reasons, GTK+ has a setting, gtk-primary-button-warps-slider, which switches the roles of primary click and Shift-primary click for this.
The typical keyboard shortcuts (Page Up, Page Down, Home, End) let you control scrolling with the keyboard.
Smooth scrolling
There’s more to scrolling in GTK+ that you may not know about. One feature that we introduced long ago is a ‘zoom’ or ‘fine adjustment’ mode, which slows the scrolling down to allow pixel-precise positioning.
To trigger this mode you can either use a long press or shift-click in the slider. As you can see in the video, once you move the pointer below or above the scrollbar, it will keep scrolling at the same relaxed speed until you let go.
As a variation on this theme, more recently we added a variable speed variant of smooth scrolling.
To trigger it, you secondary click in the trough outside the slider. Once the scrolling starts, you can control the speed by moving the pointer closer or farther away from the scrollbar. This is pretty addictive, once you’ve discovered it!
Custom locations
As the last feature, applications can add a context menu that gets triggered by secondary click on the slider, and make it scroll to important positions.
Thats it, scroll on!
It’s cool but it’s not what I call smooth scrolling:
https://bugzilla.gnome.org/show_bug.cgi?id=774261
Thanks. Didn’t knew the variable speed smooth scrolling.
Works fine in Nautilus, but (as usual) not in the WebView of WebKit2 and I tried it several times in Epiphany, until I figured out that this was always problematic.
> As you can see in the video, once you move the pointer below or above the scrollbar, it will keep scrolling at the same relaxed speed until you let go.
This does not work for me at all. When I stop moving the mouse in “slow scroll” mode, it stops the scrolling, no matter where my mouse is.
Is this a bug? I’m running gtk3-3.22.21-1.fc26.x86_64 (Fedora 26) and I can reproduce this with most gtk3 applications including nautilus and gtk3-demo.
Great post!
Chris: same here on 3.22.24, Debian unstable, x11.
I wonder if it’s to do with the recent changes around grabs on ranges.
Maybe a bit offtopic, but since GTK supports kinetic scrolling why GNOME WEB doesnt have that? Because in reality kinetic scrolling is mostly useful when scrolling on the web pages.
The zoom / fine-adjustment mode only works if the mouse pointer is beyond both the X and Y co-ordinates of the scrollbar. Otherwise, not.
Kinetic scrolling works for me with epiphany-3.26.x and webkitgtk-2.18.0. The main issue there is that WebKitWebView doesn’t use GtkScrolledWindow, but has its own implementation. So features like kinetic scrolling need to be separately implemented. You might be having an older version.
for whatever reason, right-click/zoom scrolling seems to be working here now, on 3.22.25. yay!
(not much point approving either of these comments; I was misremembering; right-click has always been OK, but long-press still doesn’t move unless you’re moving the mouse, unlike the description/video indicate)