Attachment "tkWinMenu.c.diff" to
ticket [1734230fff]
added by
flatworm
2007-06-10 05:34:05.
Also attachment "tkWinMenu.c.diff" to
ticket [1734223fff]
added by
flatworm
2007-06-10 05:09:21.
--- tkWinMenu.c,orig Sun Jun 10 01:27:25 2007
+++ tkWinMenu.c Sun Jun 10 01:22:53 2007
@@ -1042,15 +1042,25 @@
case WM_MENUCHAR: {
- unsigned char menuChar = (unsigned char) LOWORD(*pwParam);
hashEntryPtr = Tcl_FindHashEntry(&tsdPtr->winMenuTable,
(char *) *plParam);
if (hashEntryPtr != NULL) {
int i, len, underline;
Tcl_Obj *labelPtr;
+ TCHAR menuChar;
+ Tcl_DString dStr;
+ const char *pUtfMenuChar, *pUnderlinedChar;
- *plResult = 0;
menuPtr = (TkMenu *) Tcl_GetHashValue(hashEntryPtr);
+
+ if (menuPtr->numEntries > 0) {
+ menuChar = (TCHAR) LOWORD(*pwParam);
+ Tcl_DStringInit(&dStr);
+ pUtfMenuChar = Tcl_WinTCharToUtf(&menuChar,
+ sizeof(TCHAR), &dStr);
+ }
+
+ *plResult = 0;
for (i = 0; i < menuPtr->numEntries; i++) {
underline = menuPtr->entries[i]->underline;
labelPtr = menuPtr->entries[i]->labelPtr;
@@ -1058,11 +1068,11 @@
/* do the unicode call just to prevent overruns */
Tcl_GetUnicodeFromObj(labelPtr, &len);
if (underline < len) {
- char *label;
+ const char *label;
label = Tcl_GetStringFromObj(labelPtr, NULL);
- if (CharUpper((LPTSTR) menuChar)
- == CharUpper((LPTSTR)
- *Tcl_UtfAtIndex(label, underline))) {
+ pUnderlinedChar = Tcl_UtfAtIndex(label, underline);
+ if (Tcl_UtfNcasecmp(pUtfMenuChar,
+ pUnderlinedChar, 1) == 0) {
*plResult = (2 << 16) | i;
returnResult = 1;
break;
@@ -1070,6 +1080,10 @@
}
}
}
+
+ if (menuPtr->numEntries > 0) {
+ Tcl_DStringFree(&dStr);
+ }
}
break;
}