@@ -15,6 +15,7 @@ import (
1515 "cogentcore.org/core/colors"
1616 "cogentcore.org/core/cursors"
1717 "cogentcore.org/core/events"
18+ "cogentcore.org/core/events/key"
1819 "cogentcore.org/core/icons"
1920 "cogentcore.org/core/keymap"
2021 "cogentcore.org/core/math32"
@@ -230,7 +231,9 @@ func (tx *Text) Init() {
230231 system .TheApp .OpenURL (tl .URL )
231232 })
232233 tx .OnFocusLost (func (e events.Event ) {
233- tx .selectReset ()
234+ if ! (tx .Scene .selectedText != nil && ! e .HasAnyModifier (key .Shift , key .Meta )) {
235+ tx .selectReset ()
236+ }
234237 })
235238 tx .OnKeyChord (func (e events.Event ) {
236239 if tx .selectRange .Len () == 0 {
@@ -251,7 +254,9 @@ func (tx *Text) Init() {
251254 }
252255 })
253256 tx .OnFinal (events .Click , func (e events.Event ) {
254- tx .Scene .selectedText = nil // reset
257+ if ! e .HasAnyModifier (key .Shift , key .Meta ) {
258+ tx .selectReset ()
259+ }
255260 if ! TheApp .SystemPlatform ().IsMobile () {
256261 return
257262 }
@@ -266,11 +271,17 @@ func (tx *Text) Init() {
266271 })
267272 tx .On (events .DoubleClick , func (e events.Event ) {
268273 e .SetHandled ()
274+ if ! slices .Contains (tx .Scene .selectedText , tx ) {
275+ tx .Scene .selectedText = append (tx .Scene .selectedText , tx )
276+ }
269277 tx .selectWord (tx .pixelToRune (e .Pos ()))
270278 tx .SetFocusQuiet ()
271279 })
272280 tx .On (events .TripleClick , func (e events.Event ) {
273281 e .SetHandled ()
282+ if ! slices .Contains (tx .Scene .selectedText , tx ) {
283+ tx .Scene .selectedText = append (tx .Scene .selectedText , tx )
284+ }
274285 tx .selectAll ()
275286 tx .SetFocusQuiet ()
276287 if TheApp .SystemPlatform ().IsMobile () {
@@ -376,7 +387,6 @@ func (tx *Text) copy() { //types:add
376387 sel += "\n "
377388 }
378389 sel += string (st .richText .Join ()[st .selectRange .Start :st .selectRange .End ])
379- st .selectReset ()
380390 }
381391 } else {
382392 // note: selectRange is in runes, not string indexes.
@@ -415,11 +425,19 @@ func (tx *Text) hasSelection() bool {
415425 return tx .selectRange .Len () > 0
416426}
417427
418- // selectReset resets any current selection
428+ // selectReset resets any current selection, including for the multi-text
429+ // Scene selectedText.
419430func (tx * Text ) selectReset () {
420- tx .selectRange .Start = 0
421- tx .selectRange .End = 0
422- tx .NeedsRender ()
431+ reset := func (t * Text ) {
432+ t .selectRange .Start = 0
433+ t .selectRange .End = 0
434+ t .NeedsRender ()
435+ }
436+ for _ , st := range tx .Scene .selectedText {
437+ reset (st )
438+ }
439+ reset (tx )
440+ tx .Scene .selectedText = nil
423441}
424442
425443// selectAll selects entire set of text
0 commit comments