diff options
author | fvogel <fvogelnew1@free.fr> | 2015-10-09 18:57:20 (GMT) |
---|---|---|
committer | fvogel <fvogelnew1@free.fr> | 2015-10-09 18:57:20 (GMT) |
commit | 8b801ee48d016fb44dee5bcc272a19b43d180d6c (patch) | |
tree | f98e826f8909ca93e624311f39efdfa68276ea6a /library | |
parent | 496701e1edf870a41c1a4022efbd457a5a73e7fd (diff) | |
parent | 39a05589d95ac9864792887ef9c223fa8b09fbaa (diff) | |
download | tk-8b801ee48d016fb44dee5bcc272a19b43d180d6c.zip tk-8b801ee48d016fb44dee5bcc272a19b43d180d6c.tar.gz tk-8b801ee48d016fb44dee5bcc272a19b43d180d6c.tar.bz2 |
Fixed bug [1669632fff] - text widget: autoseparator placement, <Control-1> cleanup
Diffstat (limited to 'library')
-rw-r--r-- | library/text.tcl | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/library/text.tcl b/library/text.tcl index 0e43e61..68ca0f5 100644 --- a/library/text.tcl +++ b/library/text.tcl @@ -85,7 +85,16 @@ bind Text <ButtonRelease-1> { } bind Text <Control-1> { %W mark set insert @%x,%y + # An operation that moves the insert mark without making it + # one end of the selection must insert an autoseparator + if {[%W cget -autoseparators]} { + %W edit separator + } } +# stop an accidental double click triggering <Double-Button-1> +bind Text <Double-Control-1> { # nothing } +# stop an accidental movement triggering <B1-Motion> +bind Text <Control-B1-Motion> { # nothing } bind Text <Left> { tk::TextSetCursor %W insert-1displayindices } @@ -241,6 +250,11 @@ bind Text <Control-slash> { } bind Text <Control-backslash> { %W tag remove sel 1.0 end + # An operation that clears the selection must insert an autoseparator, + # because the selection operation may have moved the insert mark + if {[%W cget -autoseparators]} { + %W edit separator + } } bind Text <<Cut>> { tk_textCut %W @@ -252,7 +266,15 @@ bind Text <<Paste>> { tk_textPaste %W } bind Text <<Clear>> { + # Make <<Clear>> an atomic operation on the Undo stack, + # i.e. separate it from other delete operations on either side + if {[%W cget -autoseparators]} { + %W edit separator + } catch {%W delete sel.first sel.last} + if {[%W cget -autoseparators]} { + %W edit separator + } } bind Text <<PasteSelection>> { if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] @@ -340,7 +362,16 @@ bind Text <Control-t> { } bind Text <<Undo>> { + # An Undo operation may remove the separator at the top of the Undo stack. + # Then the item at the top of the stack gets merged with the subsequent changes. + # Place separators before and after Undo to prevent this. + if {[%W cget -autoseparators]} { + %W edit separator + } catch { %W edit undo } + if {[%W cget -autoseparators]} { + %W edit separator + } } bind Text <<Redo>> { @@ -1054,9 +1085,18 @@ proc ::tk_textCopy w { proc ::tk_textCut w { if {![catch {set data [$w get sel.first sel.last]}]} { + # make <<Cut>> an atomic operation on the Undo stack, + # i.e. separate it from other delete operations on either side + set oldSeparator [$w cget -autoseparators] + if {$oldSeparator} { + $w edit separator + } clipboard clear -displayof $w clipboard append -displayof $w $data $w delete sel.first sel.last + if {$oldSeparator} { + $w edit separator + } } } |