summaryrefslogtreecommitdiffstats
path: root/master/marek-d81b0fcb81100cd01728040529e90a21da5e189c
diff options
context:
space:
mode:
authorroot <root@no.no.james.local>2015-12-28 11:06:03 +0000
committerroot <root@no.no.james.local>2015-12-28 11:06:03 +0000
commit5a84d0ece0af652f3453088e1b2524c36730dff7 (patch)
treed5d3ec766db6002d876c468d7d18132f469cb719 /master/marek-d81b0fcb81100cd01728040529e90a21da5e189c
downloadxorg-input-kobomultitouch-pq-master.tar.gz
xorg-input-kobomultitouch-pq-master.tar.bz2
xorg-input-kobomultitouch-pq-master.zip
first commitHEADmaster
Diffstat (limited to 'master/marek-d81b0fcb81100cd01728040529e90a21da5e189c')
-rw-r--r--master/marek-d81b0fcb81100cd01728040529e90a21da5e189c134
1 files changed, 134 insertions, 0 deletions
diff --git a/master/marek-d81b0fcb81100cd01728040529e90a21da5e189c b/master/marek-d81b0fcb81100cd01728040529e90a21da5e189c
new file mode 100644
index 0000000..784d6d7
--- /dev/null
+++ b/master/marek-d81b0fcb81100cd01728040529e90a21da5e189c
@@ -0,0 +1,134 @@
+diff --git a/driver/kobomultitouch_drv.c b/driver/kobomultitouch_drv.c
+index bca2b51..1dbdb9d 100644
+--- a/driver/kobomultitouch_drv.c
++++ b/driver/kobomultitouch_drv.c
+@@ -229,9 +229,12 @@ static void handle_gestures(LocalDevicePtr local,
+ hswipe = 0;
+ }
+ foreach_bit(i, gs->btmask) {
+- xf86PostMotionEvent(local->dev, 1, 0, 2, gs->posx, gs->posy);
+- xf86PostButtonEvent(local->dev, 1,
+- i + 1, GETBIT(gs->btdata, i), 0, 0);
++ if (GETBIT(gs->btdata, i)) {
++ xf86PostMotionEvent(local->dev, 1, 0, 2, gs->posx, gs->posy);
++ xf86PostButtonEvent(local->dev, 1, i + 1, 1, 0, 0);
++ } else {
++ xf86PostButtonEvent(local->dev, 1, i + 1, 0, 0, 0);
++ }
+ }
+ if (GETBIT(gs->type, GS_MOVE)) {
+ xf86PostMotionEvent(local->dev, 1, 0, 2, gs->posx, gs->posy);
+diff --git a/src/gestures.c b/src/gestures.c
+index bf19bdf..9ed2273 100644
+--- a/src/gestures.c
++++ b/src/gestures.c
+@@ -35,12 +35,13 @@ static const int BUTTON_HOLD_MS = 200;
+ */
+ void extract_mouse(struct Gestures *gs, struct MTouch* mt)
+ {
+- int nmove = bitcount(mt->mem.moving);
++ static int tracking_id = -1;
++
++ if (mt->prev_state.nfinger == 0 && mt->state.nfinger == 1) {
++ // pressed exactly one finger
+
+- if (GETBIT(mt->mem.added, 0)) {
+- // pressed first finger
+-
+ // lmb pressed
++ tracking_id = mt->state.finger[0].tracking_id;
+ gs->posx = mt->state.finger[0].position_x;
+ gs->posy = mt->state.finger[0].position_y;
+ SETBIT(gs->btmask, MT_BUTTON_LEFT);
+@@ -50,24 +51,24 @@ void extract_mouse(struct Gestures *gs, struct MTouch* mt)
+ return;
+ }
+
+- if (GETBIT(mt->mem.btdata, MT_BUTTON_LEFT) && !GETBIT(mt->mem.fingers, 0)) {
+- // released first finger
++ if (GETBIT(mt->mem.btdata, MT_BUTTON_LEFT)) {
++ // lmb is pressed
+
+- // lmb released
+- gs->posx = mt->state.finger[0].position_x;
+- gs->posy = mt->state.finger[0].position_y;
+- SETBIT(gs->btmask, MT_BUTTON_LEFT);
+- CLEARBIT(gs->btdata, MT_BUTTON_LEFT);
+- mt->mem.btdata = 0;
++ const struct FingerState *finger_state = find_finger(&mt->state, tracking_id);
+
+- return;
+- }
++ if (finger_state == NULL) {
++ // released first finger
+
+- if (GETBIT(mt->mem.btdata, MT_BUTTON_LEFT)) {
+- if (nmove == 1) {
++ // lmb released
++ tracking_id = -1;
++ SETBIT(gs->btmask, MT_BUTTON_LEFT);
++ CLEARBIT(gs->btdata, MT_BUTTON_LEFT);
++ mt->mem.btdata = 0;
++ }
++ else {
+ // mouse move
+- gs->posx = mt->state.finger[0].position_x;
+- gs->posy = mt->state.finger[0].position_y;
++ gs->posx = finger_state->position_x;
++ gs->posy = finger_state->position_y;
+ SETBIT(gs->type, GS_MOVE);
+ }
+ }
+@@ -316,5 +317,5 @@ void output_gesture(const struct Gestures *gs)
+ xf86Msg(X_INFO, "rotate: %d\n", gs->rot);
+ foreach_bit(i, gs->tapmask)
+ xf86Msg(X_INFO, "tap: %d %d\n", i, gs->ntap);
+- xf86Msg(X_INFO, "+");
++ xf86Msg(X_INFO, "\n");
+ }
+diff --git a/src/mtstate.c b/src/mtstate.c
+index e24a1e8..d2f9de5 100644
+--- a/src/mtstate.c
++++ b/src/mtstate.c
+@@ -103,25 +103,12 @@ const struct FingerState *find_finger(const struct MTState *s, int id)
+ void output_mtstate(const struct MTState *s)
+ {
+ int i;
+- xf86Msg(X_INFO, "buttons: %d%d%d\n",
+- GETBIT(s->button, MT_BUTTON_LEFT),
+- GETBIT(s->button, MT_BUTTON_MIDDLE),
+- GETBIT(s->button, MT_BUTTON_RIGHT));
+- xf86Msg(X_INFO, "fingers: %d\n",
+- s->nfinger);
+- xf86Msg(X_INFO, "evtime: %lld\n",
+- s->evtime);
++ xf86Msg(X_INFO, "-- fingers: %d, time: %lld\n",
++ s->nfinger, s->evtime);
+ for (i = 0; i < s->nfinger; i++) {
+ xf86Msg(X_INFO,
+- " %+02d %+05d:%+05d +%05d:%+05d "
+- "%+06d %+06d %+05d:%+05d\n",
++ " id: %+02d x: %+05d y: %+05d\n",
+ s->finger[i].tracking_id,
+- s->finger[i].touch_major,
+- s->finger[i].touch_minor,
+- s->finger[i].width_major,
+- s->finger[i].width_minor,
+- s->finger[i].orientation,
+- s->finger[i].pressure,
+ s->finger[i].position_x,
+ s->finger[i].position_y);
+ }
+diff --git a/src/test.c b/src/test.c
+index 5afa8b4..3597823 100644
+--- a/src/test.c
++++ b/src/test.c
+@@ -35,7 +35,7 @@ static void loop_device(int fd)
+ fprintf(stderr, "error: could not open device\n");
+ return;
+ }
+- while (!mtdev_idle(&mt.dev, fd, 5000)) {
++ while (1 == 1) { //(!mtdev_idle(&mt.dev, fd, 5000)) {
+ //while (read_packet(&mt, fd) > 0) {
+ // extract_gestures(&gs, &mt);
+ // output_gesture(&gs);