[gnome-shell] st-button: Ignore pointer emulated touch events



commit 4c11d15a074aeca72627c44e327e2dc2afa93ae3
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Thu Oct 25 06:35:25 2018 +0200

    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.

 src/st/st-button.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/src/st/st-button.c b/src/st/st-button.c
index 8f5c4922f..a3a7b2442 100644
--- a/src/st/st-button.c
+++ b/src/st/st-button.c
@@ -248,14 +248,17 @@ st_button_touch_event (ClutterActor      *actor,
   if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
     {
       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;
     }
   else if (event->type == CLUTTER_TOUCH_END &&
            priv->device == device &&
            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);
       return CLUTTER_EVENT_STOP;
     }


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