Module: wine Branch: master Commit: c84fd8586a21e665db18dcaaa46d5c185fddb403 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c84fd8586a21e665db18dcaaa4...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Feb 26 22:59:51 2015 +0900
imm32: Simplify the helper functions to retrieve the thread data.
---
dlls/imm32/imm.c | 50 ++++++++++++++++---------------------------------- 1 file changed, 16 insertions(+), 34 deletions(-)
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index 07ab598..1fc553d 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -225,43 +225,29 @@ static DWORD convert_candidatelist_AtoW( return ret; }
-static IMMThreadData* IMM_GetThreadData(DWORD id) +static IMMThreadData *IMM_GetThreadData(HWND hwnd) { IMMThreadData *data; + DWORD process, thread;
- if (!id) id = GetCurrentThreadId(); + if (hwnd) + { + if (!(thread = GetWindowThreadProcessId(hwnd, &process))) return NULL; + if (process != GetCurrentProcessId()) return NULL; + } + else thread = GetCurrentThreadId();
EnterCriticalSection(&threaddata_cs); LIST_FOR_EACH_ENTRY(data, &ImmThreadDataList, IMMThreadData, entry) - { - if (data->threadID == id) - return data; - } + if (data->threadID == thread) return data;
- data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, - sizeof(IMMThreadData)); - data->threadID = id; + data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*data)); + data->threadID = thread; list_add_head(&ImmThreadDataList,&data->entry); - TRACE("Thread Data Created (%x)\n",id); - + TRACE("Thread Data Created (%x)\n",thread); return data; }
-static IMMThreadData* IMM_GetThreadDataForWindow(HWND hwnd) -{ - DWORD process; - DWORD thread = 0; - - if (hwnd) - { - thread = GetWindowThreadProcessId(hwnd, &process); - if (process != GetCurrentProcessId()) - return NULL; - } - - return IMM_GetThreadData(thread); -} - static BOOL IMM_IsDefaultContext(HIMC imc) { InputContextData *data = get_imc_data(imc); @@ -497,7 +483,7 @@ static InputContextData* get_imc_data(HIMC hIMC) static HIMC get_default_context( HWND hwnd ) { HIMC ret; - IMMThreadData* thread_data = IMM_GetThreadDataForWindow( hwnd ); + IMMThreadData* thread_data = IMM_GetThreadData( hwnd );
if (!thread_data) return 0;
@@ -1625,7 +1611,7 @@ BOOL WINAPI ImmGetConversionStatus( HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd) { HWND ret, new = NULL; - IMMThreadData* thread_data = IMM_GetThreadDataForWindow(hWnd); + IMMThreadData* thread_data = IMM_GetThreadData(hWnd); if (!thread_data) return NULL; if (thread_data->hwndDefault == NULL && thread_data->threadID == GetCurrentThreadId()) @@ -1634,12 +1620,8 @@ HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd) LeaveCriticalSection(&threaddata_cs); new = CreateWindowExW( WS_EX_TOOLWINDOW, szwIME, NULL, WS_POPUP, 0, 0, 1, 1, 0, 0, 0, 0); - thread_data = IMM_GetThreadDataForWindow(hWnd); - if (!thread_data) - { - DestroyWindow(new); - return NULL; - } + /* thread_data is in the current thread so we can assume it's still valid */ + EnterCriticalSection(&threaddata_cs); /* See if anyone beat us */ if (thread_data->hwndDefault == NULL) {