diff --git a/Contrib/Makensisw/makensisw.cpp b/Contrib/Makensisw/makensisw.cpp index be4d33d9..d64d7c71 100644 --- a/Contrib/Makensisw/makensisw.cpp +++ b/Contrib/Makensisw/makensisw.cpp @@ -108,6 +108,28 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { DragAcceptFiles(g_sdata.hwnd,FALSE); g_sdata.menu = GetMenu(g_sdata.hwnd); g_sdata.submenu = GetSubMenu(g_sdata.menu,1); + { + OSVERSIONINFO osvi; + my_memset(&osvi, 0, sizeof(osvi)); + osvi.dwOSVersionInfoSize = sizeof(osvi); + GetVersionEx(&osvi); + if(osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { + // This is a hack because Win9x & WinNT/2000/XP behave differently for WM_MENUSELECT + MENUITEMINFO mii; + my_memset(&mii, 0, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_ID; + + GetMenuItemInfo(g_sdata.menu, FILE_MENU_INDEX, TRUE, &mii); + g_sdata.fileMenuId = mii.wID; + GetMenuItemInfo(g_sdata.menu, TOOLS_MENU_INDEX, TRUE, &mii); + g_sdata.toolsMenuId = mii.wID; + } + else { + g_sdata.fileMenuId = FILE_MENU_INDEX; + g_sdata.toolsMenuId = TOOLS_MENU_INDEX; + } + } CreateToolBar(); InitTooltips(g_sdata.hwnd); #ifdef COMPRESSOR_OPTION @@ -276,11 +298,12 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HMENU hMenu = (HMENU)lParam; UINT id = (UINT)LOWORD(wParam); UINT flags = (UINT)HIWORD(wParam); + if(hMenu == g_sdata.menu && (flags & MF_POPUP) == MF_POPUP) { - if(id == 0) { // File menu + if(id == g_sdata.fileMenuId) { // File menu BuildMRUMenu(GetSubMenu(hMenu, id)); } - else if (id == 2) { // Tools menu + else if (id == g_sdata.toolsMenuId) { // Tools menu SetClearMRUListMenuitemState(GetSubMenu(hMenu, id)); } } diff --git a/Contrib/Makensisw/makensisw.h b/Contrib/Makensisw/makensisw.h index c1947779..ba8be21f 100644 --- a/Contrib/Makensisw/makensisw.h +++ b/Contrib/Makensisw/makensisw.h @@ -52,6 +52,8 @@ #define TIMEOUT 100 #define MINWIDTH 350 #define MINHEIGHT 180 +#define FILE_MENU_INDEX 0 +#define TOOLS_MENU_INDEX 2 #define WM_MAKENSIS_PROCESSCOMPLETE (WM_USER+1001) @@ -104,6 +106,8 @@ typedef struct NSISScriptData { HINSTANCE hInstance; HWND hwnd; HMENU menu; + UINT fileMenuId; + UINT toolsMenuId; HMENU submenu; HANDLE thread; HWND focused_hwnd; diff --git a/Contrib/Makensisw/utils.cpp b/Contrib/Makensisw/utils.cpp index bc614525..d3481c93 100644 --- a/Contrib/Makensisw/utils.cpp +++ b/Contrib/Makensisw/utils.cpp @@ -472,11 +472,14 @@ void BuildMRUMenu(HMENU hMenu) MENUITEMINFO mii; char buf[MRU_DISPLAY_LENGTH+1]; char buf2[MRU_DISPLAY_LENGTH - 6]; + int n; for(i = 0; i < MRU_LIST_SIZE; i++) { DeleteMenu(hMenu, IDM_MRU_FILE+i, MF_BYCOMMAND); } + n = GetMenuItemCount(hMenu); + for(i = 0; i < MRU_LIST_SIZE; i++) { if(g_mru_list[i][0]) { my_memset(buf,0,sizeof(buf)); @@ -516,7 +519,8 @@ void BuildMRUMenu(HMENU hMenu) mii.dwTypeData = buf; mii.cch = lstrlen(buf)+1; mii.fState = MFS_ENABLED; - InsertMenuItem(hMenu, IDM_MRU_FILE+i, FALSE, &mii); + InsertMenuItem(hMenu, n++, TRUE, &mii); + } else { break;