[gtk+/wip/events: 21/25] API: gtk: Add GtkGesture



commit b469025153d7ff4dc2b802752d5f847244067cc8
Author: Benjamin Otte <otte redhat com>
Date:   Tue Mar 13 21:38:55 2012 +0100

    API: gtk: Add GtkGesture
    
    GtkGesture is a GtkEventTracker that knows about sequences and sends
    information about them.

 gtk/Makefile.am            |    6 +
 gtk/gtk.h                  |    3 +
 gtk/gtkgesture.c           |  371 ++++++++++++++++++++++++++++++++++++++++++++
 gtk/gtkgesture.h           |   89 +++++++++++
 gtk/gtkgesturerecognizer.c |   60 +++++++
 gtk/gtkgesturerecognizer.h |   60 +++++++
 6 files changed, 589 insertions(+), 0 deletions(-)
---
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index b29f6cd..8ebb37b 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -251,6 +251,8 @@ gtk_public_h_sources = 		\
 	gtkfontchooserdialog.h  \
 	gtkfontchooserwidget.h	\
 	gtkframe.h		\
+	gtkgesture.h		\
+	gtkgesturerecognizer.h	\
 	gtkgradient.h		\
 	gtkgrid.h		\
 	gtkiconfactory.h	\
@@ -317,6 +319,7 @@ gtk_public_h_sources = 		\
 	gtkseparator.h		\
 	gtkseparatormenuitem.h	\
 	gtkseparatortoolitem.h	\
+	gtksequence.h		\
 	gtksettings.h		\
 	gtkshow.h		\
 	gtksizegroup.h		\
@@ -672,6 +675,8 @@ gtk_base_c_sources = 		\
 	gtkfontchooserutils.c	\
 	gtkfontchooserwidget.c	\
 	gtkframe.c		\
+	gtkgesture.c		\
+	gtkgesturerecognizer.c	\
 	gtkgradient.c		\
 	gtkgrid.c		\
 	gtkiconcache.c		\
@@ -756,6 +761,7 @@ gtk_base_c_sources = 		\
 	gtkseparator.c		\
 	gtkseparatormenuitem.c	\
 	gtkseparatortoolitem.c	\
+	gtksequence.c		\
 	gtksequencetracker.c	\
 	gtksettings.c		\
 	gtksizegroup.c		\
diff --git a/gtk/gtk.h b/gtk/gtk.h
index 97f5fef..e3fa16e 100644
--- a/gtk/gtk.h
+++ b/gtk/gtk.h
@@ -109,6 +109,8 @@
 #include <gtk/gtkfontchooserdialog.h>
 #include <gtk/gtkfontchooserwidget.h>
 #include <gtk/gtkframe.h>
+#include <gtk/gtkgesture.h>
+#include <gtk/gtkgesturerecognizer.h>
 #include <gtk/gtkgradient.h>
 #include <gtk/gtkgrid.h>
 #include <gtk/gtkiconfactory.h>
@@ -173,6 +175,7 @@
 #include <gtk/gtkseparator.h>
 #include <gtk/gtkseparatormenuitem.h>
 #include <gtk/gtkseparatortoolitem.h>
+#include <gtk/gtksequence.h>
 #include <gtk/gtksettings.h>
 #include <gtk/gtkshow.h>
 #include <gtk/gtksizegroup.h>
diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c
new file mode 100644
index 0000000..7dd4371
--- /dev/null
+++ b/gtk/gtkgesture.c
@@ -0,0 +1,371 @@
+/*
+ * Copyright  2012 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Benjamin Otte <otte gnome org>
+ */
+
+#include "config.h"
+
+#include "gtkgesture.h"
+
+#include "gtkeventtrackerprivate.h"
+#include "gtkintl.h"
+#include "gtksequence.h"
+
+/**
+ * SECTION:gtkgesture
+ * @Short_description: Gesture recognition
+ * @Title: GtkGesture
+ * @See_also: #GtkGestureRecognizer, #GtkEventTracker
+ *
+ * The #GtkGesture object - or rather its subclasses - are #GtkEventTrackers
+ * that cooperates with other #GtkGestures on the recognizing of
+ * #GdkSequences.
+ *
+ * #GtkGesture was added in GTK 3.6.
+ */
+
+
+enum {
+  PROP_0
+};
+
+struct _GtkGesturePrivate {
+  GPtrArray *sequences;
+
+  guint accepted :1;
+};
+
+G_DEFINE_ABSTRACT_TYPE (GtkGesture, gtk_gesture, GTK_TYPE_EVENT_TRACKER)
+
+static void
+gtk_gesture_set_property (GObject      *object,
+                                guint         prop_id,
+                                const GValue *value,
+                                GParamSpec   *pspec)
+{
+  //GtkGesture *gesture = GTK_GESTURE (object);
+  //GtkGesturePrivate *priv = gesture->priv;
+
+  switch (prop_id)
+    {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+gtk_gesture_get_property (GObject    *object,
+                                guint       prop_id,
+                                GValue     *value,
+                                GParamSpec *pspec)
+{
+  //GtkGesture *gesture = GTK_GESTURE (object);
+  //GtkGesturePrivate *priv = gesture->priv;
+
+  switch (prop_id)
+    {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+gtk_gesture_remove_all_sequences (GtkGesture *gesture)
+{
+  GtkGesturePrivate *priv = gesture->priv;
+  
+  if (priv->accepted)
+    return;
+
+  while (priv->sequences->len > 0)
+    gtk_gesture_remove_sequence (gesture, g_ptr_array_index (priv->sequences,
+                                                             priv->sequences->len - 1));
+}
+
+static void
+gtk_gesture_dispose (GObject *object)
+{
+  GtkGesture *gesture = GTK_GESTURE (object);
+  GtkGesturePrivate *priv = gesture->priv;
+
+  gtk_gesture_remove_all_sequences (gesture);
+
+  g_ptr_array_unref (priv->sequences);
+  priv->sequences = NULL;
+
+  G_OBJECT_CLASS (gtk_gesture_parent_class)->dispose (object);
+}
+
+static void
+gtk_gesture_default_sequence_given (GtkGesture       *gesture,
+                                    GdkEventSequence *sequence)
+{
+}
+
+static void
+gtk_gesture_default_sequence_stolen (GtkGesture       *gesture,
+                                     GdkEventSequence *sequence,
+                                     GtkGesture       *stealer)
+{
+  gtk_event_tracker_cancel (GTK_EVENT_TRACKER (gesture));
+}
+
+static void
+gtk_gesture_class_init (GtkGestureClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  klass->sequence_stolen = gtk_gesture_default_sequence_stolen;
+  klass->sequence_given = gtk_gesture_default_sequence_given;
+
+  object_class->dispose = gtk_gesture_dispose;
+  object_class->set_property = gtk_gesture_set_property;
+  object_class->get_property = gtk_gesture_get_property;
+
+  g_type_class_add_private (object_class, sizeof (GtkGesturePrivate));
+}
+
+static void
+gtk_gesture_init (GtkGesture *gesture)
+{
+  GtkGesturePrivate *priv;
+
+  priv = gesture->priv = G_TYPE_INSTANCE_GET_PRIVATE (gesture,
+                                                      GTK_TYPE_GESTURE,
+                                                      GtkGesturePrivate);
+
+  priv->sequences = g_ptr_array_new ();
+}
+
+static void
+gtk_gesture_accept_sequence (GtkGesture       *stealer,
+                             GdkEventSequence *sequence)
+{
+  GtkEventTracker *tracker, *next;
+
+  for (tracker = _gtk_event_tracker_get_next (GTK_EVENT_TRACKER (stealer));
+       tracker;
+       tracker = next)
+    {
+      GtkGesture *gesture;
+
+      next = _gtk_event_tracker_get_next (tracker);
+
+      if (!GTK_IS_GESTURE (tracker))
+        continue;
+
+      gesture = GTK_GESTURE (tracker);
+
+      if (!gtk_gesture_has_sequence (gesture, sequence))
+        continue;
+
+      /* need some magic here because a lot of gestures wanna cancel themselves
+       * in this vfunc */
+      g_object_ref (gesture);
+
+      GTK_GESTURE_GET_CLASS (gesture)->sequence_stolen (gesture,
+                                                        sequence,
+                                                        stealer);
+
+      next = _gtk_event_tracker_get_next (tracker);
+      g_object_unref (gesture);
+    }
+}
+
+static void
+gtk_gesture_give_sequence (GtkGesture       *gesture,
+                           GdkEventSequence *sequence)
+{
+  GtkGestureClass *klass = GTK_GESTURE_GET_CLASS (gesture);
+
+  klass->sequence_given (gesture, sequence);
+}
+
+/**
+ * gtk_gesture_add_sequence:
+ * @gesture: the gesture
+ * @sequence: the sequence to add to @gesture
+ *
+ * Marks @gesture as working with @sequence. If @gesture is or gets
+ * accepted, other gestures will be notified about @gesture using @sequence
+ * and @gesture will be notified if other gestures use @sequence.
+ **/
+void
+gtk_gesture_add_sequence (GtkGesture       *gesture,
+                          GdkEventSequence *sequence)
+{
+  GtkGesturePrivate *priv;
+  gboolean new_owner;
+
+  g_return_if_fail (GTK_IS_GESTURE (gesture));
+  g_return_if_fail (sequence != NULL);
+
+  priv = gesture->priv;
+  new_owner = gtk_sequence_get_owner (sequence) == NULL;
+
+  g_ptr_array_add (priv->sequences, sequence);
+  if (new_owner)
+    gtk_gesture_give_sequence (gesture, sequence);
+  if (priv->accepted)
+    gtk_gesture_accept_sequence (gesture, sequence);
+}
+
+/**
+ * gtk_gesture_remove_sequence:
+ * @gesture: the gesture
+ * @sequence: the sequence to remove. It must have been added with 
+ *   gtk_gesture_add_sequence() previously.
+ *
+ * Removes the sequence from the list of tracked sequences. This function
+ * does nothing if the gesture has been accepted. 
+ *
+ * This function should only be called from #GtkGesture implementations.
+ **/
+void
+gtk_gesture_remove_sequence (GtkGesture       *gesture,
+                             GdkEventSequence *sequence)
+{
+  GtkGesturePrivate *priv;
+  gboolean was_owner;
+
+  g_return_if_fail (GTK_IS_GESTURE (gesture));
+  g_return_if_fail (sequence != NULL);
+
+  priv = gesture->priv;
+
+  if (priv->accepted)
+    return;
+
+  was_owner = gtk_gesture_owns_sequence (gesture, sequence);
+
+  g_ptr_array_remove (priv->sequences, sequence);
+
+  if (was_owner)
+    {
+      GtkEventTracker *tracker;
+
+      for (tracker = _gtk_event_tracker_get_next (GTK_EVENT_TRACKER (gesture));
+           tracker;
+           tracker = _gtk_event_tracker_get_next (tracker))
+        {
+          if (GTK_IS_GESTURE (tracker) &&
+              gtk_gesture_has_sequence (GTK_GESTURE (tracker), sequence))
+            {
+              gtk_gesture_give_sequence (GTK_GESTURE (tracker), sequence);
+              break;
+            }
+        }
+    }
+}
+
+gboolean
+gtk_gesture_has_sequence (GtkGesture       *gesture,
+                          GdkEventSequence *sequence)
+{
+  GtkGesturePrivate *priv;
+  guint i;
+
+  g_return_val_if_fail (GTK_IS_GESTURE (gesture), FALSE);
+  g_return_val_if_fail (sequence != NULL, FALSE);
+
+  priv = gesture->priv;
+
+  for (i = 0; i < priv->sequences->len; i++)
+    {
+      if (g_ptr_array_index (priv->sequences, i) == sequence)
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
+gboolean
+gtk_gesture_owns_sequence (GtkGesture       *gesture,
+                           GdkEventSequence *sequence)
+{
+  g_return_val_if_fail (GTK_IS_GESTURE (gesture), FALSE);
+  g_return_val_if_fail (sequence != NULL, FALSE);
+
+  return gtk_sequence_get_owner (sequence) == gesture;
+}
+
+gboolean
+gtk_gesture_owns_all_sequences (GtkGesture *gesture)
+{
+  GtkGesturePrivate *priv;
+  guint i;
+
+  g_return_val_if_fail (GTK_IS_GESTURE (gesture), FALSE);
+
+  priv = gesture->priv;
+
+  for (i = 0; i < priv->sequences->len; i++)
+    {
+      if (!gtk_gesture_owns_sequence (gesture,
+                                      g_ptr_array_index (priv->sequences, i)))
+          return FALSE;
+    }
+
+  return TRUE;
+}
+
+/**
+ * gtk_gesture_accept:
+ * @gesture: the gesture to accept
+ *
+ * Accepts @gesture if it hasn't been accepted yet. An accepted gesture
+ * is a gesture that will successfully finish to recognize itself.
+ *
+ * If a gesture marks itself as accepted, all its sequences that were
+ * added with gtk_gesture_add_sequence() are assumed to be consumed by
+ * this @gesture and other gestures will be notified about this.
+ *
+ * This function should only be called from #GtkGesture implementations.
+ **/
+void
+gtk_gesture_accept (GtkGesture *gesture)
+{
+  GtkGesturePrivate *priv;
+  guint i;
+
+  g_return_if_fail (GTK_IS_GESTURE (gesture));
+
+  priv = gesture->priv;
+
+  if (priv->accepted)
+    return;
+
+  priv->accepted = TRUE;
+
+  for (i = 0; i < priv->sequences->len; i++)
+    {
+      gtk_gesture_accept_sequence (gesture,
+                                   g_ptr_array_index (priv->sequences, i));
+    }
+}
+
+gboolean
+gtk_gesture_is_accepted (GtkGesture *gesture)
+{
+  g_return_val_if_fail (GTK_IS_GESTURE (gesture), FALSE);
+
+  return gesture->priv->accepted;
+}
+
diff --git a/gtk/gtkgesture.h b/gtk/gtkgesture.h
new file mode 100644
index 0000000..5bc36c6
--- /dev/null
+++ b/gtk/gtkgesture.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright  2012 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Benjamin Otte <otte gnome org>
+ */
+
+#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
+#error "Only <gtk/gtk.h> can be included directly."
+#endif
+
+#ifndef __GTK_GESTURE_H__
+#define __GTK_GESTURE_H__
+
+#include <gtk/gtkeventtracker.h>
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS
+
+#define GTK_TYPE_GESTURE           (gtk_gesture_get_type ())
+#define GTK_GESTURE(obj)           (G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_TYPE_GESTURE, GtkGesture))
+#define GTK_GESTURE_CLASS(cls)     (G_TYPE_CHECK_CLASS_CAST (cls, GTK_TYPE_GESTURE, GtkGestureClass))
+#define GTK_IS_GESTURE(obj)        (G_TYPE_CHECK_INSTANCE_TYPE (obj, GTK_TYPE_GESTURE))
+#define GTK_IS_GESTURE_CLASS(obj)  (G_TYPE_CHECK_CLASS_TYPE (obj, GTK_TYPE_GESTURE))
+#define GTK_GESTURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_GESTURE, GtkGestureClass))
+
+typedef struct _GtkGesture           GtkGesture;
+typedef struct _GtkGestureClass      GtkGestureClass;
+typedef struct _GtkGesturePrivate    GtkGesturePrivate;
+
+struct _GtkGesture
+{
+  GtkEventTracker parent;
+
+  GtkGesturePrivate *priv;
+};
+
+struct _GtkGestureClass
+{
+  GtkEventTrackerClass parent_class;
+
+  void                (* sequence_given)            (GtkGesture *       gesture,
+                                                     GdkEventSequence * sequence);
+  void                (* sequence_stolen)           (GtkGesture *       gesture,
+                                                     GdkEventSequence * sequence,
+                                                     GtkGesture *       accepter);
+
+  /* Padding for future expansion */
+  void (*_gtk_reserved0) (void);
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
+  void (*_gtk_reserved5) (void);
+  void (*_gtk_reserved6) (void);
+  void (*_gtk_reserved7) (void);
+};
+
+GType                 gtk_gesture_get_type          (void) G_GNUC_CONST;
+
+void                  gtk_gesture_add_sequence      (GtkGesture        *gesture,
+                                                     GdkEventSequence  *sequence);
+void                  gtk_gesture_remove_sequence   (GtkGesture        *gesture,
+                                                     GdkEventSequence  *sequence);
+gboolean              gtk_gesture_has_sequence      (GtkGesture        *gesture,
+                                                     GdkEventSequence  *sequence);
+gboolean              gtk_gesture_owns_sequence     (GtkGesture        *gesture,
+                                                     GdkEventSequence  *sequence);
+gboolean              gtk_gesture_owns_all_sequences(GtkGesture        *gesture);
+
+void                  gtk_gesture_accept            (GtkGesture        *gesture);
+gboolean              gtk_gesture_is_accepted       (GtkGesture        *gesture);
+
+G_END_DECLS
+
+#endif /* __GTK_GESTURE_H__ */
diff --git a/gtk/gtkgesturerecognizer.c b/gtk/gtkgesturerecognizer.c
new file mode 100644
index 0000000..7f66d40
--- /dev/null
+++ b/gtk/gtkgesturerecognizer.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright  2012 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Benjamin Otte <otte gnome org>
+ */
+
+#include "config.h"
+
+#include "gtkgesturerecognizer.h"
+
+#include "gtkgesture.h"
+
+/**
+ * SECTION:gtkgesturerecognizer
+ * @Short_description: Recognizes gestures
+ * @Title: GtkGestureRecognizer
+ * @See_also: #GtkGesture, #GtkEventRecognizer
+ *
+ * FIXME
+ *
+ * #GtkGestureRecognizer was added in GTK 3.6.
+ */
+
+G_DEFINE_ABSTRACT_TYPE (GtkGestureRecognizer, gtk_gesture_recognizer, GTK_TYPE_EVENT_RECOGNIZER)
+
+static void
+gtk_gesture_recognizer_finished (GtkEventRecognizer *recognizer,
+                                 GtkEventTracker    *tracker)
+{
+  gtk_gesture_accept (GTK_GESTURE (tracker));
+}
+
+static void
+gtk_gesture_recognizer_class_init (GtkGestureRecognizerClass *klass)
+{
+  GtkEventRecognizerClass *recognizer_class = GTK_EVENT_RECOGNIZER_CLASS (klass);
+
+  recognizer_class->finished = gtk_gesture_recognizer_finished;
+
+  gtk_event_recognizer_class_set_tracker_type (recognizer_class, GTK_TYPE_GESTURE);
+}
+
+static void
+gtk_gesture_recognizer_init (GtkGestureRecognizer *recognizer)
+{
+}
diff --git a/gtk/gtkgesturerecognizer.h b/gtk/gtkgesturerecognizer.h
new file mode 100644
index 0000000..31d829c
--- /dev/null
+++ b/gtk/gtkgesturerecognizer.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright  2012 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Benjamin Otte <otte gnome org>
+ */
+
+#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
+#error "Only <gtk/gtk.h> can be included directly."
+#endif
+
+#ifndef __GTK_GESTURE_RECOGNIZER_H__
+#define __GTK_GESTURE_RECOGNIZER_H__
+
+#include <gtk/gtkeventrecognizer.h>
+
+G_BEGIN_DECLS
+
+#define GTK_TYPE_GESTURE_RECOGNIZER           (gtk_gesture_recognizer_get_type ())
+#define GTK_GESTURE_RECOGNIZER(obj)           (G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_TYPE_GESTURE_RECOGNIZER, GtkGestureRecognizer))
+#define GTK_GESTURE_RECOGNIZER_CLASS(cls)     (G_TYPE_CHECK_CLASS_CAST (cls, GTK_TYPE_GESTURE_RECOGNIZER, GtkGestureRecognizerClass))
+#define GTK_IS_GESTURE_RECOGNIZER(obj)        (G_TYPE_CHECK_INSTANCE_TYPE (obj, GTK_TYPE_GESTURE_RECOGNIZER))
+#define GTK_IS_GESTURE_RECOGNIZER_CLASS(obj)  (G_TYPE_CHECK_CLASS_TYPE (obj, GTK_TYPE_GESTURE_RECOGNIZER))
+#define GTK_GESTURE_RECOGNIZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_GESTURE_RECOGNIZER, GtkGestureRecognizerClass))
+
+typedef struct _GtkGestureRecognizer             GtkGestureRecognizer;
+typedef struct _GtkGestureRecognizerClass        GtkGestureRecognizerClass;
+typedef struct _GtkGestureRecognizerPrivate      GtkGestureRecognizerPrivate;
+
+struct _GtkGestureRecognizer
+{
+  GtkEventRecognizer parent;
+
+  GtkGestureRecognizerPrivate *priv;
+};
+
+struct _GtkGestureRecognizerClass
+{
+  GtkEventRecognizerClass parent_class;
+};
+
+GType                 gtk_gesture_recognizer_get_type               (void) G_GNUC_CONST;
+
+
+G_END_DECLS
+
+#endif /* __GTK_GESTURE_RECOGNIZER_H__ */



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