[gtk+/wip/carlosg/event-delivery-cleanups: 12/30] gtkpathbar: Use scroll event controller



commit ac9caa87ca1488ccf41c70fde2f20d79514354b4
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Sep 15 13:53:43 2017 +0200

    gtkpathbar: Use scroll event controller

 gtk/gtkpathbar.c |   48 +++++++++++++++++++++++++++---------------------
 1 files changed, 27 insertions(+), 21 deletions(-)
---
diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c
index 4e3c37f..ed35405 100644
--- a/gtk/gtkpathbar.c
+++ b/gtk/gtkpathbar.c
@@ -36,6 +36,7 @@
 #include "gtktogglebutton.h"
 #include "gtkwidgetpath.h"
 #include "gtkwidgetprivate.h"
+#include "gtkeventcontrollerscroll.h"
 
 struct _GtkPathBarPrivate
 {
@@ -50,6 +51,8 @@ struct _GtkPathBarPrivate
   GIcon *home_icon;
   GIcon *desktop_icon;
 
+  GtkEventController *scroll_controller;
+
   GList *button_list;
   GList *first_scrolled_button;
   GList *fake_root;
@@ -132,8 +135,6 @@ static void gtk_path_bar_remove                   (GtkContainer     *container,
 static void gtk_path_bar_forall                   (GtkContainer     *container,
                                                   GtkCallback       callback,
                                                   gpointer          callback_data);
-static gboolean gtk_path_bar_scroll               (GtkWidget        *widget,
-                                                  GdkEventScroll   *event);
 static void gtk_path_bar_scroll_up                (GtkPathBar       *path_bar);
 static void gtk_path_bar_scroll_down              (GtkPathBar       *path_bar);
 static void gtk_path_bar_stop_scrolling           (GtkPathBar       *path_bar);
@@ -161,6 +162,11 @@ static void gtk_path_bar_update_button_appearance (GtkPathBar       *path_bar,
                                                   ButtonData       *button_data,
                                                   gboolean          current_dir);
 
+static void gtk_path_bar_scroll_controller_scroll (GtkEventControllerScroll *scroll,
+                                                   gdouble                   dx,
+                                                   gdouble                   dy,
+                                                   GtkPathBar               *path_bar);
+
 static void
 on_slider_unmap (GtkWidget  *widget,
                 GtkPathBar *path_bar)
@@ -201,6 +207,14 @@ gtk_path_bar_init (GtkPathBar *path_bar)
   gtk_style_context_add_class (context, GTK_STYLE_CLASS_LINKED);
 
   path_bar->priv->get_info_cancellable = NULL;
+
+  path_bar->priv->scroll_controller =
+    gtk_event_controller_scroll_new (GTK_WIDGET (path_bar),
+                                     GTK_EVENT_CONTROLLER_SCROLL_VERTICAL |
+                                     GTK_EVENT_CONTROLLER_SCROLL_DISCRETE);
+  g_signal_connect (path_bar->priv->scroll_controller, "scroll",
+                    G_CALLBACK (gtk_path_bar_scroll_controller_scroll),
+                    path_bar);
 }
 
 static void
@@ -224,7 +238,6 @@ gtk_path_bar_class_init (GtkPathBarClass *path_bar_class)
   widget_class->screen_changed = gtk_path_bar_screen_changed;
   widget_class->grab_notify = gtk_path_bar_grab_notify;
   widget_class->state_flags_changed = gtk_path_bar_state_flags_changed;
-  widget_class->scroll_event = gtk_path_bar_scroll;
 
   container_class->add = gtk_path_bar_add;
   container_class->forall = gtk_path_bar_forall;
@@ -282,6 +295,8 @@ gtk_path_bar_finalize (GObject *object)
 
   g_clear_object (&path_bar->priv->file_system);
 
+  g_clear_object (&path_bar->priv->scroll_controller);
+
   G_OBJECT_CLASS (gtk_path_bar_parent_class)->finalize (object);
 }
 
@@ -709,25 +724,16 @@ gtk_path_bar_screen_changed (GtkWidget *widget,
   gtk_path_bar_check_icon_theme (GTK_PATH_BAR (widget));
 }
 
-static gboolean
-gtk_path_bar_scroll (GtkWidget      *widget,
-                    GdkEventScroll *event)
+static void
+gtk_path_bar_scroll_controller_scroll (GtkEventControllerScroll *scroll,
+                                       gdouble                   dx,
+                                       gdouble                   dy,
+                                       GtkPathBar               *path_bar)
 {
-  switch (event->direction)
-    {
-    case GDK_SCROLL_RIGHT:
-    case GDK_SCROLL_DOWN:
-      gtk_path_bar_scroll_down (GTK_PATH_BAR (widget));
-      break;
-    case GDK_SCROLL_LEFT:
-    case GDK_SCROLL_UP:
-      gtk_path_bar_scroll_up (GTK_PATH_BAR (widget));
-      break;
-    case GDK_SCROLL_SMOOTH:
-      break;
-    }
-
-  return TRUE;
+  if (dy > 0)
+    gtk_path_bar_scroll_down (path_bar);
+  else if (dy < 0)
+    gtk_path_bar_scroll_up (path_bar);
 }
 
 static void


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