[gtk+/touch-for-3.4: 64/65] button: Use ::touch-event
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/touch-for-3.4: 64/65] button: Use ::touch-event
- Date: Fri, 24 Feb 2012 15:30:13 +0000 (UTC)
commit 953f383d62a6437fb7b845534233c50c9c098fec
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Feb 24 10:20:40 2012 -0500
button: Use ::touch-event
gtk/gtkbutton.c | 34 +++++++++++++++++++++++++++++-----
1 files changed, 29 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c
index b0b02eb..8af8145 100644
--- a/gtk/gtkbutton.c
+++ b/gtk/gtkbutton.c
@@ -124,6 +124,8 @@ static gint gtk_button_button_press (GtkWidget * widget,
GdkEventButton * event);
static gint gtk_button_button_release (GtkWidget * widget,
GdkEventButton * event);
+static gboolean gtk_button_touch (GtkWidget *widget,
+ GdkEventTouch *event);
static gint gtk_button_grab_broken (GtkWidget * widget,
GdkEventGrabBroken * event);
static gint gtk_button_key_release (GtkWidget * widget, GdkEventKey * event);
@@ -209,6 +211,7 @@ gtk_button_class_init (GtkButtonClass *klass)
widget_class->draw = gtk_button_draw;
widget_class->button_press_event = gtk_button_button_press;
widget_class->button_release_event = gtk_button_button_release;
+ widget_class->touch_event = gtk_button_touch;
widget_class->grab_broken_event = gtk_button_grab_broken;
widget_class->key_release_event = gtk_button_key_release;
widget_class->enter_notify_event = gtk_button_enter_notify;
@@ -1432,7 +1435,7 @@ gtk_button_realize (GtkWidget *widget)
attributes.event_mask = gtk_widget_get_events (widget);
attributes.event_mask |= (GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
- GDK_BUTTON_MOTION_MASK |
+ GDK_TOUCH_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_LEAVE_NOTIFY_MASK);
@@ -1814,8 +1817,7 @@ gtk_button_button_press (GtkWidget *widget,
GtkButton *button;
GtkButtonPrivate *priv;
- if (event->type == GDK_BUTTON_PRESS ||
- event->type == GDK_TOUCH_PRESS)
+ if (event->type == GDK_BUTTON_PRESS)
{
button = GTK_BUTTON (widget);
priv = button->priv;
@@ -1846,6 +1848,28 @@ gtk_button_button_release (GtkWidget *widget,
}
static gboolean
+gtk_button_touch (GtkWidget *widget,
+ GdkEventTouch *event)
+{
+ GtkButton *button = GTK_BUTTON (widget);
+ GtkButtonPrivate *priv = button->priv;
+
+ if (event->type == GDK_TOUCH_BEGIN)
+ {
+ if (priv->focus_on_click && !gtk_widget_has_focus (widget))
+ gtk_widget_grab_focus (widget);
+
+ g_signal_emit (button, button_signals[PRESSED], 0);
+ }
+ else if (event->type == GDK_TOUCH_END)
+ {
+ g_signal_emit (button, button_signals[RELEASED], 0);
+ }
+
+ return TRUE;
+}
+
+static gboolean
gtk_button_grab_broken (GtkWidget *widget,
GdkEventGrabBroken *event)
{
@@ -1948,8 +1972,8 @@ touch_release_in_button (GtkButton *button)
if (!event)
return FALSE;
- if (event->type != GDK_TOUCH_RELEASE ||
- event->button.window != priv->event_window)
+ if (event->type != GDK_TOUCH_END ||
+ event->touch.window != priv->event_window)
{
gdk_event_free (event);
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]