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);
|
||||
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:
|
||||
{
|
||||
HWND hCtl;
|
||||
|
|
|
@ -96,6 +96,7 @@ static inline bool IsWin95() { return SupportsW95() && (GetVersion() & (0x8000FF
|
|||
#define WM_MAKENSIS_LOADSYMBOLSET (WM_USER+1002)
|
||||
#define WM_MAKENSIS_SAVESYMBOLSET (WM_USER+1003)
|
||||
#define WM_MAKENSIS_UPDATEUISTATE (WM_USER+1004)
|
||||
#define WM_MAKENSIS_FREEZEEDITOR (WM_USER+1005)
|
||||
#define TID_CONFIGURECLOSEORABORT 1
|
||||
|
||||
namespace MakensisAPI {
|
||||
|
|
|
@ -233,14 +233,16 @@ void ReleaseLogWindow() {
|
|||
#endif
|
||||
}
|
||||
void InitializeLogWindow() {
|
||||
HWND hRE = GetDlgItem(g_sdata.hwnd, IDC_LOGWIN);
|
||||
#ifdef RE_HAS_TOM
|
||||
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;
|
||||
pREO->Release();
|
||||
}
|
||||
g_sdata.pLogTextDoc = pTD;
|
||||
#endif
|
||||
SendMessage(hRE, EM_SETTEXTMODE, TM_PLAINTEXT, 0);
|
||||
}
|
||||
|
||||
void SetLogColor(enum LOGCOLOR lc)
|
||||
|
@ -268,13 +270,13 @@ void LogMessage(HWND hwnd,const TCHAR *str) {
|
|||
HWND hLogWin = GetDlgItem(hwnd, IDC_LOGWIN);
|
||||
#ifdef RE_HAS_TOM
|
||||
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
|
||||
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);
|
||||
if (SUCCEEDED(hr)) SendMessage(hwnd, WM_MAKENSIS_FREEZEEDITOR, 0, false);
|
||||
#endif
|
||||
g_sdata.logLength += lstrlen(str);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue