Attempt to prevent a selection change from currupting the log
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7297 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
d4306769b9
commit
7fce1681df
9 changed files with 53 additions and 5 deletions
|
@ -215,6 +215,10 @@ Version History
|
|||
- Added Lookup tool
|
||||
- Use Consolas font if it exists
|
||||
|
||||
2.4.1
|
||||
- Prevent user from modifying the log
|
||||
|
||||
|
||||
Copyright Information
|
||||
---------------------
|
||||
Copyright (c) 2002 Robert Rainwater
|
||||
|
|
|
@ -60,7 +60,7 @@ BuildUtil(
|
|||
res = res,
|
||||
resources = resources,
|
||||
entry = None,
|
||||
defines = ['RELEASE=2.4'],
|
||||
defines = ['RELEASE=2.4.1'],
|
||||
docs = docs,
|
||||
root_util = True
|
||||
)
|
||||
|
|
|
@ -64,11 +64,13 @@ template<class T> static ULARGE_INTEGER PathParseIconLocationEx(T*Path)
|
|||
return (li.HighPart = (UINT) comma, li.LowPart = idx, li);
|
||||
}
|
||||
|
||||
#ifndef _WIN64
|
||||
static int WINAPI PathParseIconLocationFallback(LPSTR Path)
|
||||
{
|
||||
ULARGE_INTEGER li = PathParseIconLocationEx(Path);
|
||||
return li.LowPart;
|
||||
}
|
||||
#endif
|
||||
|
||||
static HRESULT GetSpecialFolderPath(HWND hWnd, LPTSTR Buf, UINT csidl)
|
||||
{
|
||||
|
|
|
@ -72,6 +72,8 @@ int WINAPI _tWinMain(HINSTANCE hInst,HINSTANCE hOldInst,LPTSTR CmdLineParams,int
|
|||
RegisterClass(&wc); // Superclass the old link window class if SysLink is not available
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (succ) {} // Unreferenced variable
|
||||
#endif
|
||||
|
||||
memset(&g_sdata,0,sizeof(NSCRIPTDATA));
|
||||
|
@ -265,6 +267,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
|||
// Altered by Darren Owen (DrO) on 29/9/2003
|
||||
// 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);
|
||||
InitializeLogWindow();
|
||||
g_sdata.menu = GetMenu(g_sdata.hwnd);
|
||||
g_sdata.fileSubmenu = FindSubMenu(g_sdata.menu, IDM_FILE);
|
||||
g_sdata.editSubmenu = FindSubMenu(g_sdata.menu, IDM_EDIT);
|
||||
|
@ -333,6 +336,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
|||
SaveSymbols();
|
||||
SaveMRUList();
|
||||
SaveWindowPos(g_sdata.hwnd);
|
||||
ReleaseLogWindow();
|
||||
ImageList_Destroy(g_toolbar.imagelist);
|
||||
ImageList_Destroy(g_toolbar.imagelistd);
|
||||
ImageList_Destroy(g_toolbar.imagelisth);
|
||||
|
|
|
@ -237,6 +237,7 @@ typedef struct NSISScriptData {
|
|||
HANDLE sigint_event;
|
||||
HANDLE sigint_event_legacy;
|
||||
HWND focused_hwnd;
|
||||
void*pLogTextDoc;
|
||||
NCOMPRESSOR default_compressor;
|
||||
NCOMPRESSOR compressor;
|
||||
LPCTSTR compressor_name;
|
||||
|
|
|
@ -197,6 +197,9 @@ void EnableToolBarButton(int cmdid, BOOL enabled)
|
|||
|
||||
static bool IsRTL(HWND hWnd) { return (((UINT) GetWindowLongPtr(hWnd, GWL_EXSTYLE)) & (WS_EX_LAYOUTRTL)) != 0; } // WS_EX_RIGHT? WS_EX_RTLREADING?
|
||||
|
||||
#ifndef TPM_LAYOUTRTL
|
||||
#define TPM_LAYOUTRTL 0x8000 // For MinGW (w32api-4.0.3-1)
|
||||
#endif
|
||||
static UINT GetToolbarDropdownMenuPos(HWND hTB, UINT Id, POINT&pt)
|
||||
{
|
||||
RECT r;
|
||||
|
|
|
@ -206,6 +206,29 @@ void CopyToClipboard(HWND hwnd) {
|
|||
CloseClipboard();
|
||||
}
|
||||
|
||||
#include <shlobj.h>
|
||||
#if defined(MSFTEDIT_CLASS)
|
||||
#include <tom.h>
|
||||
#define RE_HAS_TOM
|
||||
#define IID_ITextDocument NSIS_IID_ITextDocument
|
||||
static const GUID IID_ITextDocument = { 0x8cc497c0, 0xa1df, 0x11ce, { 0x80,0x98,0x0,0xaa,0x0,0x47,0xbe,0x5d } };
|
||||
#endif
|
||||
void ReleaseLogWindow() {
|
||||
#ifdef RE_HAS_TOM
|
||||
if (g_sdata.pLogTextDoc) ((IUnknown*)g_sdata.pLogTextDoc)->Release();
|
||||
#endif
|
||||
}
|
||||
void InitializeLogWindow() {
|
||||
#ifdef RE_HAS_TOM
|
||||
IUnknown *pTD = 0, *pREO;
|
||||
if (SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_GETOLEINTERFACE, 0, (LPARAM)&pREO) && pREO) {
|
||||
if (FAILED(pREO->QueryInterface(IID_ITextDocument, (void**) &pTD))) pTD = 0;
|
||||
pREO->Release();
|
||||
}
|
||||
g_sdata.pLogTextDoc = pTD;
|
||||
#endif
|
||||
}
|
||||
|
||||
void SetLogColor(enum LOGCOLOR lc)
|
||||
{
|
||||
enum { em_seteditstyle = (WM_USER + 204), ses_extendbackcolor = 4 };
|
||||
|
@ -228,10 +251,18 @@ void ClearLog(HWND hwnd) {
|
|||
}
|
||||
|
||||
void LogMessage(HWND hwnd,const TCHAR *str) {
|
||||
SendDlgItemMessage(hwnd, IDC_LOGWIN, EM_SETSEL, g_sdata.logLength, g_sdata.logLength);
|
||||
HWND hLogWin = GetDlgItem(hwnd, IDC_LOGWIN);
|
||||
#ifdef RE_HAS_TOM
|
||||
ITextDocument*pTD = (ITextDocument*) g_sdata.pLogTextDoc;
|
||||
if (pTD) pTD->Freeze(0);
|
||||
#endif
|
||||
SendMessage(hLogWin, EM_SETSEL, g_sdata.logLength, g_sdata.logLength);
|
||||
SendMessage(hLogWin, EM_REPLACESEL, 0, (LPARAM)str);
|
||||
SendMessage(hLogWin, EM_SCROLLCARET, 0, 0);
|
||||
#ifdef RE_HAS_TOM
|
||||
if (pTD) pTD->Unfreeze(0), InvalidateRect(hLogWin, NULL, false);
|
||||
#endif
|
||||
g_sdata.logLength += lstrlen(str);
|
||||
SendDlgItemMessage(hwnd, IDC_LOGWIN, EM_REPLACESEL, 0, (LPARAM)str);
|
||||
SendDlgItemMessage(hwnd, IDC_LOGWIN, EM_SCROLLCARET, 0, 0);
|
||||
}
|
||||
|
||||
void ErrorMessage(HWND hwnd,const TCHAR *str) {
|
||||
|
|
|
@ -65,6 +65,8 @@ int SetArgv(const TCHAR *cmdLine, TCHAR ***argv);
|
|||
void SetTitle(HWND hwnd,const TCHAR *substr);
|
||||
void PlayAppSoundAsync(LPCSTR SoundName, int MBFallback = -1);
|
||||
void CopyToClipboard(HWND hwnd);
|
||||
void InitializeLogWindow();
|
||||
void ReleaseLogWindow();
|
||||
enum LOGCOLOR { LC_SUCCESS, LC_WARNING, LC_ERROR, LC_SYSCOLOR };
|
||||
void SetLogColor(enum LOGCOLOR lc);
|
||||
void ClearLog(HWND hwnd);
|
||||
|
@ -138,7 +140,7 @@ bool FileExists(const TCHAR *fname);
|
|||
bool OpenUrlInDefaultBrowser(HWND hwnd, LPCSTR Url);
|
||||
|
||||
HMENU FindSubMenu(HMENU hMenu, UINT uId);
|
||||
static UINT GetMenuDropAlignment() { return GetSystemMetrics(SM_MENUDROPALIGNMENT) ? TPM_RIGHTALIGN : TPM_LEFTALIGN; }
|
||||
static inline UINT GetMenuDropAlignment() { return GetSystemMetrics(SM_MENUDROPALIGNMENT) ? TPM_RIGHTALIGN : TPM_LEFTALIGN; }
|
||||
|
||||
typedef enum { CFF_RAWSIZE = 0x00, CFF_DPIPT = 0x01, CFF_DPIFROMHWND = 0x02 } CREATEFONTFLAGS;
|
||||
HFONT CreateFontHelper(INT_PTR Data, int Height, DWORD p1, LPCTSTR Face);
|
||||
|
|
|
@ -57,6 +57,7 @@ libs = Split("""
|
|||
iconv
|
||||
shlwapi
|
||||
oleaut32
|
||||
version
|
||||
shell32
|
||||
""")
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue