Aric Stewart : imm32: Implement ImmRegisterWord using loaded IME.

Alexandre Julliard julliard at winehq.org
Wed Apr 9 14:31:32 CDT 2008


Module: wine
Branch: master
Commit: 25cb21de442e0c7c3b42db99191106a6792275e7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=25cb21de442e0c7c3b42db99191106a6792275e7

Author: Aric Stewart <aric at codeweavers.com>
Date:   Wed Apr  9 09:42:15 2008 -0500

imm32: Implement ImmRegisterWord using loaded IME.

---

 dlls/imm32/imm.c |   54 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 831f3d2..4ffb481 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -1486,11 +1486,28 @@ BOOL WINAPI ImmNotifyIME(
 BOOL WINAPI ImmRegisterWordA(
   HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszRegister)
 {
-  FIXME("(%p, %s, %d, %s): stub\n",
-    hKL, debugstr_a(lpszReading), dwStyle, debugstr_a(lpszRegister)
-  );
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return FALSE;
+    ImmHkl *immHkl = IMM_GetImmHkl(hKL);
+    TRACE("(%p, %s, %d, %s):\n", hKL, debugstr_a(lpszReading), dwStyle,
+                    debugstr_a(lpszRegister));
+    if (immHkl->hIME && immHkl->pImeRegisterWord)
+    {
+        if (!is_kbd_ime_unicode(immHkl))
+            return immHkl->pImeRegisterWord((LPCWSTR)lpszReading,dwStyle,
+                                            (LPCWSTR)lpszRegister);
+        else
+        {
+            LPWSTR lpszwReading = strdupAtoW(lpszReading);
+            LPWSTR lpszwRegister = strdupAtoW(lpszRegister);
+            BOOL rc;
+
+            rc = immHkl->pImeRegisterWord(lpszwReading,dwStyle,lpszwRegister);
+            HeapFree(GetProcessHeap(),0,lpszwReading);
+            HeapFree(GetProcessHeap(),0,lpszwRegister);
+            return rc;
+        }
+    }
+    else
+        return FALSE;
 }
 
 /***********************************************************************
@@ -1499,11 +1516,28 @@ BOOL WINAPI ImmRegisterWordA(
 BOOL WINAPI ImmRegisterWordW(
   HKL hKL, LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszRegister)
 {
-  FIXME("(%p, %s, %d, %s): stub\n",
-    hKL, debugstr_w(lpszReading), dwStyle, debugstr_w(lpszRegister)
-  );
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return FALSE;
+    ImmHkl *immHkl = IMM_GetImmHkl(hKL);
+    TRACE("(%p, %s, %d, %s):\n", hKL, debugstr_w(lpszReading), dwStyle,
+                    debugstr_w(lpszRegister));
+    if (immHkl->hIME && immHkl->pImeRegisterWord)
+    {
+        if (is_kbd_ime_unicode(immHkl))
+            return immHkl->pImeRegisterWord(lpszReading,dwStyle,lpszRegister);
+        else
+        {
+            LPSTR lpszaReading = strdupWtoA(lpszReading);
+            LPSTR lpszaRegister = strdupWtoA(lpszRegister);
+            BOOL rc;
+
+            rc = immHkl->pImeRegisterWord((LPCWSTR)lpszaReading,dwStyle,
+                                          (LPCWSTR)lpszaRegister);
+            HeapFree(GetProcessHeap(),0,lpszaReading);
+            HeapFree(GetProcessHeap(),0,lpszaRegister);
+            return rc;
+        }
+    }
+    else
+        return FALSE;
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list