Alexandre Julliard : imm32: Simplify the helper functions to retrieve the thread data.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Feb 26 09:17:00 CST 2015
Module: wine
Branch: master
Commit: c84fd8586a21e665db18dcaaa46d5c185fddb403
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c84fd8586a21e665db18dcaaa46d5c185fddb403
Author: Alexandre Julliard <julliard at 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)
{
More information about the wine-cvs
mailing list