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:
parent
3419a6b0cd
commit
af6439a12f
4 changed files with 35 additions and 65 deletions
|
@ -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)) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue