Force RichEdit COM calls to UI thread
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7307 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
ddf9e907a3
commit
fc5f7c8ad4
3 changed files with 17 additions and 3 deletions
|
@ -621,6 +621,17 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
||||||
EnableUICommand(IDM_BROWSESCR, !!g_sdata.input_script);
|
EnableUICommand(IDM_BROWSESCR, !!g_sdata.input_script);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case WM_MAKENSIS_FREEZEEDITOR:
|
||||||
|
{
|
||||||
|
ITextDocument*pTD = (ITextDocument*) g_sdata.pLogTextDoc;
|
||||||
|
if (pTD) {
|
||||||
|
if (lParam)
|
||||||
|
return pTD->Freeze(0);
|
||||||
|
else
|
||||||
|
pTD->Unfreeze(0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case WM_TIMER:
|
case WM_TIMER:
|
||||||
{
|
{
|
||||||
HWND hCtl;
|
HWND hCtl;
|
||||||
|
|
|
@ -96,6 +96,7 @@ static inline bool IsWin95() { return SupportsW95() && (GetVersion() & (0x8000FF
|
||||||
#define WM_MAKENSIS_LOADSYMBOLSET (WM_USER+1002)
|
#define WM_MAKENSIS_LOADSYMBOLSET (WM_USER+1002)
|
||||||
#define WM_MAKENSIS_SAVESYMBOLSET (WM_USER+1003)
|
#define WM_MAKENSIS_SAVESYMBOLSET (WM_USER+1003)
|
||||||
#define WM_MAKENSIS_UPDATEUISTATE (WM_USER+1004)
|
#define WM_MAKENSIS_UPDATEUISTATE (WM_USER+1004)
|
||||||
|
#define WM_MAKENSIS_FREEZEEDITOR (WM_USER+1005)
|
||||||
#define TID_CONFIGURECLOSEORABORT 1
|
#define TID_CONFIGURECLOSEORABORT 1
|
||||||
|
|
||||||
namespace MakensisAPI {
|
namespace MakensisAPI {
|
||||||
|
|
|
@ -233,14 +233,16 @@ void ReleaseLogWindow() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
void InitializeLogWindow() {
|
void InitializeLogWindow() {
|
||||||
|
HWND hRE = GetDlgItem(g_sdata.hwnd, IDC_LOGWIN);
|
||||||
#ifdef RE_HAS_TOM
|
#ifdef RE_HAS_TOM
|
||||||
IUnknown *pTD = 0, *pREO;
|
IUnknown *pTD = 0, *pREO;
|
||||||
if (SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_GETOLEINTERFACE, 0, (LPARAM)&pREO) && pREO) {
|
if (SendMessage(hRE, EM_GETOLEINTERFACE, 0, (LPARAM)&pREO) && pREO) {
|
||||||
if (FAILED(pREO->QueryInterface(IID_ITextDocument, (void**) &pTD))) pTD = 0;
|
if (FAILED(pREO->QueryInterface(IID_ITextDocument, (void**) &pTD))) pTD = 0;
|
||||||
pREO->Release();
|
pREO->Release();
|
||||||
}
|
}
|
||||||
g_sdata.pLogTextDoc = pTD;
|
g_sdata.pLogTextDoc = pTD;
|
||||||
#endif
|
#endif
|
||||||
|
SendMessage(hRE, EM_SETTEXTMODE, TM_PLAINTEXT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetLogColor(enum LOGCOLOR lc)
|
void SetLogColor(enum LOGCOLOR lc)
|
||||||
|
@ -268,13 +270,13 @@ void LogMessage(HWND hwnd,const TCHAR *str) {
|
||||||
HWND hLogWin = GetDlgItem(hwnd, IDC_LOGWIN);
|
HWND hLogWin = GetDlgItem(hwnd, IDC_LOGWIN);
|
||||||
#ifdef RE_HAS_TOM
|
#ifdef RE_HAS_TOM
|
||||||
ITextDocument*pTD = (ITextDocument*) g_sdata.pLogTextDoc;
|
ITextDocument*pTD = (ITextDocument*) g_sdata.pLogTextDoc;
|
||||||
if (pTD) pTD->Freeze(0);
|
HRESULT hr = (HRESULT) SendMessage(hwnd, WM_MAKENSIS_FREEZEEDITOR, 0, true); // Force COM calls to UI thread
|
||||||
#endif
|
#endif
|
||||||
SendMessage(hLogWin, EM_SETSEL, g_sdata.logLength, g_sdata.logLength);
|
SendMessage(hLogWin, EM_SETSEL, g_sdata.logLength, g_sdata.logLength);
|
||||||
SendMessage(hLogWin, EM_REPLACESEL, 0, (LPARAM)str);
|
SendMessage(hLogWin, EM_REPLACESEL, 0, (LPARAM)str);
|
||||||
SendMessage(hLogWin, EM_SCROLLCARET, 0, 0);
|
SendMessage(hLogWin, EM_SCROLLCARET, 0, 0);
|
||||||
#ifdef RE_HAS_TOM
|
#ifdef RE_HAS_TOM
|
||||||
if (pTD) pTD->Unfreeze(0), InvalidateRect(hLogWin, NULL, false);
|
if (SUCCEEDED(hr)) SendMessage(hwnd, WM_MAKENSIS_FREEZEEDITOR, 0, false);
|
||||||
#endif
|
#endif
|
||||||
g_sdata.logLength += lstrlen(str);
|
g_sdata.logLength += lstrlen(str);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue