diff options
author | António Fernandes <antoniof@gnome.org> | 2020-04-18 23:43:54 +0100 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2020-04-20 15:29:27 +0000 |
commit | a4d7148210970c5eb874df736b900f577684a13b (patch) | |
tree | 96645844bc32914bb8203abd318bd925babb0c1b | |
parent | 83b34e15a5f8e616efe8f52883036d1860bf9f07 (diff) | |
download | nautilus-a4d7148210970c5eb874df736b900f577684a13b.tar.gz |
files-view: Cancel kinetic deceleration on loading
If we change location while the view is still scrolling due to
kinetic deceleration, we get a sudden jump to the same scrolling
position as the previous location, as well as residual scrolling
movement in the new location.
This is both undesirable and unexpected from a user POV.
Workaround that by canceling deceleration when switching locations.
Fixes https://gitlab.gnome.org/GNOME/nautilus/-/issues/1452
-rw-r--r-- | src/nautilus-files-view.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c index 9dbb0bb0f..dbeda6123 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -8516,6 +8516,26 @@ load_directory (NautilusFilesView *view, setup_loading_floating_bar (view); + /* HACK: Fix for https://gitlab.gnome.org/GNOME/nautilus/-/issues/1452 */ + { + GtkScrolledWindow *content = GTK_SCROLLED_WINDOW (priv->scrolled_window); + + /* If we load a new location while the view is still scrolling due to + * kinetic deceleration, we get a sudden jump to the same scrolling + * position as the previous location, as well as residual scrolling + * movement in the new location. + * + * This is both undesirable and unexpected from a user POV, so we want + * to abort deceleration when switching locations. + * + * However, gtk_scrolled_window_cancel_deceleration() is private. So, + * we make use of an undocumented behavior of ::set_kinetic_scrolling(), + * which calls ::cancel_deceleration() when set to FALSE. + */ + gtk_scrolled_window_set_kinetic_scrolling (content, FALSE); + gtk_scrolled_window_set_kinetic_scrolling (content, TRUE); + } + /* Update menus when directory is empty, before going to new * location, so they won't have any false lingering knowledge * of old selection. |