[nautilus/wip/antoniof/scrolled-window-hack: 2/2] files-view: Cancel kinetic deceleration on loading



commit a4d7148210970c5eb874df736b900f577684a13b
Author: António Fernandes <antoniof gnome org>
Date:   Sat Apr 18 23:43:54 2020 +0100

    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

 src/nautilus-files-view.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
---
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.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]