diff --git a/src/odoors/ODGetIn.c b/src/odoors/ODGetIn.c index 70db99fd71b21ca5e389e655555d1dde9d3cee76..10be7f40f083e9b90a352b7957cf0d8d69b61d0c 100644 --- a/src/odoors/ODGetIn.c +++ b/src/odoors/ODGetIn.c @@ -443,26 +443,30 @@ static int ODHaveStartOfSequence(WORD wFlags) static int ODGetCodeIfLongest(WORD wFlags) { int CurrLen=0; - int seqlen; + int seqlen1; + int seqlen2; int i; int retval=NO_MATCH;; if(wFlags & GETIN_RAW) return(NO_MATCH); + seqlen1=strlen(szCurrentSequence); for(i = 0; i < DIM(aKeySequences); ++i) { if((wFlags & GETIN_RAWCTRL) && aKeySequences[i].bIsControlKey) { continue; } - seqlen=strlen(aKeySequences[i].pszSequence); - if(seqlen>CurrLen) { - if(CurrLen==0) { - if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen)==0) { + seqlen2=strlen(aKeySequences[i].pszSequence); + if(seqlen2>CurrLen) { + if(seqlen2<=seqlen1) { /* The sequence would be completed in buffer */ + if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen2)==0) { retval=i; CurrLen=seqlen; } } - else { - return(NO_MATCH); + else { /* Possible partial sequence */ + if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen1)==0) { + return(NO_MATCH); + } } } }