Skip to content

Commit 4326699

Browse files
committed
gitk: fix trackpad scrolling for Tcl/Tk 8.7+
TIP 684 [1] introduced TouchpadScroll events in Tcl/Tk 8.7, separating trackpad gestures from traditional MouseWheel events. This broke trackpad scrolling in gitk where trackpads generate TouchpadScroll events instead of MouseWheel events. Fix that by adding TouchpadScroll event bindings for all scrollable widgets following the TIP 684 specification. Implement a new precisescrollval proc to handle the smaller delta values from TouchpadScroll events, using appropriate scaling factors that seem sensible on my MacBook. Fixes j6t/gitk#31. [1]: https://core.tcl-lang.org/tips/doc/main/tip/684.md Signed-off-by: Ruoyu Zhong <[email protected]>
1 parent be1829c commit 4326699

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

gitk

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2301,6 +2301,11 @@ proc scrollval {D {koff 0}} {
23012301
return [expr int(-($D / $scroll_D0) * max(1, $kscroll-$koff))]
23022302
}
23032303
2304+
proc precisescrollval {D {koff 0}} {
2305+
global kscroll
2306+
return [expr (-($D / 10.0) * max(1, $kscroll-$koff))]
2307+
}
2308+
23042309
proc bind_mousewheel {} {
23052310
global canv cflist ctext
23062311
bindall <MouseWheel> {allcanvs yview scroll [scrollval %D] units}
@@ -2319,6 +2324,25 @@ proc bind_mousewheel {} {
23192324
bind $cflist <Alt-MouseWheel> {$cflist yview scroll [scrollval 5*%D 2] units}
23202325
bind $cflist <Alt-Shift-MouseWheel> break
23212326
bind $canv <Alt-Shift-MouseWheel> {$canv xview scroll [scrollval 5*%D] units}
2327+
2328+
bindall <TouchpadScroll> {
2329+
lassign [tk::PreciseScrollDeltas %D] deltaX deltaY
2330+
allcanvs yview scroll [precisescrollval $deltaY] units
2331+
}
2332+
bind $ctext <TouchpadScroll> {
2333+
lassign [tk::PreciseScrollDeltas %D] deltaX deltaY
2334+
$ctext yview scroll [precisescrollval $deltaY 2] units
2335+
$ctext xview scroll [precisescrollval $deltaX 2] units
2336+
}
2337+
bind $cflist <TouchpadScroll> {
2338+
lassign [tk::PreciseScrollDeltas %D] deltaX deltaY
2339+
$cflist yview scroll [precisescrollval $deltaY 2] units
2340+
}
2341+
bind $canv <TouchpadScroll> {
2342+
lassign [tk::PreciseScrollDeltas %D] deltaX deltaY
2343+
$canv xview scroll [precisescrollval $deltaX] units
2344+
allcanvs yview scroll [precisescrollval $deltaY] units
2345+
}
23222346
}
23232347
}
23242348

0 commit comments

Comments
 (0)