Exemple #1
0
    // Factory function, may return NULL if entry is invalid.
    static wxTextAutoCompleteFixed* New(wxTextEntry *entry)
    {
        if ( !CanComplete(entry) )
            return NULL;

        return new wxTextAutoCompleteFixed(entry);
    }
Exemple #2
0
void OverlappedCall::OnActivateProcess()
{
	HARDASSERT(::GetCurrentThreadId() == Interpreter::MainThreadId());

	// Probably need 3 states - nothing pending, request pending, completion pending
	if (m_bCompletionRequestPending && CanComplete())
	{
		m_bCompletionRequestPending = false;

		if (m_bCallPrimitiveFailed)
		{
			m_bCallPrimitiveFailed = false;

			ASSERT(m_interpContext.m_stackPointer == Interpreter::m_registers.m_stackPointer);
			ASSERT(m_interpContext.m_basePointer == Interpreter::m_registers.m_basePointer);
			Interpreter::m_registers.m_oopNewMethod = m_interpContext.m_oopNewMethod;
			Interpreter::activateNewMethod(m_interpContext.m_oopNewMethod->m_location);
		}

		// Let the overlapped thread continue
		::SetEvent(m_hEvtGo);

		// And wait for it to finish (non-alertable since we don't want other completions to interfere)
		DWORD dwRet = ::WaitForSingleObject(m_hEvtCompleted, INFINITE);
		if (dwRet != WAIT_OBJECT_0)
			trace(L"%#x: OverlappedCall(%#x) completion wait terminated abnormally with %#x\n", GetCurrentThreadId(), this, dwRet);
	}
}