Wouldn't it be neat...

Richard Gaskin ambassador at fourthworld.com
Tue Aug 23 09:55:52 EDT 2016


Roger Guay wrote:

 > What I discovered is that a field (used for another feature) in my
 > rTools general catchall plugin butts in and prevents this code from
 > seeing the selectedText of the topStack. Indeed, if a paste a field
 > in your TextToolBar stack (which I love, BTW), your stack fails as
 > well. And the solution . . . wait for it . . . use the ol Richard
 > Gaskin maneuver and set the TraversalOn of the field to false.
 >
 > Thanks again, Richard!

Glad that worked out.  I've made many authoring environments over the 
years, and have come to rely on being able to turn off traversalOn to 
allow tool palettes to work on text selections.  If that fell victim of 
a regression I'd need to know about it ASAP; very glad to hear it didn't.

If it helps, as much as I like the idea of having a property name 
associated with me like a sort of Poirot mystery, the role of 
traversalOn there is understandable once we take a moment to examine 
what it is and how it works:

The traversalOn property (another woefully-named holdover from another 
time - why not simply "traversal", or better yet "focusable"?) allows 
you to traverse controls via the keyboard.

When I was doing Mac-only work the value of this was lost on me, as Mac 
in general is very mouse-dependent.  But as I've spent more time using 
Windows and Linux and watching other such users in action I've come to 
appreciate that many people rely on being able to choose whether to use 
the mouse or stay on the keyboard when doing anything in a window.*

When buttons have traversalOn set to true, we can tab to them just as 
we'd tab between text fields, using the Enter key to trigger them. 
Powerful stuff, esp. with forms as your hands never need to leave the 
home row to reach for the mouse.

But focus is, quite rightly, limited to one control at a time.  This 
allows us to anticipate which control our keyboard actions will affect.

So when a button becomes focused, any focus on other controls is gone. 
That includes any selection in field text.  Think of focus on a button 
being similar to openField in a field.  And just like a field, whether 
you tab into it or click into it, either way the gesture will move focus 
to that object.

While I do believe it can be very useful to support traversal as widely 
as practical, fortunately palette toolbars are a case where users don't 
expect to be able to tab between buttons.  So there we can safely turn 
off traversalOn, and with that text selections remain preserved even 
when the button is clicked.



Side note:

This reminds me of a request for something we see in other programs, 
perhaps even supported in modern OS APIs, but not (yet) built into LiveCode:

Indication of selected text not currently in focus
http://quality.livecode.com/show_bug.cgi?id=3327

While toolbar buttons are easily doable, there are times when we may 
want to have focus on one field while maintaining a visual 
representation of selected state in another, with a means of addressing 
that secondary selection.

For example, consider an HTML editor in which you select a run of text 
and then enter a URL in a toolbar field as the URL to be inserted as a 
link in that selection.

We can work around this by setting (and later clearing) the 
backgroundColor of the selection, but it's a bit non-obvious to work out 
and might benefit from having some means of optionally preserving 
selection when focus is moved to another field.

The trick there is the syntax.  We definitely don't want "the selection" 
or "selectedChunk" to refer to the previous selection, and something 
like "secondarySelection" and "secondarySelectedChunk" sounds insane.

If any of you have suggestions for ways to implement support for 
preserving secondary selection feel free to add them to that enhancement 
request.




* As useful as it is to deliver fully traversable UIs for our Windows 
custoemrs, unfortunately the current implementation of option controls 
does not allow us to support that at this time - see:
http://quality.livecode.com/show_bug.cgi?id=5505
http://quality.livecode.com/show_bug.cgi?id=2650

And for completeness, related:
http://quality.livecode.com/show_bug.cgi?id=13068

-- 
  Richard Gaskin
  Fourth World Systems
  Software Design and Development for the Desktop, Mobile, and the Web
  ____________________________________________________________________
  Ambassador at FourthWorld.com                http://www.FourthWorld.com




More information about the use-livecode mailing list