Store log window handle in a global

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7333 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2021-09-20 17:21:35 +00:00
parent 10a9bc3d86
commit 64db53c042
4 changed files with 32 additions and 33 deletions

View file

@ -211,7 +211,7 @@ DWORD CALLBACK SaveFileStreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb
static void ToolBarSizeChanged(HWND hDlg) static void ToolBarSizeChanged(HWND hDlg)
{ {
RECT r; RECT r;
HWND hEd = GetDlgItem(hDlg, IDC_LOGWIN); HWND hEd = g_sdata.logwnd;
GetWindowRect(g_toolbar.hwnd, &r); GetWindowRect(g_toolbar.hwnd, &r);
LONG tbh = RectH(r); LONG tbh = RectH(r);
GetWindowRect(hEd, &r); GetWindowRect(hEd, &r);
@ -257,17 +257,18 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
switch (msg) { switch (msg) {
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
g_sdata.hwnd=hwndDlg; g_sdata.hwnd=hwndDlg, g_sdata.logwnd = GetDlgItem(hwndDlg, IDC_LOGWIN);
HICON hIcon = LoadIcon(g_sdata.hInstance,MAKEINTRESOURCE(IDI_ICON)); HICON hIcon = LoadIcon(g_sdata.hInstance,MAKEINTRESOURCE(IDI_ICON));
SetClassLongPtr(hwndDlg,GCLP_HICON,(LONG_PTR)hIcon); SetClassLongPtr(hwndDlg,GCLP_HICON,(LONG_PTR)hIcon);
// Altered by Darren Owen (DrO) on 29/9/2003 // Altered by Darren Owen (DrO) on 29/9/2003
// Added in receiving of mouse and key events from the richedit control // Added in receiving of mouse and key events from the richedit control
SendDlgItemMessage(hwndDlg,IDC_LOGWIN,EM_SETEVENTMASK,(WPARAM)NULL,ENM_SELCHANGE|ENM_MOUSEEVENTS|ENM_KEYEVENTS); SendMessage(g_sdata.logwnd,EM_SETEVENTMASK,(WPARAM)NULL,ENM_SELCHANGE|ENM_MOUSEEVENTS|ENM_KEYEVENTS);
InitializeLogWindow(); InitializeLogWindow();
g_sdata.menu = GetMenu(g_sdata.hwnd); g_sdata.menu = GetMenu(g_sdata.hwnd);
g_sdata.fileSubmenu = FindSubMenu(g_sdata.menu, IDM_FILE); g_sdata.fileSubmenu = FindSubMenu(g_sdata.menu, IDM_FILE);
g_sdata.editSubmenu = FindSubMenu(g_sdata.menu, IDM_EDIT); g_sdata.editSubmenu = FindSubMenu(g_sdata.menu, IDM_EDIT);
g_sdata.toolsSubmenu = FindSubMenu(g_sdata.menu, IDM_TOOLS); g_sdata.toolsSubmenu = FindSubMenu(g_sdata.menu, IDM_TOOLS);
SetMenuDefaultItem(FindSubMenu(g_sdata.menu, IDM_SCRIPT), IDM_RECOMPILE_TEST, MF_BYCOMMAND);
RestoreMRUList(); RestoreMRUList();
CreateToolBar(); CreateToolBar();
InitTooltips(g_sdata.hwnd); InitTooltips(g_sdata.hwnd);
@ -287,7 +288,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
if (suppwin4 && !FontExists(fontname)) fontname = sizeof(TCHAR) > 1 ? (LPCTSTR) msgothlocalutf : (LPCTSTR) msgothlocal932; if (suppwin4 && !FontExists(fontname)) fontname = sizeof(TCHAR) > 1 ? (LPCTSTR) msgothlocalutf : (LPCTSTR) msgothlocal932;
} }
HFONT hFont = CreateFontPt(hwndDlg,fontsize,FW_NORMAL,FIXED_PITCH|FF_DONTCARE,fontcharset,fontname); HFONT hFont = CreateFontPt(hwndDlg,fontsize,FW_NORMAL,FIXED_PITCH|FF_DONTCARE,fontcharset,fontname);
SendDlgItemMessage(hwndDlg,IDC_LOGWIN,WM_SETFONT,(WPARAM)hFont,0); SendMessage(g_sdata.logwnd,WM_SETFONT,(WPARAM)hFont,0);
g_sdata.compressor = COMPRESSOR_NONE_SELECTED; g_sdata.compressor = COMPRESSOR_NONE_SELECTED;
SetScript(_T("")); SetScript(_T(""));
RestoreCompressor(); RestoreCompressor();
@ -530,7 +531,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
case WM_NOTIFY: case WM_NOTIFY:
switch (((NMHDR*)lParam)->code ) { switch (((NMHDR*)lParam)->code ) {
case EN_SELCHANGE: case EN_SELCHANGE:
EnableMenuItem(g_sdata.menu, IDM_COPYSELECTED, RicheditHasSelection(GetDlgItem(hwndDlg, IDC_LOGWIN)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(g_sdata.menu, IDM_COPYSELECTED, RicheditHasSelection(g_sdata.logwnd) ? MF_ENABLED : MF_GRAYED);
break; break;
// Altered by Darren Owen (DrO) on 6/10/2003 // Altered by Darren Owen (DrO) on 6/10/2003
@ -543,7 +544,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
if(WM_RBUTTONUP == lpnmMsg->msg || (WM_KEYUP == lpnmMsg->msg && lpnmMsg->wParam == VK_APPS)) if(WM_RBUTTONUP == lpnmMsg->msg || (WM_KEYUP == lpnmMsg->msg && lpnmMsg->wParam == VK_APPS))
{ {
POINT pt; POINT pt;
HWND edit = GetDlgItem(g_sdata.hwnd,IDC_LOGWIN); HWND edit = g_sdata.logwnd;
RECT r; RECT r;
GetCursorPos(&pt); GetCursorPos(&pt);
@ -616,7 +617,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
break; break;
case WM_MAKENSIS_UPDATEUISTATE: case WM_MAKENSIS_UPDATEUISTATE:
{ {
UINT i, emptylog = SendDlgItemMessage(hwndDlg, IDC_LOGWIN, WM_GETTEXTLENGTH, 0, 0) == 0; UINT i, emptylog = SendMessage(g_sdata.logwnd, WM_GETTEXTLENGTH, 0, 0) == 0;
static const PACKEDCMDID_T nonemptylogids [] = { PACKCMDID(IDM_COPY), PACKCMDID(IDM_COPYALL), PACKCMDID(IDM_CLEARLOG), PACKCMDID(IDM_SELECTALL) }; static const PACKEDCMDID_T nonemptylogids [] = { PACKCMDID(IDM_COPY), PACKCMDID(IDM_COPYALL), PACKCMDID(IDM_CLEARLOG), PACKCMDID(IDM_SELECTALL) };
for (i = 0; i < COUNTOF(nonemptylogids); ++i) EnableUICommand(UNPACKCMDID(nonemptylogids[i]), !emptylog); for (i = 0; i < COUNTOF(nonemptylogids); ++i) EnableUICommand(UNPACKCMDID(nonemptylogids[i]), !emptylog);
EnableUICommand(IDM_BROWSESCR, !!g_sdata.input_script); EnableUICommand(IDM_BROWSESCR, !!g_sdata.input_script);
@ -660,7 +661,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
case IDM_ABOUT: return ShowAboutDialog(hwndDlg)|TRUE; case IDM_ABOUT: return ShowAboutDialog(hwndDlg)|TRUE;
case IDM_SELECTALL: case IDM_SELECTALL:
{ {
SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_SETSEL, 0, -1); SendMessage(g_sdata.logwnd, EM_SETSEL, 0, -1);
return TRUE; return TRUE;
} }
case IDM_LOADSCRIPT: case IDM_LOADSCRIPT:
@ -703,20 +704,17 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
case IDM_CLEARLOG: case IDM_CLEARLOG:
{ {
if (!g_sdata.thread) { if (!g_sdata.thread) {
ClearLog(g_sdata.hwnd); ClearLog();
} }
return TRUE; return TRUE;
} }
case IDM_ZOOM_INC: g_sdata.log_zoom += 25; goto set_log_zoom; case IDM_ZOOM_INC: g_sdata.log_zoom += 25; goto set_log_zoom;
case IDM_ZOOM_DEC: g_sdata.log_zoom -= 25; goto set_log_zoom; case IDM_ZOOM_DEC: g_sdata.log_zoom -= 25; goto set_log_zoom;
case IDM_ZOOM_RST: case IDM_ZOOM_RST:
{
g_sdata.log_zoom = 100; set_log_zoom: g_sdata.log_zoom = 100; set_log_zoom:
HWND hLog = GetDlgItem(hwndDlg, IDC_LOGWIN); SendMessage(g_sdata.logwnd, EM_SETZOOM, g_sdata.log_zoom = STD_MAX((int)g_sdata.log_zoom, 25), 100);
SendMessage(hLog, EM_SETZOOM, g_sdata.log_zoom = STD_MAX((int)g_sdata.log_zoom, 25), 100); InvalidateRect(g_sdata.logwnd, 0, false);
InvalidateRect(hLog, 0, false);
break; break;
}
case IDM_RECOMPILE: case IDM_RECOMPILE:
{ {
CompileNSISScript(); CompileNSISScript();
@ -784,13 +782,13 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
return TRUE; return TRUE;
} }
case IDM_COPY: case IDM_COPY:
if (RicheditHasSelection(GetDlgItem(hwndDlg, IDC_LOGWIN))) goto logwndcopysel; if (RicheditHasSelection(g_sdata.logwnd)) goto logwndcopysel;
// fall through // fall through
case IDM_COPYALL: case IDM_COPYALL:
CopyToClipboard(g_sdata.hwnd); CopyToClipboard(g_sdata.hwnd);
return TRUE; return TRUE;
case IDM_COPYSELECTED: logwndcopysel: case IDM_COPYSELECTED: logwndcopysel:
SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, WM_COPY, 0, 0); SendMessage(g_sdata.logwnd, WM_COPY, 0, 0);
return TRUE; return TRUE;
case IDM_SAVE: case IDM_SAVE:
{ {
@ -811,7 +809,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
WPARAM opts = sizeof(TCHAR) > 1 ? (SF_TEXT|SF_UNICODE) : (SF_TEXT); WPARAM opts = sizeof(TCHAR) > 1 ? (SF_TEXT|SF_UNICODE) : (SF_TEXT);
DWORD_PTR cookie[2] = { (DWORD_PTR)hFile, FALSE }; DWORD_PTR cookie[2] = { (DWORD_PTR)hFile, FALSE };
EDITSTREAM es = { (DWORD_PTR)&cookie, 0, SaveFileStreamCallback }; EDITSTREAM es = { (DWORD_PTR)&cookie, 0, SaveFileStreamCallback };
SendMessage(GetDlgItem(g_sdata.hwnd, IDC_LOGWIN), EM_STREAMOUT, opts, (LPARAM)&es); SendMessage(g_sdata.logwnd, EM_STREAMOUT, opts, (LPARAM)&es);
CloseHandle(hFile); CloseHandle(hFile);
} }
} }
@ -852,13 +850,13 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
if (lpfr->Flags & FR_MATCHCASE) flags |= FR_MATCHCASE; if (lpfr->Flags & FR_MATCHCASE) flags |= FR_MATCHCASE;
if (lpfr->Flags & FR_WHOLEWORD) flags |= FR_WHOLEWORD; if (lpfr->Flags & FR_WHOLEWORD) flags |= FR_WHOLEWORD;
FINDTEXTEX ft; FINDTEXTEX ft;
SendDlgItemMessage(hwndDlg, IDC_LOGWIN, EM_EXGETSEL, 0, (LPARAM)&ft.chrg); SendMessage(g_sdata.logwnd, EM_EXGETSEL, 0, (LPARAM)&ft.chrg);
ft.chrg.cpMin = (ft.chrg.cpMax == ft.chrg.cpMin) ? 0 : ft.chrg.cpMax; ft.chrg.cpMin = (ft.chrg.cpMax == ft.chrg.cpMin) ? 0 : ft.chrg.cpMax;
ft.chrg.cpMax = (LONG) SendDlgItemMessage(hwndDlg, IDC_LOGWIN, WM_GETTEXTLENGTH, 0, 0); ft.chrg.cpMax = (LONG) SendMessage(g_sdata.logwnd, WM_GETTEXTLENGTH, 0, 0);
ft.lpstrText = lpfr->lpstrFindWhat; ft.lpstrText = lpfr->lpstrFindWhat;
ft.chrg.cpMin = (LONG) SendDlgItemMessage(hwndDlg, IDC_LOGWIN, EM_FINDTEXTEX, flags, (LPARAM)&ft); ft.chrg.cpMin = (LONG) SendMessage(g_sdata.logwnd, EM_FINDTEXTEX, flags, (LPARAM)&ft);
if (ft.chrg.cpMin != -1) if (ft.chrg.cpMin != -1)
SendDlgItemMessage(hwndDlg, IDC_LOGWIN, EM_SETSEL, ft.chrgText.cpMin, ft.chrgText.cpMax); SendMessage(g_sdata.logwnd, EM_SETSEL, ft.chrgText.cpMin, ft.chrgText.cpMax);
else else
MessageBeep(MB_ICONASTERISK); MessageBeep(MB_ICONASTERISK);
} }

View file

@ -235,6 +235,7 @@ typedef struct NSISScriptData {
DWORD warnings; DWORD warnings;
HINSTANCE hInstance; HINSTANCE hInstance;
HWND hwnd; HWND hwnd;
HWND logwnd;
HMENU menu; HMENU menu;
HMENU fileSubmenu; HMENU fileSubmenu;
HMENU editSubmenu; HMENU editSubmenu;

View file

@ -203,14 +203,14 @@ void PlayAppSoundAsync(LPCSTR SoundName, int MBFallback) {
void CopyToClipboard(HWND hwnd) { void CopyToClipboard(HWND hwnd) {
if (!hwnd || !OpenClipboard(hwnd)) return; if (!hwnd || !OpenClipboard(hwnd)) return;
LRESULT len = SendDlgItemMessage(hwnd, IDC_LOGWIN, WM_GETTEXTLENGTH, 0, 0); LRESULT len = SendMessage(g_sdata.logwnd, WM_GETTEXTLENGTH, 0, 0);
HGLOBAL mem = GlobalAlloc(GMEM_MOVEABLE, (++len)*sizeof(TCHAR)); HGLOBAL mem = GlobalAlloc(GMEM_MOVEABLE, (++len)*sizeof(TCHAR));
if (!mem) { CloseClipboard(); return; } if (!mem) { CloseClipboard(); return; }
TCHAR *txt = (TCHAR *)GlobalLock(mem); TCHAR *txt = (TCHAR *)GlobalLock(mem);
if (!txt) { CloseClipboard(); return; } if (!txt) { CloseClipboard(); return; }
EmptyClipboard(); EmptyClipboard();
txt[0] = 0; txt[0] = 0;
SendDlgItemMessage(hwnd, IDC_LOGWIN, WM_GETTEXT, (WPARAM)(len), (LPARAM)txt); SendMessage(g_sdata.logwnd, WM_GETTEXT, (WPARAM)(len), (LPARAM)txt);
GlobalUnlock(mem); GlobalUnlock(mem);
#ifdef _UNICODE #ifdef _UNICODE
SetClipboardData(CF_UNICODETEXT, mem); SetClipboardData(CF_UNICODETEXT, mem);
@ -233,7 +233,7 @@ void ReleaseLogWindow() {
#endif #endif
} }
void InitializeLogWindow() { void InitializeLogWindow() {
HWND hRE = GetDlgItem(g_sdata.hwnd, IDC_LOGWIN); HWND hRE = g_sdata.logwnd;
#ifdef RE_HAS_TOM #ifdef RE_HAS_TOM
IUnknown *pTD = 0, *pREO; IUnknown *pTD = 0, *pREO;
if (SendMessage(hRE, EM_GETOLEINTERFACE, 0, (LPARAM)&pREO) && pREO) { if (SendMessage(hRE, EM_GETOLEINTERFACE, 0, (LPARAM)&pREO) && pREO) {
@ -263,7 +263,7 @@ HRESULT RicheditFreeze(void*pITextDocument, SIZE_T Freeze)
void SetLogColor(enum LOGCOLOR lc) void SetLogColor(enum LOGCOLOR lc)
{ {
enum { em_seteditstyle = (WM_USER + 204), ses_extendbackcolor = 4 }; enum { em_seteditstyle = (WM_USER + 204), ses_extendbackcolor = 4 };
HWND hEd = GetDlgItem(g_sdata.hwnd, IDC_LOGWIN); HWND hEd = g_sdata.logwnd;
bool sysclr = lc >= LC_SYSCOLOR || !ReadRegSettingDW(REGCOLORIZE, true); bool sysclr = lc >= LC_SYSCOLOR || !ReadRegSettingDW(REGCOLORIZE, true);
static const COLORREF clrs[] = { RGB(0, 50, 0), RGB(210, 255, 210), RGB(50, 30, 0), RGB(255, 220, 190), RGB(50, 0, 0), RGB(255, 210, 210) }; static const COLORREF clrs[] = { RGB(0, 50, 0), RGB(210, 255, 210), RGB(50, 30, 0), RGB(255, 220, 190), RGB(50, 0, 0), RGB(255, 210, 210) };
CHARFORMAT cf; CHARFORMAT cf;
@ -275,14 +275,14 @@ void SetLogColor(enum LOGCOLOR lc)
SendMessage(hEd, EM_SETBKGNDCOLOR, sysclr, sysclr ? sysclr /*Irrelevant*/ : clrs[(lc * 2) + 1]); SendMessage(hEd, EM_SETBKGNDCOLOR, sysclr, sysclr ? sysclr /*Irrelevant*/ : clrs[(lc * 2) + 1]);
} }
void ClearLog(HWND hwnd) { void ClearLog() {
SetDlgItemText(hwnd, IDC_LOGWIN, _T("")); SetWindowText(g_sdata.logwnd, _T(""));
SetLogColor(LC_SYSCOLOR); SetLogColor(LC_SYSCOLOR);
SendMessage(g_sdata.hwnd, WM_MAKENSIS_UPDATEUISTATE, 0, 0); SendMessage(g_sdata.hwnd, WM_MAKENSIS_UPDATEUISTATE, 0, 0);
} }
void LogMessage(HWND hwnd,const TCHAR *str) { void LogMessage(HWND hwnd,const TCHAR *str) {
HWND hLogWin = GetDlgItem(hwnd, IDC_LOGWIN); HWND hLogWin = g_sdata.logwnd;
#ifdef RE_HAS_TOM #ifdef RE_HAS_TOM
HRESULT hr = (HRESULT) SendMessage(hwnd, WM_MAKENSIS_FREEZEEDITOR, 0, true); // Force COM calls to UI thread HRESULT hr = (HRESULT) SendMessage(hwnd, WM_MAKENSIS_FREEZEEDITOR, 0, true); // Force COM calls to UI thread
#endif #endif
@ -376,7 +376,7 @@ void EnableDisableItems(int on)
HWND hFocus = g_sdata.focused_hwnd, hOptimal = hTestBtn; HWND hFocus = g_sdata.focused_hwnd, hOptimal = hTestBtn;
if (on && hCloseBtn == hFocus) hFocus = hOptimal; if (on && hCloseBtn == hFocus) hFocus = hOptimal;
if (!IsWindowEnabled(hFocus)) hFocus = GetDlgItem(hwndDlg, IDC_LOGWIN); if (!IsWindowEnabled(hFocus)) hFocus = g_sdata.logwnd;
SetDialogFocus(hwndDlg, hOptimal); SetDialogFocus(hwndDlg, hOptimal);
SetDialogFocus(hwndDlg, hFocus); SetDialogFocus(hwndDlg, hFocus);
SetTimer(hwndDlg, TID_CONFIGURECLOSEORABORT, 1000, 0); SetTimer(hwndDlg, TID_CONFIGURECLOSEORABORT, 1000, 0);
@ -388,10 +388,10 @@ void SetCompressorStats()
TCHAR buf[1024]; TCHAR buf[1024];
bool found = false; bool found = false;
line_count = SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_GETLINECOUNT, 0, 0); line_count = SendMessage(g_sdata.logwnd, EM_GETLINECOUNT, 0, 0);
for(i=0; i<line_count; i++) { for(i=0; i<line_count; i++) {
*((LPWORD)buf) = COUNTOF(buf); *((LPWORD)buf) = COUNTOF(buf);
LRESULT cchLine = SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_GETLINE, (WPARAM)i, (LPARAM)buf); LRESULT cchLine = SendMessage(g_sdata.logwnd, EM_GETLINE, (WPARAM)i, (LPARAM)buf);
buf[cchLine] = _T('\0'); buf[cchLine] = _T('\0');
if(found) { if(found) {
DWORD len = lstrlen(TOTAL_SIZE_COMPRESSOR_STAT); DWORD len = lstrlen(TOTAL_SIZE_COMPRESSOR_STAT);
@ -424,7 +424,7 @@ static void SetUIState_NoScript()
void CompileNSISScript() { void CompileNSISScript() {
DragAcceptFiles(g_sdata.hwnd,FALSE); DragAcceptFiles(g_sdata.hwnd,FALSE);
ClearLog(g_sdata.hwnd); ClearLog();
SetTitle(g_sdata.hwnd,NULL); SetTitle(g_sdata.hwnd,NULL);
PostMessage(g_sdata.hwnd, WM_MAKENSIS_UPDATEUISTATE, 0, 0); PostMessage(g_sdata.hwnd, WM_MAKENSIS_UPDATEUISTATE, 0, 0);
if (!g_sdata.script[0]) { if (!g_sdata.script[0]) {

View file

@ -75,7 +75,7 @@ void InitializeLogWindow();
void ReleaseLogWindow(); void ReleaseLogWindow();
enum LOGCOLOR { LC_SUCCESS, LC_WARNING, LC_ERROR, LC_SYSCOLOR }; enum LOGCOLOR { LC_SUCCESS, LC_WARNING, LC_ERROR, LC_SYSCOLOR };
void SetLogColor(enum LOGCOLOR lc); void SetLogColor(enum LOGCOLOR lc);
void ClearLog(HWND hwnd); void ClearLog();
void LogMessage(HWND hwnd,const TCHAR *str); void LogMessage(HWND hwnd,const TCHAR *str);
void ErrorMessage(HWND hwnd,const TCHAR *str); void ErrorMessage(HWND hwnd,const TCHAR *str);
void CenterOnParent(HWND hwnd); void CenterOnParent(HWND hwnd);