forked from AuroraMiddleware/gtk
a9fa0151f1
The policy of sequence states has been made tighter on GtkGesture, so gestures can never return to a "none" state, nor get out of a "denied" state, a "claimed" sequence can go "denied" though. The helper API at the widget level will first emit GtkWidget::sequence-state-changed on the called widget, and then notify through the same signal to every other widget in the captured event chain. So the effect of that signal is twofold, on one hand it lets the original widget set the state on its attached controllers, and on the other hand it lets the other widgets freely adapt to the sequence state changing elsewhere in the event widget chain. By default, that signal updates every controller on the first usecase, and propagates the default gesture policy to every other widget in the chain on the second. This means that, by default: 1) Sequences start out on the "none" state, and get propagated through all the event widget chain. 2) If a widget in the chain denies the sequence, all other widgets are unaffected. 3) If a widget in the chain claims the sequence, then: 3.1) Every widget below the claiming widget (ie. towards the event widget) will get the sequence cancelled. 3.2) Every widget above the claiming widget that had the sequence as "none" will remain as such, if it was claimed it will go denied, but that should rarely happen. This behavior can be tweaked through the GtkWidget::sequence-state-changed and GtkGesture::event-handled vmethods, although this should be very rarely done.
139 lines
5.4 KiB
C
139 lines
5.4 KiB
C
/* GTK - The GIMP Toolkit
|
|
* Copyright (C) 2012, One Laptop Per Child.
|
|
* Copyright (C) 2014, 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 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, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Author(s): Carlos Garnacho <carlosg@gnome.org>
|
|
*/
|
|
#ifndef __GTK_GESTURE_H__
|
|
#define __GTK_GESTURE_H__
|
|
|
|
#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
|
|
#error "Only <gtk/gtk.h> can be included directly."
|
|
#endif
|
|
|
|
#include <gtk/gtkeventcontroller.h>
|
|
#include <gtk/gtkeventcontroller.h>
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define GTK_TYPE_GESTURE (gtk_gesture_get_type ())
|
|
#define GTK_GESTURE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_GESTURE, GtkGesture))
|
|
#define GTK_GESTURE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_GESTURE, GtkGestureClass))
|
|
#define GTK_IS_GESTURE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_GESTURE))
|
|
#define GTK_IS_GESTURE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_GESTURE))
|
|
#define GTK_GESTURE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_GESTURE, GtkGestureClass))
|
|
|
|
typedef struct _GtkGesture GtkGesture;
|
|
typedef struct _GtkGestureClass GtkGestureClass;
|
|
|
|
struct _GtkGesture
|
|
{
|
|
GtkEventController parent_instance;
|
|
};
|
|
|
|
struct _GtkGestureClass
|
|
{
|
|
GtkEventControllerClass parent_class;
|
|
|
|
gboolean (* check) (GtkGesture *gesture);
|
|
|
|
void (* begin) (GtkGesture *gesture,
|
|
GdkEventSequence *sequence);
|
|
void (* update) (GtkGesture *gesture,
|
|
GdkEventSequence *sequence);
|
|
void (* end) (GtkGesture *gesture,
|
|
GdkEventSequence *sequence);
|
|
|
|
void (* cancel) (GtkGesture *gesture,
|
|
GdkEventSequence *sequence);
|
|
|
|
void (* sequence_state_changed) (GtkGesture *gesture,
|
|
GdkEventSequence *sequence,
|
|
GtkEventSequenceState state);
|
|
|
|
/*< private >*/
|
|
gpointer padding[10];
|
|
};
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
GType gtk_gesture_get_type (void) G_GNUC_CONST;
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
GdkDevice * gtk_gesture_get_device (GtkGesture *gesture);
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
GtkEventSequenceState
|
|
gtk_gesture_get_sequence_state (GtkGesture *gesture,
|
|
GdkEventSequence *sequence);
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_set_sequence_state (GtkGesture *gesture,
|
|
GdkEventSequence *sequence,
|
|
GtkEventSequenceState state);
|
|
GDK_AVAILABLE_IN_3_14
|
|
GList * gtk_gesture_get_sequences (GtkGesture *gesture);
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
GdkEventSequence * gtk_gesture_get_last_updated_sequence
|
|
(GtkGesture *gesture);
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_handles_sequence (GtkGesture *gesture,
|
|
GdkEventSequence *sequence);
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_cancel_sequence (GtkGesture *gesture,
|
|
GdkEventSequence *sequence);
|
|
GDK_AVAILABLE_IN_3_14
|
|
const GdkEvent *
|
|
gtk_gesture_get_last_event (GtkGesture *gesture,
|
|
GdkEventSequence *sequence);
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_get_point (GtkGesture *gesture,
|
|
GdkEventSequence *sequence,
|
|
gdouble *x,
|
|
gdouble *y);
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_get_last_update_time (GtkGesture *gesture,
|
|
GdkEventSequence *sequence,
|
|
guint32 *evtime);
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_get_bounding_box (GtkGesture *gesture,
|
|
GdkRectangle *rect);
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_get_bounding_box_center
|
|
(GtkGesture *gesture,
|
|
gdouble *x,
|
|
gdouble *y);
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_is_active (GtkGesture *gesture);
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_is_recognized (GtkGesture *gesture);
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_check (GtkGesture *gesture);
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
gboolean gtk_gesture_get_touch_only (GtkGesture *gesture);
|
|
|
|
GDK_AVAILABLE_IN_3_14
|
|
void gtk_gesture_set_touch_only (GtkGesture *gesture,
|
|
gboolean touch_only);
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* __GTK_GESTURE_H__ */
|