summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2017-09-15 14:55:19 +0200
committerCarlos Garnacho <carlosg@gnome.org>2017-09-19 18:40:50 +0200
commitb31029457b4cc4b015cebe94cf8d0db81b8684c7 (patch)
tree9725fa1e4cfae15d15e97e69d5f4809433d71609
parentcf6ecc909528fb648c5b8343abe08a5e6bd5ad15 (diff)
downloadgtk+-b31029457b4cc4b015cebe94cf8d0db81b8684c7.tar.gz
gtkcalendar: Use scroll event controller
-rw-r--r--gtk/gtkcalendar.c52
1 files changed, 27 insertions, 25 deletions
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c
index 94fc8eeda2..5f54660963 100644
--- a/gtk/gtkcalendar.c
+++ b/gtk/gtkcalendar.c
@@ -84,6 +84,7 @@
#include "gtkstylecontextprivate.h"
#include "gtkwidgetprivate.h"
#include "gtkgesturemultipress.h"
+#include "gtkeventcontrollerscroll.h"
#define TIMEOUT_INITIAL 500
#define TIMEOUT_REPEAT 50
@@ -247,6 +248,7 @@ struct _GtkCalendarPrivate
gint detail_overflow[6];
GtkGesture *press_gesture;
+ GtkEventController *scroll_controller;
};
static void gtk_calendar_finalize (GObject *calendar);
@@ -285,8 +287,6 @@ static void gtk_calendar_button_release (GtkGestureMultiPress *gesture,
gpointer user_data);
static gboolean gtk_calendar_motion_notify (GtkWidget *widget,
GdkEventMotion *event);
-static gboolean gtk_calendar_scroll (GtkWidget *widget,
- GdkEventScroll *event);
static gboolean gtk_calendar_key_press (GtkWidget *widget,
GdkEventKey *event);
static gboolean gtk_calendar_focus_out (GtkWidget *widget,
@@ -343,6 +343,11 @@ static gint calendar_get_xsep (GtkCalendar *calendar);
static gint calendar_get_ysep (GtkCalendar *calendar);
static gint calendar_get_inner_border (GtkCalendar *calendar);
+static void gtk_calendar_scroll_controller_scroll (GtkEventControllerScroll *scroll,
+ gdouble dx,
+ gdouble dy,
+ GtkWidget *widget);
+
static char *default_abbreviated_dayname[7];
static char *default_monthname[12];
@@ -367,7 +372,6 @@ gtk_calendar_class_init (GtkCalendarClass *class)
widget_class->size_allocate = gtk_calendar_size_allocate;
widget_class->motion_notify_event = gtk_calendar_motion_notify;
widget_class->key_press_event = gtk_calendar_key_press;
- widget_class->scroll_event = gtk_calendar_scroll;
widget_class->state_flags_changed = gtk_calendar_state_flags_changed;
widget_class->grab_notify = gtk_calendar_grab_notify;
widget_class->focus_out_event = gtk_calendar_focus_out;
@@ -677,6 +681,14 @@ gtk_calendar_init (GtkCalendar *calendar)
g_signal_connect (priv->press_gesture, "pressed", G_CALLBACK (gtk_calendar_button_press), calendar);
g_signal_connect (priv->press_gesture, "released", G_CALLBACK (gtk_calendar_button_release), calendar);
+ priv->scroll_controller =
+ gtk_event_controller_scroll_new (GTK_WIDGET (calendar),
+ GTK_EVENT_CONTROLLER_SCROLL_VERTICAL |
+ GTK_EVENT_CONTROLLER_SCROLL_DISCRETE);
+ g_signal_connect (priv->scroll_controller, "scroll",
+ G_CALLBACK (gtk_calendar_scroll_controller_scroll),
+ calendar);
+
if (!default_abbreviated_dayname[0])
for (i=0; i<7; i++)
{
@@ -1312,6 +1324,7 @@ gtk_calendar_finalize (GObject *object)
GtkCalendarPrivate *priv = GTK_CALENDAR (object)->priv;
g_object_unref (priv->press_gesture);
+ g_object_unref (priv->scroll_controller);
G_OBJECT_CLASS (gtk_calendar_parent_class)->finalize (object);
}
@@ -2683,32 +2696,21 @@ gtk_calendar_motion_notify (GtkWidget *widget,
return TRUE;
}
-static gboolean
-gtk_calendar_scroll (GtkWidget *widget,
- GdkEventScroll *event)
+static void
+gtk_calendar_scroll_controller_scroll (GtkEventControllerScroll *scroll,
+ gdouble dx,
+ gdouble dy,
+ GtkWidget *widget)
{
GtkCalendar *calendar = GTK_CALENDAR (widget);
- GdkScrollDirection direction;
-
- if (!gdk_event_get_scroll_direction ((GdkEvent *) event, &direction))
- return GDK_EVENT_PROPAGATE;
- if (direction == GDK_SCROLL_UP)
- {
- if (!gtk_widget_has_focus (widget))
- gtk_widget_grab_focus (widget);
- calendar_set_month_prev (calendar);
- }
- else if (direction == GDK_SCROLL_DOWN)
- {
- if (!gtk_widget_has_focus (widget))
- gtk_widget_grab_focus (widget);
- calendar_set_month_next (calendar);
- }
- else
- return FALSE;
+ if (!gtk_widget_has_focus (widget))
+ gtk_widget_grab_focus (widget);
- return TRUE;
+ if (dy < 0)
+ calendar_set_month_prev (calendar);
+ else if (dy > 0)
+ calendar_set_month_next (calendar);
}