[gtk+] calendar: Stop using ::button-{press,release}-event
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] calendar: Stop using ::button-{press,release}-event
- Date: Thu, 14 Sep 2017 08:01:09 +0000 (UTC)
commit 054df8e6ecbb76ed3330aa30dc5064325a7d6f87
Author: Timm Bäder <mail baedert org>
Date: Wed Sep 13 17:37:25 2017 +0200
calendar: Stop using ::button-{press,release}-event
gtk/gtkcalendar.c | 92 ++++++++++++++++++++++++++++++----------------------
1 files changed, 53 insertions(+), 39 deletions(-)
---
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c
index e2f2ae6..2ed58d4 100644
--- a/gtk/gtkcalendar.c
+++ b/gtk/gtkcalendar.c
@@ -83,6 +83,7 @@
#include "gtksnapshot.h"
#include "gtkstylecontextprivate.h"
#include "gtkwidgetprivate.h"
+#include "gtkgesturemultipress.h"
#define TIMEOUT_INITIAL 500
#define TIMEOUT_REPEAT 50
@@ -244,6 +245,8 @@ struct _GtkCalendarPrivate
gint detail_height_rows;
gint detail_width_chars;
gint detail_overflow[6];
+
+ GtkGesture *press_gesture;
};
static void gtk_calendar_finalize (GObject *calendar);
@@ -270,10 +273,16 @@ static void gtk_calendar_size_allocate (GtkWidget *widget,
GtkAllocation *out_clip);
static void gtk_calendar_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot);
-static gboolean gtk_calendar_button_press (GtkWidget *widget,
- GdkEventButton *event);
-static gboolean gtk_calendar_button_release (GtkWidget *widget,
- GdkEventButton *event);
+static void gtk_calendar_button_press (GtkGestureMultiPress *gesture,
+ int n_press,
+ double x,
+ double y,
+ gpointer user_data);
+static void gtk_calendar_button_release (GtkGestureMultiPress *gesture,
+ int n_press,
+ double x,
+ double y,
+ gpointer user_data);
static gboolean gtk_calendar_motion_notify (GtkWidget *widget,
GdkEventMotion *event);
static gboolean gtk_calendar_scroll (GtkWidget *widget,
@@ -356,8 +365,6 @@ gtk_calendar_class_init (GtkCalendarClass *class)
widget_class->snapshot = gtk_calendar_snapshot;
widget_class->measure = gtk_calendar_measure;
widget_class->size_allocate = gtk_calendar_size_allocate;
- widget_class->button_press_event = gtk_calendar_button_press;
- widget_class->button_release_event = gtk_calendar_button_release;
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;
@@ -666,6 +673,10 @@ gtk_calendar_init (GtkCalendar *calendar)
gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (calendar)),
GTK_STYLE_CLASS_VIEW);
+ priv->press_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (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);
+
if (!default_abbreviated_dayname[0])
for (i=0; i<7; i++)
{
@@ -1298,6 +1309,10 @@ calendar_set_month_prev (GtkCalendar *calendar)
static void
gtk_calendar_finalize (GObject *object)
{
+ GtkCalendarPrivate *priv = GTK_CALENDAR (object)->priv;
+
+ g_object_unref (priv->press_gesture);
+
G_OBJECT_CLASS (gtk_calendar_parent_class)->finalize (object);
}
@@ -2528,18 +2543,18 @@ calendar_stop_spinning (GtkCalendar *calendar)
}
static void
-calendar_main_button_press (GtkCalendar *calendar,
- GdkEventButton *event)
+calendar_main_button_press (GtkCalendar *calendar,
+ double x,
+ double y,
+ int n_press,
+ int button)
{
GtkWidget *widget = GTK_WIDGET (calendar);
GtkCalendarPrivate *priv = calendar->priv;
- double x, y;
gint row, col;
gint day_month;
gint day;
- gdk_event_get_coords ((const GdkEvent *)event, &x, &y);
-
row = calendar_row_from_y (calendar, y);
col = calendar_column_from_x (calendar, x);
@@ -2549,7 +2564,7 @@ calendar_main_button_press (GtkCalendar *calendar,
day_month = priv->day_month[row][col];
- if (event->type == GDK_BUTTON_PRESS)
+ if (n_press == 1)
{
day = priv->day[row][col];
@@ -2561,7 +2576,7 @@ calendar_main_button_press (GtkCalendar *calendar,
if (!gtk_widget_has_focus (widget))
gtk_widget_grab_focus (widget);
- if (event->button == GDK_BUTTON_PRIMARY)
+ if (button == GDK_BUTTON_PRIMARY)
{
priv->in_drag = 1;
priv->drag_start_x = x;
@@ -2570,7 +2585,7 @@ calendar_main_button_press (GtkCalendar *calendar,
calendar_select_and_focus_day (calendar, day);
}
- else if (event->type == GDK_2BUTTON_PRESS)
+ else if (n_press == 2)
{
priv->in_drag = 0;
if (day_month == MONTH_CURRENT)
@@ -2580,22 +2595,25 @@ calendar_main_button_press (GtkCalendar *calendar,
}
}
-static gboolean
-gtk_calendar_button_press (GtkWidget *widget,
- GdkEventButton *event)
+
+static void
+gtk_calendar_button_press (GtkGestureMultiPress *gesture,
+ int n_press,
+ double x,
+ double y,
+ gpointer user_data)
{
- GtkCalendar *calendar = GTK_CALENDAR (widget);
+ GtkCalendar *calendar = user_data;
+ GtkWidget *widget = GTK_WIDGET (calendar);
GtkCalendarPrivate *priv = calendar->priv;
+ int button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
gint arrow = -1;
- double x, y;
if (!gtk_widget_has_focus (widget))
gtk_widget_grab_focus (widget);
- gdk_event_get_coords ((const GdkEvent*)event, &x, &y);
-
if (y > priv->header_h)
- calendar_main_button_press (calendar, event);
+ calendar_main_button_press (calendar, x, y, n_press, button);
for (arrow = ARROW_YEAR_LEFT; arrow <= ARROW_MONTH_RIGHT; arrow++)
{
@@ -2605,38 +2623,34 @@ gtk_calendar_button_press (GtkWidget *widget,
if (gdk_rectangle_contains_point (&arrow_rect, (int)x, (int)y))
{
- /* only call the action on single click, not double */
- if (event->type == GDK_BUTTON_PRESS)
- {
- if (event->button == GDK_BUTTON_PRIMARY)
- calendar_start_spinning (calendar, arrow);
+ if (button == GDK_BUTTON_PRIMARY)
+ calendar_start_spinning (calendar, arrow);
- calendar_arrow_action (calendar, arrow);
- }
+ calendar_arrow_action (calendar, arrow);
- return TRUE;
+ return;
}
}
-
- return FALSE;
}
-static gboolean
-gtk_calendar_button_release (GtkWidget *widget,
- GdkEventButton *event)
+static void
+gtk_calendar_button_release (GtkGestureMultiPress *gesture,
+ int n_press,
+ double x,
+ double y,
+ gpointer user_data)
{
- GtkCalendar *calendar = GTK_CALENDAR (widget);
+ GtkCalendar *calendar = user_data;
GtkCalendarPrivate *priv = calendar->priv;
+ int button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
- if (event->button == GDK_BUTTON_PRIMARY)
+ if (button == GDK_BUTTON_PRIMARY)
{
calendar_stop_spinning (calendar);
if (priv->in_drag)
priv->in_drag = 0;
}
-
- return TRUE;
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]