gesturesingle: Add an "exclusive" boolean property
All "exclusive" gestures listen for either pointer events, or "pointer emulating" touch events, so only a single sequence at a time can make these run.
This commit is contained in:
@ -7963,6 +7963,8 @@ gtk_gesture_get_type
|
|||||||
<FILE>gtkgesturesingle</FILE>
|
<FILE>gtkgesturesingle</FILE>
|
||||||
<TITLE>GtkGestureSingle</TITLE>
|
<TITLE>GtkGestureSingle</TITLE>
|
||||||
GtkGestureSingle
|
GtkGestureSingle
|
||||||
|
gtk_gesture_single_get_exclusive
|
||||||
|
gtk_gesture_single_set_exclusive
|
||||||
gtk_gesture_single_get_touch_only
|
gtk_gesture_single_get_touch_only
|
||||||
gtk_gesture_single_set_touch_only
|
gtk_gesture_single_set_touch_only
|
||||||
gtk_gesture_single_get_button
|
gtk_gesture_single_get_button
|
||||||
|
@ -48,10 +48,12 @@ struct _GtkGestureSinglePrivate
|
|||||||
guint button;
|
guint button;
|
||||||
guint current_button;
|
guint current_button;
|
||||||
guint touch_only : 1;
|
guint touch_only : 1;
|
||||||
|
guint exclusive : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_TOUCH_ONLY = 1,
|
PROP_TOUCH_ONLY = 1,
|
||||||
|
PROP_EXCLUSIVE,
|
||||||
PROP_BUTTON
|
PROP_BUTTON
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -73,6 +75,9 @@ gtk_gesture_single_get_property (GObject *object,
|
|||||||
case PROP_TOUCH_ONLY:
|
case PROP_TOUCH_ONLY:
|
||||||
g_value_set_boolean (value, priv->touch_only);
|
g_value_set_boolean (value, priv->touch_only);
|
||||||
break;
|
break;
|
||||||
|
case PROP_EXCLUSIVE:
|
||||||
|
g_value_set_boolean (value, priv->exclusive);
|
||||||
|
break;
|
||||||
case PROP_BUTTON:
|
case PROP_BUTTON:
|
||||||
g_value_set_uint (value, priv->button);
|
g_value_set_uint (value, priv->button);
|
||||||
break;
|
break;
|
||||||
@ -93,6 +98,10 @@ gtk_gesture_single_set_property (GObject *object,
|
|||||||
gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (object),
|
gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (object),
|
||||||
g_value_get_boolean (value));
|
g_value_get_boolean (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_EXCLUSIVE:
|
||||||
|
gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (object),
|
||||||
|
g_value_get_boolean (value));
|
||||||
|
break;
|
||||||
case PROP_BUTTON:
|
case PROP_BUTTON:
|
||||||
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (object),
|
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (object),
|
||||||
g_value_get_uint (value));
|
g_value_get_uint (value));
|
||||||
@ -136,6 +145,9 @@ gtk_gesture_single_handle_event (GtkEventController *controller,
|
|||||||
case GDK_TOUCH_BEGIN:
|
case GDK_TOUCH_BEGIN:
|
||||||
case GDK_TOUCH_END:
|
case GDK_TOUCH_END:
|
||||||
case GDK_TOUCH_UPDATE:
|
case GDK_TOUCH_UPDATE:
|
||||||
|
if (priv->exclusive && !event->touch.emulating_pointer)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
sequence = event->touch.sequence;
|
sequence = event->touch.sequence;
|
||||||
button = 1;
|
button = 1;
|
||||||
break;
|
break;
|
||||||
@ -226,6 +238,21 @@ gtk_gesture_single_class_init (GtkGestureSingleClass *klass)
|
|||||||
" only touch events"),
|
" only touch events"),
|
||||||
TRUE,
|
TRUE,
|
||||||
GTK_PARAM_READWRITE));
|
GTK_PARAM_READWRITE));
|
||||||
|
/**
|
||||||
|
* GtkGestureSingle:exclusive:
|
||||||
|
*
|
||||||
|
* Whether the gesture is exclusive. Exclusive gestures only listen to pointer
|
||||||
|
* and pointer emulated events.
|
||||||
|
*
|
||||||
|
* Since: 3.14
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (object_class,
|
||||||
|
PROP_EXCLUSIVE,
|
||||||
|
g_param_spec_boolean ("exclusive",
|
||||||
|
P_("Whether the gesture is exclusive"),
|
||||||
|
P_("Whether the gesture is exclusive"),
|
||||||
|
FALSE,
|
||||||
|
GTK_PARAM_READWRITE));
|
||||||
/**
|
/**
|
||||||
* GtkGestureSingle:button:
|
* GtkGestureSingle:button:
|
||||||
*
|
*
|
||||||
@ -325,6 +352,60 @@ gtk_gesture_single_set_touch_only (GtkGestureSingle *gesture,
|
|||||||
g_object_notify (G_OBJECT (gesture), "touch-only");
|
g_object_notify (G_OBJECT (gesture), "touch-only");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_gesture_single_get_exclusive:
|
||||||
|
* @gesture: a #GtkGestureSingle
|
||||||
|
*
|
||||||
|
* Gets whether a gesture is exclusive. For more information, see
|
||||||
|
* gtk_gesture_single_set_exclusive().
|
||||||
|
*
|
||||||
|
* Returns: Whether the gesture is exclusive
|
||||||
|
*
|
||||||
|
* Since: 3.14
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
gtk_gesture_single_get_exclusive (GtkGestureSingle *gesture)
|
||||||
|
{
|
||||||
|
GtkGestureSinglePrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GTK_IS_GESTURE_SINGLE (gesture), FALSE);
|
||||||
|
|
||||||
|
priv = gtk_gesture_single_get_instance_private (gesture);
|
||||||
|
|
||||||
|
return priv->exclusive;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_gesture_single_set_exclusive:
|
||||||
|
* @gesture: a #GtkGestureSingle
|
||||||
|
* @exclusive: #TRUE to make @gesture exclusive
|
||||||
|
*
|
||||||
|
* Sets whether @gesture is exclusive. An exclusive gesture will
|
||||||
|
* only handle pointer and "pointer emulated" touch events, so at
|
||||||
|
* any given time, there is only one sequence able to interact with
|
||||||
|
* those.
|
||||||
|
*
|
||||||
|
* Since: 3.14
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gtk_gesture_single_set_exclusive (GtkGestureSingle *gesture,
|
||||||
|
gboolean exclusive)
|
||||||
|
{
|
||||||
|
GtkGestureSinglePrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_GESTURE_SINGLE (gesture));
|
||||||
|
|
||||||
|
exclusive = exclusive != FALSE;
|
||||||
|
priv = gtk_gesture_single_get_instance_private (gesture);
|
||||||
|
|
||||||
|
if (priv->exclusive == exclusive)
|
||||||
|
return;
|
||||||
|
|
||||||
|
priv->exclusive = exclusive;
|
||||||
|
_gtk_gesture_single_update_evmask (gesture);
|
||||||
|
g_object_notify (G_OBJECT (gesture), "exclusive");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_gesture_single_get_button:
|
* gtk_gesture_single_get_button:
|
||||||
* @gesture: a #GtkGestureSingle
|
* @gesture: a #GtkGestureSingle
|
||||||
|
@ -49,6 +49,13 @@ GDK_AVAILABLE_IN_3_14
|
|||||||
void gtk_gesture_single_set_touch_only (GtkGestureSingle *gesture,
|
void gtk_gesture_single_set_touch_only (GtkGestureSingle *gesture,
|
||||||
gboolean touch_only);
|
gboolean touch_only);
|
||||||
GDK_AVAILABLE_IN_3_14
|
GDK_AVAILABLE_IN_3_14
|
||||||
|
gboolean gtk_gesture_single_get_exclusive (GtkGestureSingle *gesture);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_3_14
|
||||||
|
void gtk_gesture_single_set_exclusive (GtkGestureSingle *gesture,
|
||||||
|
gboolean exclusive);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_3_14
|
||||||
guint gtk_gesture_single_get_button (GtkGestureSingle *gesture);
|
guint gtk_gesture_single_get_button (GtkGestureSingle *gesture);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_3_14
|
GDK_AVAILABLE_IN_3_14
|
||||||
|
Reference in New Issue
Block a user