Aric Stewart : winex11: Have all xim interaction pass through the new x11drv IME interface.
Alexandre Julliard
julliard at winehq.org
Mon Apr 7 14:46:52 CDT 2008
Module: wine
Branch: master
Commit: 26b8aa43a0a996b28805175bdb2ad47b14b8dae7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=26b8aa43a0a996b28805175bdb2ad47b14b8dae7
Author: Aric Stewart <aric at codeweavers.com>
Date: Mon Apr 7 08:35:42 2008 -0500
winex11: Have all xim interaction pass through the new x11drv IME interface.
---
dlls/winex11.drv/xim.c | 104 ++++++------------------------------------------
1 files changed, 12 insertions(+), 92 deletions(-)
diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c
index 44aefa8..4505ecd 100644
--- a/dlls/winex11.drv/xim.c
+++ b/dlls/winex11.drv/xim.c
@@ -35,23 +35,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(x11drv);
-/* this must match with imm32/imm.c */
-#define FROM_IME 0xcafe1337
-
BOOL ximInComposeMode=FALSE;
-typedef struct tagInputContextData
-{
- BOOL bInternalState;
- BOOL bRead;
- BOOL bInComposition;
- HFONT textfont;
-
- DWORD dwLock;
- INPUTCONTEXT IMC;
-} InputContextData;
-
-static HIMC root_context;
static XIMStyle ximStyle = 0;
static XIMStyle ximStyleRoot = 0;
@@ -63,17 +48,6 @@ static LPBYTE ResultString = NULL;
static DWORD dwResultStringSize = 0;
static DWORD dwPreeditPos = 0;
-static HMODULE hImmDll = NULL;
-static HIMC (WINAPI *pImmAssociateContext)(HWND,HIMC);
-static HIMC (WINAPI *pImmCreateContext)(void);
-static VOID (WINAPI *pImmSetOpenStatus)(HIMC,BOOL);
-static BOOL (WINAPI *pImmSetCompositionString)(HIMC, DWORD, LPWSTR,
- DWORD, LPWSTR, DWORD);
-static LONG (WINAPI *pImmGetCompositionString)(HIMC, DWORD, LPVOID, DWORD);
-static VOID (WINAPI *pImmNotifyIME)(HIMC, DWORD, DWORD, DWORD);
-
-/* WINE specific messages from the xim in x11drv level */
-
#define STYLE_OFFTHESPOT (XIMPreeditArea | XIMStatusArea)
#define STYLE_OVERTHESPOT (XIMPreeditPosition | XIMStatusNothing)
#define STYLE_ROOT (XIMPreeditNothing | XIMStatusNothing)
@@ -82,41 +56,6 @@ static VOID (WINAPI *pImmNotifyIME)(HIMC, DWORD, DWORD, DWORD);
/* inorder to enable deadkey support */
#define STYLE_NONE (XIMPreeditNothing | XIMStatusNothing)
-/*
- * here are the functions that sort of marshall calls into IMM32.DLL
- */
-static void LoadImmDll(void)
-{
- hImmDll = LoadLibraryA("imm32.dll");
-
- pImmAssociateContext = (void *)GetProcAddress(hImmDll, "ImmAssociateContext");
- if (!pImmAssociateContext)
- WARN("IMM: pImmAssociateContext not found in DLL\n");
-
- pImmCreateContext = (void *)GetProcAddress(hImmDll, "ImmCreateContext");
- if (!pImmCreateContext)
- WARN("IMM: pImmCreateContext not found in DLL\n");
-
- pImmSetOpenStatus = (void *)GetProcAddress( hImmDll, "ImmSetOpenStatus");
- if (!pImmSetOpenStatus)
- WARN("IMM: pImmSetOpenStatus not found in DLL\n");
-
- pImmSetCompositionString =(void *)GetProcAddress(hImmDll, "ImmSetCompositionStringW");
-
- if (!pImmSetCompositionString)
- WARN("IMM: pImmSetCompositionStringW not found in DLL\n");
-
- pImmGetCompositionString =(void *)GetProcAddress(hImmDll, "ImmGetCompositionStringW");
-
- if (!pImmGetCompositionString)
- WARN("IMM: pImmGetCompositionStringW not found in DLL\n");
-
- pImmNotifyIME = (void *)GetProcAddress( hImmDll, "ImmNotifyIME");
-
- if (!pImmNotifyIME)
- WARN("IMM: pImmNotifyIME not found in DLL\n");
-}
-
static BOOL X11DRV_ImmSetInternalString(DWORD dwIndex, DWORD dwOffset,
DWORD selLength, LPWSTR lpComp, DWORD dwCompLen)
{
@@ -211,10 +150,8 @@ static BOOL X11DRV_ImmSetInternalString(DWORD dwIndex, DWORD dwOffset,
}
}
- if (pImmSetCompositionString)
- rc = pImmSetCompositionString((HIMC)FROM_IME, SCS_SETSTR,
- (LPWSTR)CompositionString, dwCompStringLength,
- NULL, 0);
+ rc = IME_SetCompositionString(SCS_SETSTR, (LPWSTR)CompositionString,
+ dwCompStringLength, NULL, 0);
}
else if ((dwIndex == GCS_RESULTSTR) && (lpComp) && (dwCompLen))
{
@@ -224,13 +161,10 @@ static BOOL X11DRV_ImmSetInternalString(DWORD dwIndex, DWORD dwOffset,
ResultString= HeapAlloc(GetProcessHeap(),0,byte_length);
memcpy(ResultString,lpComp,byte_length);
- if (pImmSetCompositionString)
- rc = pImmSetCompositionString((HIMC)FROM_IME, SCS_SETSTR,
- (LPWSTR)ResultString, dwResultStringSize,
- NULL, 0);
+ rc = IME_SetCompositionString(SCS_SETSTR, (LPWSTR)ResultString,
+ dwResultStringSize, NULL, 0);
- if (pImmNotifyIME)
- pImmNotifyIME((HIMC)FROM_IME, NI_COMPOSITIONSTR, CPS_COMPLETE, 0);
+ IME_NotifyIME( NI_COMPOSITIONSTR, CPS_COMPLETE, 0);
}
return rc;
@@ -244,8 +178,8 @@ void X11DRV_XIMLookupChars( const char *str, DWORD count )
dwOutput = MultiByteToWideChar(CP_UNIXCP, 0, str, count, wcOutput, sizeof(wcOutput)/sizeof(WCHAR));
- if (pImmAssociateContext && (focus = GetFocus()))
- pImmAssociateContext(focus,root_context);
+ if ((focus = GetFocus()))
+ IME_UpdateAssociation(focus);
X11DRV_ImmSetInternalString(GCS_RESULTSTR,0,0,wcOutput,dwOutput);
}
@@ -268,8 +202,7 @@ static void X11DRV_ImmSetOpenStatus(BOOL fOpen)
ResultString = NULL;
}
- if (pImmSetOpenStatus)
- pImmSetOpenStatus((HIMC)FROM_IME,fOpen);
+ IME_SetOpenStatus(fOpen);
}
static int XIMPreEditStartCallback(XIC ic, XPointer client_data, XPointer call_data)
@@ -277,8 +210,7 @@ static int XIMPreEditStartCallback(XIC ic, XPointer client_data, XPointer call_d
TRACE("PreEditStartCallback %p\n",ic);
X11DRV_ImmSetOpenStatus(TRUE);
ximInComposeMode = TRUE;
- SendMessageW(((InputContextData*)root_context)->IMC.hWnd,
- EM_GETSEL, 0, (LPARAM)&dwPreeditPos);
+ IME_SendMessageToSelectedHWND(EM_GETSEL, 0, (LPARAM)&dwPreeditPos);
return -1;
}
@@ -344,7 +276,7 @@ static void XIMPreEditCaretCallback(XIC ic, XPointer client_data,
if (P_C)
{
- int pos = pImmGetCompositionString(root_context, GCS_CURSORPOS, NULL, 0);
+ int pos = IME_GetCursorPos();
TRACE("pos: %d\n", pos);
switch(P_C->direction)
{
@@ -373,8 +305,8 @@ static void XIMPreEditCaretCallback(XIC ic, XPointer client_data,
FIXME("Not implemented\n");
break;
}
- SendMessageW(((InputContextData*)root_context)->IMC.hWnd,
- EM_SETSEL, dwPreeditPos + pos, dwPreeditPos + pos);
+ IME_SendMessageToSelectedHWND( EM_SETSEL, dwPreeditPos + pos,
+ dwPreeditPos + pos);
P_C->position = pos;
}
TRACE("Finished\n");
@@ -503,18 +435,6 @@ XIM X11DRV_SetupXIM(Display *display, const char *input_style)
IME_XIMPresent(TRUE);
IME_UpdateAssociation(NULL);
- if(!hImmDll)
- {
- LoadImmDll();
-
- if (pImmCreateContext)
- {
- root_context = pImmCreateContext();
- if (pImmAssociateContext)
- pImmAssociateContext(0,root_context);
- }
- }
-
return xim;
err:
More information about the wine-cvs
mailing list