summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2017-09-15 13:53:43 +0200
committerCarlos Garnacho <carlosg@gnome.org>2017-09-15 21:07:18 +0200
commitac9caa87ca1488ccf41c70fde2f20d79514354b4 (patch)
tree45199c17398e597062eb472e35591e6cf771bde4
parentd0eb5564e27cb4a8479ee59a22900a6f353f551e (diff)
downloadgtk+-ac9caa87ca1488ccf41c70fde2f20d79514354b4.tar.gz
gtkpathbar: Use scroll event controller
-rw-r--r--gtk/gtkpathbar.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c
index 4e3c37fc2f..ed35405f38 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