From 5a84d0ece0af652f3453088e1b2524c36730dff7 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 28 Dec 2015 11:06:03 +0000 Subject: first commit --- .../marek-d81b0fcb81100cd01728040529e90a21da5e189c | 134 +++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 master/marek-d81b0fcb81100cd01728040529e90a21da5e189c (limited to 'master/marek-d81b0fcb81100cd01728040529e90a21da5e189c') 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); -- cgit v1.2.3