st-button: Ignore pointer emulated touch events
In X11, pointer emulated touch events are replicated with normal PRESS, RELEASE
pair events which are generated by the server. Thus for a single tap we get:
- TOUCH_BEGIN -> TOUCH_END, PRESS -> RELEASE
This will cause st-button to send two "clicked" signals, instead of just one,
breaking extensions (like dash-to-dock) that show buttons in the main stage
which will be checked two times or that will receive the same signal two times.
(cherry picked from commit 4c11d15a07
)
This commit is contained in:
parent
f645368c66
commit
5246da5837
@ -248,14 +248,17 @@ st_button_touch_event (ClutterActor *actor,
|
|||||||
if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
|
if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
|
||||||
{
|
{
|
||||||
clutter_input_device_sequence_grab (device, sequence, actor);
|
clutter_input_device_sequence_grab (device, sequence, actor);
|
||||||
st_button_press (button, device, 0, sequence);
|
if (!clutter_event_is_pointer_emulated ((ClutterEvent*) event))
|
||||||
|
st_button_press (button, device, 0, sequence);
|
||||||
return CLUTTER_EVENT_STOP;
|
return CLUTTER_EVENT_STOP;
|
||||||
}
|
}
|
||||||
else if (event->type == CLUTTER_TOUCH_END &&
|
else if (event->type == CLUTTER_TOUCH_END &&
|
||||||
priv->device == device &&
|
priv->device == device &&
|
||||||
priv->press_sequence == sequence)
|
priv->press_sequence == sequence)
|
||||||
{
|
{
|
||||||
st_button_release (button, device, mask, 0, sequence);
|
if (!clutter_event_is_pointer_emulated ((ClutterEvent*) event))
|
||||||
|
st_button_release (button, device, mask, 0, sequence);
|
||||||
|
|
||||||
clutter_input_device_sequence_ungrab (device, sequence);
|
clutter_input_device_sequence_ungrab (device, sequence);
|
||||||
return CLUTTER_EVENT_STOP;
|
return CLUTTER_EVENT_STOP;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user