Posted to tcl by de at Wed Mar 19 00:37:18 GMT 2008view pretty
proc MouseWheel {wFired D X Y} { # do not double-fire in case the class already has a binding if {[bind [winfo class $wFired] <MouseWheel>] ne ""} { return } # obtain the window the mouse is over set w [winfo containing $X $Y] # if we are outside the app, try and scroll the focus widget if {![winfo exists $w]} { catch {set w [focus]} } if {[winfo exists $w]} { # scrollbars have different call conventions if {[winfo class $w] eq "Scrollbar"} { catch {tk::ScrollByUnits $w \ [string index [$w cget -orient] 0] \ [expr {-($D/30)}]} } else { while {$w ne ""} { if {[lsearch $::mw_classes [winfo class $w]] > -1} { if {[$w cget -yscrollcommand] eq ""} { set w [winfo parent $w] continue } catch {$w yview scroll [expr {- ($D / 120) * 4}] units} break } set w [winfo parent $w] } } } } set ::mw_classes [list Text Canvas Listbox Table TreeCtrl] foreach class $::mw_classes { bind $class <MouseWheel> {} } if {[tk windowingsystem] eq "x11"} { foreach class $::mw_classes { bind $class <4> {} bind $class <5> {} } } bind all <MouseWheel> [list MouseWheel %W %D %X %Y] if {[tk windowingsystem] eq "x11"} { # Support for mousewheels on Linux/Unix commonly comes through # mapping the wheel to the extended buttons. bind all <4> [list MouseWheel %W 120 %X %Y] bind all <5> [list MouseWheel %W -120 %X %Y] }