6821291: assertion failure in awt_Frame.h

Reviewed-by: dcherepanov, art
This commit is contained in:
Anton Tarasov 2009-06-23 15:53:32 +04:00
parent 0cadb2e023
commit 4fc4bb20ae
2 changed files with 21 additions and 11 deletions

View File

@ -381,19 +381,28 @@ LRESULT CALLBACK AwtFrame::ProxyWindowProc(HWND hwnd, UINT message,
void AwtFrame::CreateProxyFocusOwner()
{
if (AwtToolkit::IsMainThread()) {
AwtFrame::_CreateProxyFocusOwner((void *)this);
} else {
AwtToolkit::GetInstance().InvokeFunction(AwtFrame::_CreateProxyFocusOwner, (void *)this);
}
}
void AwtFrame::_CreateProxyFocusOwner(void *param)
{
DASSERT(AwtToolkit::IsMainThread());
DASSERT(m_proxyFocusOwner == NULL);
DASSERT(AwtToolkit::MainThread() == ::GetCurrentThreadId());
m_proxyFocusOwner = ::CreateWindow(TEXT("STATIC"),
TEXT("ProxyFocusOwner"),
WS_CHILD,
0, 0, 0, 0, GetHWnd(), NULL,
AwtToolkit::GetInstance().
GetModuleHandle(),
NULL);
m_proxyDefWindowProc = ComCtl32Util::GetInstance().SubclassHWND(m_proxyFocusOwner, ProxyWindowProc);
AwtFrame *f = (AwtFrame *)param;
f->m_proxyFocusOwner = ::CreateWindow(TEXT("STATIC"),
TEXT("ProxyFocusOwner"),
WS_CHILD,
0, 0, 0, 0, f->GetHWnd(), NULL,
AwtToolkit::GetInstance().
GetModuleHandle(),
NULL);
f->m_proxyDefWindowProc = ComCtl32Util::GetInstance().SubclassHWND(f->m_proxyFocusOwner, ProxyWindowProc);
}
void AwtFrame::DestroyProxyFocusOwner()

View File

@ -117,7 +117,6 @@ public:
INLINE BOOL IsUndecorated() { return m_isUndecorated; }
INLINE HWND GetProxyFocusOwner() {
DASSERT(AwtToolkit::MainThread() == ::GetCurrentThreadId());
if (m_proxyFocusOwner == NULL) {
CreateProxyFocusOwner();
}
@ -165,6 +164,8 @@ private:
void CreateProxyFocusOwner();
void DestroyProxyFocusOwner();
/* creates proxy focus owner, called on Toolkit thread */
static void _CreateProxyFocusOwner(void *param);
/* destroys proxy focus owner, called on Toolkit thread */
static void _DestroyProxyFocusOwner(void *param);