diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-01-05 02:37:42 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-01-05 02:37:42 +0100 |
commit | f912e018548a1977d849016dca29f9d64cae4f47 (patch) | |
tree | c92a6e6a9fd9758ece4af76021b41d7ee6ac6754 /sys/src/cmd/rio | |
parent | 536423eba6eab6fc8b47b49fb6e25bf38168ffe7 (diff) |
rio: make scrollwheel handling consistent with sam
scrollwheel now works proportional to y mouse position.
special case is when shift is hold down. then scrollwheel
will work like before and scroll one line up or down.
Diffstat (limited to 'sys/src/cmd/rio')
-rw-r--r-- | sys/src/cmd/rio/scrl.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/rio/wind.c | 32 |
2 files changed, 14 insertions, 22 deletions
diff --git a/sys/src/cmd/rio/scrl.c b/sys/src/cmd/rio/scrl.c index 24d0ae568..de0257538 100644 --- a/sys/src/cmd/rio/scrl.c +++ b/sys/src/cmd/rio/scrl.c @@ -153,7 +153,7 @@ wscroll(Window *w, int but) readmouse(&w->mc); continue; } - if(but == 1) + if(but == 1 || but == 4) p0 = wbacknl(w, w->org, (my-s.min.y)/w->font->height); else p0 = w->org+frcharofpt(w, Pt(s.max.x, my)); @@ -163,6 +163,8 @@ wscroll(Window *w, int but) /* debounce */ if(first){ flushimage(display, 1); + if(but > 3) + return; sleep(200); nbrecv(w->mc.c, &w->mc.Mouse); first = FALSE; diff --git a/sys/src/cmd/rio/wind.c b/sys/src/cmd/rio/wind.c index 429390a28..9b8f38d01 100644 --- a/sys/src/cmd/rio/wind.c +++ b/sys/src/cmd/rio/wind.c @@ -900,32 +900,22 @@ wmousectl(Window *w) { int but; - if(w->mc.buttons == 1) - but = 1; - else if(w->mc.buttons == 2) - but = 2; - else if(w->mc.buttons == 4) - but = 3; - else{ - if(w->mc.buttons == 8) - wkeyctl(w, Kscrolloneup); - if(w->mc.buttons == 16) - wkeyctl(w, Kscrollonedown); - return; + for(but=1;; but++){ + if(but > 5) + return; + if(w->mc.buttons == 1<<(but-1)) + break; } incref(w); /* hold up window while we track */ - if(w->i==nil) - goto Return; - if(ptinrect(w->mc.xy, w->scrollr)){ - if(but) + if(w->i != nil){ + if(shiftdown && but > 3) + wkeyctl(w, but == 4 ? Kscrolloneup : Kscrollonedown); + else if(ptinrect(w->mc.xy, w->scrollr) || (but > 3)) wscroll(w, but); - goto Return; + else if(but == 1) + wselect(w); } - if(but == 1) - wselect(w); - /* else all is handled by main process */ - Return: wclose(w); } |