Subject: Fixed bug [1192095] - Toplevel menus return incorrect active index (cherrypicked [6efe4d5396])

From: fvogel <[email-masked]>
Date: Sun, 27 Mar 2016 09:59:45 +0000

---
 win/tkWinMenu.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/win/tkWinMenu.c b/win/tkWinMenu.c
index 8eede75..8e14669 100644
--- a/win/tkWinMenu.c
+++ b/win/tkWinMenu.c
@@ -1288,7 +1288,17 @@ TkWinHandleMenuEvent(
 	    if (menuPtr != NULL) {
 		long entryIndex = LOWORD(*pwParam);
 
-		mePtr = NULL;
+                if ((menuPtr->menuType == MENUBAR) && menuPtr->tearoff) {
+                    /*
+                     * Windows passes the entry index starting at 0 for
+                     * the first menu entry. However this entry #0 is the
+                     * tearoff entry for Tk (the menu has -tearoff 1),
+                     * which is ignored for MENUBAR menues on Windows.
+                     */
+
+                    entryIndex++;
+                }
+                mePtr = NULL;
 		if (flags != 0xFFFF) {
 		    if ((flags&MF_POPUP) && (entryIndex<menuPtr->numEntries)) {
 			mePtr = menuPtr->entries[entryIndex];
-- 
cgit v0.12