Double-click support in UI
Saturday, October 21, 2006
Me and Doug Coleman implemented double click recognition in the UI. While Windows and Cocoa have native APIs to get multiple click counts from events, Windows only reports double clicks, not triple clicks, and X11 doesn’t have this at all. So this is done in a purely cross-platform manner, except the system default double click timeout is used on Windows.
Basically before a button-down
gesture is sent, the global
hand-click#
variable is incremented if necessary. Here is an example
from the editor gadget:
: editor-mouse-down ( editor -- )
hand-click# get {
[ ]
[ dup position-caret ]
[ dup T{ word-elt } select-elt ]
[ dup T{ one-line-elt } select-elt ]
} ?nth call drop ;
The click count is used to index an array of quotations. Nice and neat. Then we add this command to the “caret” command table:
editor "caret" {
{ "Position caret" T{ button-down } [ editor-mouse-down ] }
{ "Previous character" T{ key-down f f "LEFT" } [ T{ char-elt } editor-prev ] }
{ "Next character" T{ key-down f f "RIGHT" } [ T{ char-elt } editor-next ] }
... more commands ...
} define-commands