Discard motion events with the same timestamp
authorAlexander Koenig <alex@lisas.de>
Sun, 14 Feb 2021 15:50:31 +0000 (16:50 +0100)
committerAlexander Koenig <alex@lisas.de>
Sun, 14 Feb 2021 15:50:31 +0000 (16:50 +0100)
It seems that XWarpPointer triggers synthetic mouse motion events
when more than one screens are in use. They seem to have the same
timestamp which allows terminatorX to workaround the duplicates.

src/tX_mouse.cc
src/tX_mouse.h

index 8093ef4513776cc6279bf0057c3bb8f7176702dc..72b78199baf6def9adfeb2e3a9cb4c47a14b4a2d 100644 (file)
@@ -58,6 +58,8 @@ tx_mouse ::tx_mouse() {
 
     last_button_press = 0;
     last_button_release = 0;
+
+    motion_timestamp = 0;
 }
 
 int tx_mouse ::grab() {
@@ -217,6 +219,12 @@ void tx_mouse::ungrab_linux_input() {
 #define vtt vtt_class::focused_vtt
 
 void tx_mouse::motion_notify(GtkWidget* widget, GdkEventMotion* eventMotion) {
+    if (eventMotion->time == motion_timestamp) {
+       return;
+    }
+
+    motion_timestamp = eventMotion->time;
+
     if ((grab_mode == FALLBACK) && vtt) {
         gdouble d_x = eventMotion->x_root - x_abs;
         gdouble d_y = eventMotion->y_root - y_abs;
index 5536ad221d0a89a826423f51dac759a2ad0e7532..0d4ecaeaa26864392b7638f2ff56f004adaaa9d9 100644 (file)
@@ -98,6 +98,8 @@ class tx_mouse {
         LINUX_INPUT
     } grab_mode;
 
+    guint32 motion_timestamp;
+
     GIOChannel* linux_input_channel;
     guint linux_input_watch;