Fixed MRU for Windows 9x

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2820 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
icemank 2003-08-23 04:34:31 +00:00
parent 3419a6b0cd
commit af6439a12f
4 changed files with 35 additions and 65 deletions

View file

@ -41,7 +41,6 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char *cmdParam, int cmd
g_sdata.script_alloced=false; g_sdata.script_alloced=false;
g_sdata.defines = NULL; g_sdata.defines = NULL;
RestoreDefines(); RestoreDefines();
RestoreMRUList();
g_sdata.script=GetCommandLine(); g_sdata.script=GetCommandLine();
if (*g_sdata.script=='"') { g_sdata.script++; while (*g_sdata.script && *g_sdata.script++!='"' ); } if (*g_sdata.script=='"') { g_sdata.script++; while (*g_sdata.script && *g_sdata.script++!='"' ); }
else while (*g_sdata.script!=' ' && *g_sdata.script) g_sdata.script++; else while (*g_sdata.script!=' ' && *g_sdata.script) g_sdata.script++;
@ -107,29 +106,10 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
SendMessage(GetDlgItem(hwndDlg,IDC_LOGWIN),EM_SETEVENTMASK,NULL,ENM_SELCHANGE); SendMessage(GetDlgItem(hwndDlg,IDC_LOGWIN),EM_SETEVENTMASK,NULL,ENM_SELCHANGE);
DragAcceptFiles(g_sdata.hwnd,FALSE); DragAcceptFiles(g_sdata.hwnd,FALSE);
g_sdata.menu = GetMenu(g_sdata.hwnd); g_sdata.menu = GetMenu(g_sdata.hwnd);
g_sdata.submenu = GetSubMenu(g_sdata.menu,1); g_sdata.fileSubmenu = GetSubMenu(g_sdata.menu, FILE_MENU_INDEX);
{ g_sdata.editSubmenu = GetSubMenu(g_sdata.menu, EDIT_MENU_INDEX);
OSVERSIONINFO osvi; g_sdata.toolsSubmenu = GetSubMenu(g_sdata.menu, TOOLS_MENU_INDEX);
my_memset(&osvi, 0, sizeof(osvi)); RestoreMRUList();
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(); CreateToolBar();
InitTooltips(g_sdata.hwnd); InitTooltips(g_sdata.hwnd);
#ifdef COMPRESSOR_OPTION #ifdef COMPRESSOR_OPTION
@ -174,8 +154,10 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
} }
case WM_CONTEXTMENU: case WM_CONTEXTMENU:
{ {
// This does not work on Windows versions < Windows 2000
// See http://support.microsoft.com:80/support/kb/articles/Q245/7/54.asp
if ((HWND)wParam==GetDlgItem(g_sdata.hwnd,IDC_LOGWIN)) { if ((HWND)wParam==GetDlgItem(g_sdata.hwnd,IDC_LOGWIN)) {
TrackPopupMenu(g_sdata.submenu,NULL,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),0,g_sdata.hwnd,0); TrackPopupMenu(g_sdata.editSubmenu,NULL,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),0,g_sdata.hwnd,0);
} }
return TRUE; return TRUE;
} }
@ -293,22 +275,6 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
} }
return TRUE; return TRUE;
} }
case WM_MENUSELECT:
{
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 == g_sdata.fileMenuId) { // File menu
BuildMRUMenu(GetSubMenu(hMenu, id));
}
else if (id == g_sdata.toolsMenuId) { // Tools menu
SetClearMRUListMenuitemState(GetSubMenu(hMenu, id));
}
}
return TRUE;
}
case WM_COMMAND: case WM_COMMAND:
{ {
switch (LOWORD(wParam)) { switch (LOWORD(wParam)) {

View file

@ -53,7 +53,8 @@
#define MINWIDTH 350 #define MINWIDTH 350
#define MINHEIGHT 180 #define MINHEIGHT 180
#define FILE_MENU_INDEX 0 #define FILE_MENU_INDEX 0
#define TOOLS_MENU_INDEX 2 #define EDIT_MENU_INDEX 1
#define TOOLS_MENU_INDEX 2
#define WM_MAKENSIS_PROCESSCOMPLETE (WM_USER+1001) #define WM_MAKENSIS_PROCESSCOMPLETE (WM_USER+1001)
@ -106,9 +107,9 @@ typedef struct NSISScriptData {
HINSTANCE hInstance; HINSTANCE hInstance;
HWND hwnd; HWND hwnd;
HMENU menu; HMENU menu;
UINT fileMenuId; HMENU fileSubmenu;
UINT toolsMenuId; HMENU editSubmenu;
HMENU submenu; HMENU toolsSubmenu;
HANDLE thread; HANDLE thread;
HWND focused_hwnd; HWND focused_hwnd;
CHARRANGE textrange; CHARRANGE textrange;

View file

@ -464,10 +464,12 @@ void PushMRUFile(char* fname)
lstrcpy(g_mru_list[i+1], g_mru_list[i]); lstrcpy(g_mru_list[i+1], g_mru_list[i]);
} }
lstrcpy(g_mru_list[0],full_file_name); lstrcpy(g_mru_list[0],full_file_name);
BuildMRUMenus();
} }
void BuildMRUMenu(HMENU hMenu) void BuildMRUMenus()
{ {
HMENU hMenu = g_sdata.fileSubmenu;
int i; int i;
MENUITEMINFO mii; MENUITEMINFO mii;
char buf[MRU_DISPLAY_LENGTH+1]; char buf[MRU_DISPLAY_LENGTH+1];
@ -526,6 +528,20 @@ void BuildMRUMenu(HMENU hMenu)
break; break;
} }
} }
hMenu = g_sdata.toolsSubmenu;
my_memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STATE;
if(g_mru_list[0][0]) {
mii.fState = MFS_ENABLED;
}
else {
mii.fState = MFS_GRAYED;
}
SetMenuItemInfo(hMenu, IDM_CLEAR_MRU_LIST,FALSE,&mii);
} }
void LoadMRUFile(int position) void LoadMRUFile(int position)
@ -543,6 +559,7 @@ void LoadMRUFile(int position)
} }
else { else {
PopMRUFile(g_mru_list[position]); PopMRUFile(g_mru_list[position]);
BuildMRUMenus();
} }
ResetObjects(); ResetObjects();
CompileNSISScript(); CompileNSISScript();
@ -574,6 +591,8 @@ void RestoreMRUList()
for(i = n; i < MRU_LIST_SIZE; i++) { for(i = n; i < MRU_LIST_SIZE; i++) {
g_mru_list[i][0] = '\0'; g_mru_list[i][0] = '\0';
} }
BuildMRUMenus();
} }
void SaveMRUList() void SaveMRUList()
@ -600,21 +619,6 @@ void ClearMRUList()
for(i=0; i<MRU_LIST_SIZE; i++) { for(i=0; i<MRU_LIST_SIZE; i++) {
g_mru_list[i][0] = '\0'; g_mru_list[i][0] = '\0';
} }
BuildMRUMenus();
} }
void SetClearMRUListMenuitemState(HMENU hMenu)
{
MENUITEMINFO mii;
my_memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STATE;
if(g_mru_list[0][0]) {
mii.fState = MFS_ENABLED;
}
else {
mii.fState = MFS_GRAYED;
}
SetMenuItemInfo(hMenu, IDM_CLEAR_MRU_LIST,FALSE,&mii);
}

View file

@ -46,8 +46,7 @@ void ShowDocs();
BOOL PopMRUFile(char* fname); BOOL PopMRUFile(char* fname);
void PushMRUFile(char* fname); void PushMRUFile(char* fname);
void BuildMRUMenu(HMENU hMenu); void BuildMRUMenus();
void LoadMRUFile(int position); void LoadMRUFile(int position);
void ClearMRUList(); void ClearMRUList();
void SetClearMRUListMenuitemState(HMENU hMenu);
#endif #endif