diff options
author | jenglish <jenglish@flightlab.com> | 2014-05-27 19:33:22 (GMT) |
---|---|---|
committer | jenglish <jenglish@flightlab.com> | 2014-05-27 19:33:22 (GMT) |
commit | 3b641c87437e0c46c5d0044fb7d8776cb0a7057e (patch) | |
tree | 93fb89a6fff97460df4625dc94a7dbd8d7aef58a /library/ttk | |
parent | d7ee142e48003c330b9bf21eed8549ffeae6ad1d (diff) | |
download | tk-3b641c87437e0c46c5d0044fb7d8776cb0a7057e.zip tk-3b641c87437e0c46c5d0044fb7d8776cb0a7057e.tar.gz tk-3b641c87437e0c46c5d0044fb7d8776cb0a7057e.tar.bz2 |
ttk::entry, ttk::combobox: proposed fix for [a80f5d7165]:
keep track of whether a drag transaction is in progress;
only initiate autoscroll in <B1-Leave> if selectMode is not "none"
and if %m is NotifyNormal.
Diffstat (limited to 'library/ttk')
-rw-r--r-- | library/ttk/entry.tcl | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/library/ttk/entry.tcl b/library/ttk/entry.tcl index 2c9fbc8..f16cf8b 100644 --- a/library/ttk/entry.tcl +++ b/library/ttk/entry.tcl @@ -14,7 +14,7 @@ namespace eval ttk { variable State set State(x) 0 - set State(selectMode) char + set State(selectMode) none set State(anchor) 0 set State(scanX) 0 set State(scanIndex) 0 @@ -74,9 +74,9 @@ bind TEntry <Double-ButtonPress-1> { ttk::entry::Select %W %x word } bind TEntry <Triple-ButtonPress-1> { ttk::entry::Select %W %x line } bind TEntry <B1-Motion> { ttk::entry::Drag %W %x } -bind TEntry <B1-Leave> { ttk::Repeatedly ttk::entry::AutoScroll %W } -bind TEntry <B1-Enter> { ttk::CancelRepeat } -bind TEntry <ButtonRelease-1> { ttk::CancelRepeat } +bind TEntry <B1-Leave> { ttk::entry::DragOut %W %m } +bind TEntry <B1-Enter> { ttk::entry::DragIn %W } +bind TEntry <ButtonRelease-1> { ttk::entry::Release %W } bind TEntry <Control-ButtonPress-1> { %W instate {!readonly !disabled} { %W icursor @%x ; focus %W } @@ -404,14 +404,40 @@ proc ttk::entry::DragTo {w x} { char { CharSelect $w $State(anchor) $cur } word { WordSelect $w $State(anchor) $cur } line { LineSelect $w $State(anchor) $cur } + none { # no-op } } } +## <B1-Leave> binding: +# Begin autoscroll. +# +proc ttk::entry::DragOut {w mode} { + variable State + if {$State(selectMode) ne "none" && $mode eq "NotifyNormal"} { + ttk::Repeatedly ttk::entry::AutoScroll $w + } +} + +## <B1-Enter> binding +# Suspend autoscroll. +# +proc ttk::entry::DragIn {w} { + ttk::CancelRepeat +} + +## <ButtonRelease-1> binding +# +proc ttk::entry::Release {w} { + variable State + set State(selectMode) none + ttk::CancelRepeat ;# suspend autoscroll +} + ## AutoScroll # Called repeatedly when the mouse is outside an entry window # with Button 1 down. Scroll the window left or right, -# depending on where the mouse is, and extend the selection -# according to the current selection mode. +# depending on where the mouse left the window, and extend +# the selection according to the current selection mode. # # TODO: AutoScroll should repeat faster (50ms) than normal autorepeat. # TODO: Need a way for Repeat scripts to cancel themselves. |