diff options
author | Joe Mistachkin <joe@mistachkin.com> | 2015-02-06 18:08:50 (GMT) |
---|---|---|
committer | Joe Mistachkin <joe@mistachkin.com> | 2015-02-06 18:08:50 (GMT) |
commit | c6ace3a8856bf7aeb2bb3e28f9c7dc3a5adb75f8 (patch) | |
tree | 0f6800a48b1ad841d2083ea448298b878c37afda /generic | |
parent | ac6ca29aa9b6b57899534f9e3e64fce6c2f30d2c (diff) | |
parent | 086cddd2032a96617232625572f5ade0197f3c5a (diff) | |
download | tk-c6ace3a8856bf7aeb2bb3e28f9c7dc3a5adb75f8.zip tk-c6ace3a8856bf7aeb2bb3e28f9c7dc3a5adb75f8.tar.gz tk-c6ace3a8856bf7aeb2bb3e28f9c7dc3a5adb75f8.tar.bz2 |
Add support for an 'M' binding substitution that is replaced with the number of script-based binding patterns matched so far for the event.
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkBind.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/generic/tkBind.c b/generic/tkBind.c index 8d20fa9..d7c8c04 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -660,7 +660,8 @@ static int DeleteVirtualEvent(Tcl_Interp *interp, char *eventString); static void DeleteVirtualEventTable(VirtualEventTable *vetPtr); static void ExpandPercents(TkWindow *winPtr, const char *before, - XEvent *eventPtr,KeySym keySym,Tcl_DString *dsPtr); + XEvent *eventPtr,KeySym keySym, + unsigned int scriptCount, Tcl_DString *dsPtr); static void FreeTclBinding(ClientData clientData); static PatSeq * FindSequence(Tcl_Interp *interp, Tcl_HashTable *patternTablePtr, ClientData object, @@ -1415,6 +1416,7 @@ Tk_BindEvent( PatSeq *vMatchDetailList, *vMatchNoDetailList; int flags, oldScreen, i, deferModal; unsigned int matchCount, matchSpace; + unsigned int scriptCount; Tcl_Interp *interp; Tcl_DString scripts, savedResult; Detail detail; @@ -1571,6 +1573,7 @@ Tk_BindEvent( pendingPtr = &staticPending; matchCount = 0; + scriptCount = 0; matchSpace = sizeof(staticPending.matchArray) / sizeof(PatSeq *); Tcl_DStringInit(&scripts); @@ -1628,7 +1631,7 @@ Tk_BindEvent( } if (sourcePtr->eventProc == EvalTclBinding) { ExpandPercents(winPtr, (char *) sourcePtr->clientData, - eventPtr, detail.keySym, &scripts); + eventPtr, detail.keySym, scriptCount++, &scripts); } else { if (matchCount >= matchSpace) { PendingBinding *newPtr; @@ -2259,6 +2262,8 @@ ExpandPercents( * in % replacements. */ KeySym keySym, /* KeySym: only relevant for KeyPress and * KeyRelease events). */ + unsigned int scriptCount, /* The number of script-based binding patterns + * matched so far for this event. */ Tcl_DString *dsPtr) /* Dynamic string in which to append new * command. */ { @@ -2540,6 +2545,9 @@ ExpandPercents( } } goto doString; + case 'M': + number = scriptCount; + goto doNumber; case 'N': if ((flags & KEY) && (eventPtr->type != MouseWheelEvent)) { number = (int) keySym; |