summaryrefslogtreecommitdiff
path: root/src/hwstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hwstate.c')
-rw-r--r--src/hwstate.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/hwstate.c b/src/hwstate.c
index 1a68d28..d758d25 100644
--- a/src/hwstate.c
+++ b/src/hwstate.c
@@ -23,6 +23,8 @@
23#include <stdlib.h> 23#include <stdlib.h>
24#include <limits.h> 24#include <limits.h>
25 25
26#define NOTOUCH(hw, c) ((hw)->touch_major == 0 && (c)->has_touch_major)
27
26const int XMAX = 32767; 28const int XMAX = 32767;
27 29
28void init_hwstate(struct HWState *s) 30void init_hwstate(struct HWState *s)
@@ -88,6 +90,8 @@ void modify_hwstate(struct HWState *s,
88 /* setup distance matrix for finger id matching */ 90 /* setup distance matrix for finger id matching */
89 for (j = 0; j < s->nfinger; j++) { 91 for (j = 0; j < s->nfinger; j++) {
90 sid[j] = s->finger[j].id; 92 sid[j] = s->finger[j].id;
93 if (NOTOUCH(&s->finger[j].hw, caps))
94 sid[j] = 0;
91 row = A + hw->nfinger * j; 95 row = A + hw->nfinger * j;
92 for (i = 0; i < hw->nfinger; i++) 96 for (i = 0; i < hw->nfinger; i++)
93 row[i] = dist2(&hw->finger[i], &s->finger[j].hw); 97 row[i] = dist2(&hw->finger[i], &s->finger[j].hw);
@@ -99,11 +103,16 @@ void modify_hwstate(struct HWState *s,
99 for (i = 0; i < hw->nfinger; i++) { 103 for (i = 0; i < hw->nfinger; i++) {
100 j = hw2s[i]; 104 j = hw2s[i];
101 id = j >= 0 ? sid[j] : 0; 105 id = j >= 0 ? sid[j] : 0;
102 while (!id) 106 if (!NOTOUCH(&hw->finger[i], caps))
103 id = ++s->lastid; 107 while (!id)
108 id = ++s->lastid;
104 set_finger(&s->finger[i], &hw->finger[i], id, caps); 109 set_finger(&s->finger[i], &hw->finger[i], id, caps);
105 } 110 }
106 111
112 /* clear remaining finger ids */
113 for (i = hw->nfinger; i < s->nfinger; i++)
114 s->finger[i].id = 0;
115
107 s->button = hw->button; 116 s->button = hw->button;
108 s->nfinger = hw->nfinger; 117 s->nfinger = hw->nfinger;
109 s->evtime = hw->evtime; 118 s->evtime = hw->evtime;