summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Berla <corey@berla.me>2022-10-29 10:45:21 -0700
committerAntónio Fernandes <antoniof@gnome.org>2023-01-06 19:34:10 +0000
commiteef066c28cf2cfaf265c089fb9519a5c3e672d40 (patch)
tree429995758fd3162fd3cf2380a1291bd1f49ddf28
parentcc2809192a37bfdce9f98afd20e8840c35d5f949 (diff)
downloadnautilus-eef066c28cf2cfaf265c089fb9519a5c3e672d40.tar.gz
files-view: Only set discrete scrolling when ctrl is held
The scroll controller on the scrolled window in files view is set to discrete in order to accomodate for when CTRL+scroll (zoom) is performed. This however, causes problems with the scrolls that are propogated and have delta's <1 (especially when they are much much less 1). So instead let's set the discrete flag in scroll-begin only when CTRL is held and remove it in scroll-end. Fixes: https://gitlab.gnome.org/GNOME/nautilus/-/issues/2511
-rw-r--r--src/nautilus-files-view.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 0025ff393..13f256a95 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -9261,6 +9261,28 @@ on_scroll (GtkEventControllerScroll *scroll,
}
static void
+on_scroll_begin (GtkEventControllerScroll *scroll,
+ gpointer user_data)
+{
+ GdkModifierType state;
+
+ state = gtk_event_controller_get_current_event_state (GTK_EVENT_CONTROLLER (scroll));
+ if (state & GDK_CONTROL_MASK)
+ {
+ gtk_event_controller_scroll_set_flags (scroll,
+ GTK_EVENT_CONTROLLER_SCROLL_VERTICAL |
+ GTK_EVENT_CONTROLLER_SCROLL_DISCRETE);
+ }
+}
+
+static void
+on_scroll_end (GtkEventControllerScroll *scroll,
+ gpointer user_data)
+{
+ gtk_event_controller_scroll_set_flags (scroll, GTK_EVENT_CONTROLLER_SCROLL_VERTICAL);
+}
+
+static void
on_parent_changed (GObject *object,
GParamSpec *pspec,
gpointer user_data)
@@ -9685,11 +9707,12 @@ nautilus_files_view_init (NautilusFilesView *view)
g_type_ensure (NAUTILUS_TYPE_FLOATING_BAR);
gtk_widget_init_template (GTK_WIDGET (view));
- controller = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_VERTICAL |
- GTK_EVENT_CONTROLLER_SCROLL_DISCRETE);
+ controller = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_VERTICAL);
gtk_widget_add_controller (priv->scrolled_window, controller);
gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
g_signal_connect (controller, "scroll", G_CALLBACK (on_scroll), view);
+ g_signal_connect (controller, "scroll-begin", G_CALLBACK (on_scroll_begin), view);
+ g_signal_connect (controller, "scroll-end", G_CALLBACK (on_scroll_end), view);
g_signal_connect (priv->floating_bar,
"stop",