diff options
author | jenglish <jenglish@flightlab.com> | 2014-05-27 19:55:16 (GMT) |
---|---|---|
committer | jenglish <jenglish@flightlab.com> | 2014-05-27 19:55:16 (GMT) |
commit | 968fe6ebdc772775a846c5c228ba5bda39c2635f (patch) | |
tree | 92f0e874dfc33dd25f78b093821ed2bfa11909bf /library/ttk | |
parent | 8298160c25f62d849173c488609811bdf25bddb3 (diff) | |
parent | 4eef134b81ce51c72de77bbf523a61f83a4302ba (diff) | |
download | tk-968fe6ebdc772775a846c5c228ba5bda39c2635f.zip tk-968fe6ebdc772775a846c5c228ba5bda39c2635f.tar.gz tk-968fe6ebdc772775a846c5c228ba5bda39c2635f.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 %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 be2299f..b3ebcbd 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 <<ToggleSelection>> { %W instate {!readonly !disabled} { %W icursor @%x ; focus %W } @@ -400,14 +400,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. |