summaryrefslogtreecommitdiff
path: root/sys/src/cmd/nusb/kb/kb.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-08-10 07:59:54 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-08-10 07:59:54 +0200
commitf887f713207d40d1d3269b1e1bc29dc53697ab85 (patch)
treeb9bb1184d89872623b6d0754a75e2851d4c2bc81 /sys/src/cmd/nusb/kb/kb.c
parentdfe6118e302d63d21251aa18fb1d12e15bcbe482 (diff)
nusb/kb: only send to mousein when mouse state actually changes
Diffstat (limited to 'sys/src/cmd/nusb/kb/kb.c')
-rw-r--r--sys/src/cmd/nusb/kb/kb.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/src/cmd/nusb/kb/kb.c b/sys/src/cmd/nusb/kb/kb.c
index 4961a169b..4fb32178e 100644
--- a/sys/src/cmd/nusb/kb/kb.c
+++ b/sys/src/cmd/nusb/kb/kb.c
@@ -460,6 +460,7 @@ ptrwork(void* a)
char err[ERRMAX];
char mbuf[80];
int c, b, nerrs;
+ int lastx, lasty, lastb;
KDev* f = a;
Ptr p;
@@ -467,6 +468,7 @@ ptrwork(void* a)
sethipri();
memset(&p, 0, sizeof(p));
+ lastx = lasty = lastb = 0;
nerrs = 0;
for(;;){
@@ -508,7 +510,14 @@ ptrwork(void* a)
if(p.z != 0)
b |= (p.z > 0) ? 8 : 16;
- seprint(mbuf, mbuf+sizeof(mbuf), "m%11d %11d %11d", p.x, p.y, b);
+ if(lastx == p.x && lasty == p.y && lastb == b)
+ continue;
+
+ lastx = p.x;
+ lasty = p.y;
+ lastb = b;
+
+ seprint(mbuf, mbuf+sizeof(mbuf), "m%11d %11d %11d", lastx, lasty, lastb);
if(write(f->infd, mbuf, strlen(mbuf)) < 0)
kbfatal(f, "mousein i/o");
}