summaryrefslogtreecommitdiffstats
path: root/library
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2015-10-09 18:57:20 (GMT)
committerfvogel <fvogelnew1@free.fr>2015-10-09 18:57:20 (GMT)
commit8b801ee48d016fb44dee5bcc272a19b43d180d6c (patch)
treef98e826f8909ca93e624311f39efdfa68276ea6a /library
parent496701e1edf870a41c1a4022efbd457a5a73e7fd (diff)
parent39a05589d95ac9864792887ef9c223fa8b09fbaa (diff)
downloadtk-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.tcl40
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
+ }
}
}