diff options
author | treectrl <treectrl> | 2004-08-09 02:42:44 (GMT) |
---|---|---|
committer | treectrl <treectrl> | 2004-08-09 02:42:44 (GMT) |
commit | 61765e24585619292b8cf7ffabf1c7b5acabf7e1 (patch) | |
tree | 5b3ce37438f2cc0fd2083e7cc7a4976b52d9aa16 /library/treectrl.tcl | |
parent | cc8fdb24041c17091a601bac7d6747c4b1519e8f (diff) | |
download | tktreectrl-61765e24585619292b8cf7ffabf1c7b5acabf7e1.zip tktreectrl-61765e24585619292b8cf7ffabf1c7b5acabf7e1.tar.gz tktreectrl-61765e24585619292b8cf7ffabf1c7b5acabf7e1.tar.bz2 |
Clear Priv(prev) after tracking a selection to avoid error in TreeCtrl::Cancel.
Rewrite TreeCtrl::Motion to generate a single <Selection> event.
Diffstat (limited to 'library/treectrl.tcl')
-rw-r--r-- | library/treectrl.tcl | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/library/treectrl.tcl b/library/treectrl.tcl index 96d4f57..1f7b98d 100644 --- a/library/treectrl.tcl +++ b/library/treectrl.tcl @@ -440,6 +440,7 @@ proc ::TreeCtrl::Release1 {w x y} { normal { AutoScanCancel $w $w activate [$w index [list nearest $x $y]] +set Priv(prev) "" } resize { if {[$w cget -columnproxy] ne ""} { @@ -537,6 +538,54 @@ proc ::TreeCtrl::Motion {w el} { } } +# Different version that uses single "selection modify" call +proc ::TreeCtrl::Motion {w el} { + variable Priv + if {$el eq $Priv(prev)} { + return + } + switch [$w cget -selectmode] { + browse { + $w selection modify $el all + set Priv(prev) $el + } + extended { + set i $Priv(prev) + set select {} + set deselect {} + if {$i eq ""} { + set i $el + lappend select $el + set hack [$w compare $el == anchor] + } + if {[$w selection includes anchor] || $hack} { + set deselect [concat $deselect [$w range $i $el]] + set select [concat $select [$w range anchor $el]] + } else { + set deselect [concat $deselect [$w range $i $el]] + set deselect [concat $deselect [$w range anchor $el]] + } + if {![info exists Priv(selection)]} { + set Priv(selection) [$w selection get] + } + while {[$w compare $i < $el] && [$w compare $i < anchor]} { + if {[lsearch $Priv(selection) $i] >= 0} { + lappend select $i + } + set i [$w index "$i next visible"] + } + while {[$w compare $i > $el] && [$w compare $i > anchor]} { + if {[lsearch $Priv(selection) $i] >= 0} { + lappend select $i + } + set i [$w index "$i prev visible"] + } + set Priv(prev) $el + $w selection modify $select $deselect + } + } +} + # ::TreeCtrl::BeginExtend -- # # This procedure is typically invoked on shift-button-1 presses. It |