[PATCH 3/4] user32: Factor ActivateKeyboardLayout previous layout logic.

Rémi Bernon rbernon at codeweavers.com
Wed May 5 04:46:50 CDT 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/user32/driver.c        |  6 +++---
 dlls/user32/input.c         | 13 +++++++------
 dlls/user32/user_private.h  |  2 +-
 dlls/winemac.drv/keyboard.c | 10 +++++-----
 dlls/winex11.drv/keyboard.c | 13 ++++---------
 5 files changed, 20 insertions(+), 24 deletions(-)

diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c
index efaa04db096..daba4bb7c01 100644
--- a/dlls/user32/driver.c
+++ b/dlls/user32/driver.c
@@ -187,9 +187,9 @@ void USER_unload_driver(void)
  * These are fallbacks for entry points that are not implemented in the real driver.
  */
 
-static HKL CDECL nulldrv_ActivateKeyboardLayout( HKL layout, UINT flags )
+static BOOL CDECL nulldrv_ActivateKeyboardLayout( HKL layout, UINT flags )
 {
-    return (HKL)~0; /* use default implementation */
+    return TRUE;
 }
 
 static void CDECL nulldrv_Beep(void)
@@ -487,7 +487,7 @@ static USER_DRIVER null_driver =
  * Each entry point simply loads the real driver and chains to it.
  */
 
-static HKL CDECL loaderdrv_ActivateKeyboardLayout( HKL layout, UINT flags )
+static BOOL CDECL loaderdrv_ActivateKeyboardLayout( HKL layout, UINT flags )
 {
     return load_driver()->pActivateKeyboardLayout( layout, flags );
 }
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index 8e5ab91baf3..8436347b0b0 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -1330,13 +1330,14 @@ HKL WINAPI ActivateKeyboardLayout( HKL layout, UINT flags )
         return 0;
     }
 
-    if ((old_layout = USER_Driver->pActivateKeyboardLayout( layout, flags )) != (HKL)~0)
-    {
-        if (old_layout) info->kbd_layout = layout;
-        return old_layout;
-    }
+    if (!USER_Driver->pActivateKeyboardLayout( layout, flags ))
+        return 0;
 
-    return get_locale_kbd_layout();
+    old_layout = info->kbd_layout;
+    info->kbd_layout = layout;
+
+    if (!old_layout) return get_locale_kbd_layout();
+    return old_layout;
 }
 
 /**********************************************************************
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index 7ac65a34db3..e568054165a 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -62,7 +62,7 @@ enum wine_internal_message
 
 typedef struct tagUSER_DRIVER {
     /* keyboard functions */
-    HKL    (CDECL *pActivateKeyboardLayout)(HKL, UINT);
+    BOOL   (CDECL *pActivateKeyboardLayout)(HKL, UINT);
     void   (CDECL *pBeep)(void);
     INT    (CDECL *pGetKeyNameText)(LONG, LPWSTR, INT);
     HKL    (CDECL *pGetKeyboardLayout)(DWORD);
diff --git a/dlls/winemac.drv/keyboard.c b/dlls/winemac.drv/keyboard.c
index 0648b00a4f1..300bc84d664 100644
--- a/dlls/winemac.drv/keyboard.c
+++ b/dlls/winemac.drv/keyboard.c
@@ -1163,16 +1163,16 @@ void macdrv_process_text_input(UINT vkey, UINT scan, UINT repeat, const BYTE *ke
 /***********************************************************************
  *              ActivateKeyboardLayout (MACDRV.@)
  */
-HKL CDECL macdrv_ActivateKeyboardLayout(HKL hkl, UINT flags)
+BOOL CDECL macdrv_ActivateKeyboardLayout(HKL hkl, UINT flags)
 {
-    HKL oldHkl = 0;
+    BOOL ret = FALSE;
     struct macdrv_thread_data *thread_data = macdrv_init_thread_data();
     struct layout *layout;
 
     TRACE("hkl %p flags %04x\n", hkl, flags);
 
     if (hkl == thread_data->active_keyboard_layout)
-        return hkl;
+        return TRUE;
 
     EnterCriticalSection(&layout_list_section);
     update_layout_list();
@@ -1183,7 +1183,7 @@ HKL CDECL macdrv_ActivateKeyboardLayout(HKL hkl, UINT flags)
         {
             if (macdrv_select_input_source(layout->input_source))
             {
-                oldHkl = thread_data->active_keyboard_layout;
+                ret = TRUE;
                 if (thread_data->keyboard_layout_uchr)
                     CFRelease(thread_data->keyboard_layout_uchr);
 
@@ -1199,7 +1199,7 @@ HKL CDECL macdrv_ActivateKeyboardLayout(HKL hkl, UINT flags)
     }
     LeaveCriticalSection(&layout_list_section);
 
-    return oldHkl;
+    return ret;
 }
 
 
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index d583c8588cd..228dba0f8b2 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -1930,9 +1930,8 @@ BOOL CDECL X11DRV_UnloadKeyboardLayout(HKL hkl)
 /***********************************************************************
  *		ActivateKeyboardLayout (X11DRV.@)
  */
-HKL CDECL X11DRV_ActivateKeyboardLayout(HKL hkl, UINT flags)
+BOOL CDECL X11DRV_ActivateKeyboardLayout(HKL hkl, UINT flags)
 {
-    HKL oldHkl = 0;
     struct x11drv_thread_data *thread_data = x11drv_init_thread_data();
 
     FIXME("%p, %04x: semi-stub!\n", hkl, flags);
@@ -1940,22 +1939,18 @@ HKL CDECL X11DRV_ActivateKeyboardLayout(HKL hkl, UINT flags)
     {
         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
         FIXME("KLF_SETFORPROCESS not supported\n");
-        return 0;
+        return FALSE;
     }
 
     if (!match_x11_keyboard_layout(hkl))
     {
         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
         FIXME("setting keyboard of different locales not supported\n");
-        return 0;
+        return FALSE;
     }
 
-    oldHkl = thread_data->kbd_layout;
-    if (!oldHkl) oldHkl = get_locale_kbd_layout();
-
     thread_data->kbd_layout = hkl;
-
-    return oldHkl;
+    return TRUE;
 }
 
 
-- 
2.31.0




More information about the wine-devel mailing list