From d0611405e99cd25f4434d839cc79bec9ef7f4680 Mon Sep 17 00:00:00 2001 From: hendricks266 <hendricks266@1a8010ca-5511-0410-912e-c29ae57300e0> Date: Mon, 26 Dec 2016 06:02:45 +0000 Subject: [PATCH] Windows: Refactor keyboard layout switching code into winbits.c and clean it up. No functional changes. git-svn-id: https://svn.eduke32.com/eduke32@5970 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/build/include/winbits.h | 3 ++ polymer/eduke32/build/src/sdlayer.c | 43 ++----------------------- polymer/eduke32/build/src/winbits.c | 43 +++++++++++++++++++++++++ polymer/eduke32/build/src/winlayer.c | 34 +++---------------- 4 files changed, 53 insertions(+), 70 deletions(-) diff --git a/polymer/eduke32/build/include/winbits.h b/polymer/eduke32/build/include/winbits.h index be2afc6c5..adb50b07b 100644 --- a/polymer/eduke32/build/include/winbits.h +++ b/polymer/eduke32/build/include/winbits.h @@ -23,6 +23,9 @@ extern void win_setvideomode(int32_t c); extern void win_uninit(void); extern void win_close(void); +extern void Win_GetOriginalLayoutName(void); +extern void Win_SetKeyboardLayoutUS(int); + extern void ShowErrorBox(const char *m); extern LPTSTR GetWindowsErrorMsg(DWORD code); diff --git a/polymer/eduke32/build/src/sdlayer.c b/polymer/eduke32/build/src/sdlayer.c index 9a0b51014..92901ac2c 100644 --- a/polymer/eduke32/build/src/sdlayer.c +++ b/polymer/eduke32/build/src/sdlayer.c @@ -742,44 +742,6 @@ void debugprintf(const char *f, ...) // // -#ifdef _WIN32 -static void switchlayout(const char *layout) -{ - char layoutname[KL_NAMELENGTH]; - - GetKeyboardLayoutName(layoutname); - - if (!Bstrcmp(layoutname, layout)) - return; - - initprintf("Switching keyboard layout from %s to %s\n", layoutname, layout); - LoadKeyboardLayout(layout, KLF_ACTIVATE|KLF_SETFORPROCESS|KLF_SUBSTITUTE_OK); -} - -static void W_SetKeyboardLayoutUS(int32_t resetp) -{ - static char defaultlayoutname[KL_NAMELENGTH]; - - if (!resetp) - { - static int done = 0; - - if (!done) - { - GetKeyboardLayoutName(defaultlayoutname); - // 00000409 is "American English" - switchlayout("00000409"); - - done = 1; - } - } - else if (defaultlayoutname[0]) - { - switchlayout(defaultlayoutname); - } -} -#endif - // static int32_t joyblast=0; static SDL_Joystick *joydev = NULL; @@ -791,7 +753,8 @@ int32_t initinput(void) int32_t i, j; #ifdef _WIN32 - W_SetKeyboardLayoutUS(0); + Win_GetOriginalLayoutName(); + Win_SetKeyboardLayoutUS(1); #endif #if defined EDUKE32_OSX @@ -869,7 +832,7 @@ int32_t initinput(void) void uninitinput(void) { #ifdef _WIN32 - W_SetKeyboardLayoutUS(1); + Win_SetKeyboardLayoutUS(0); #endif uninitmouse(); diff --git a/polymer/eduke32/build/src/winbits.c b/polymer/eduke32/build/src/winbits.c index dee8cb06f..d7201b25c 100644 --- a/polymer/eduke32/build/src/winbits.c +++ b/polymer/eduke32/build/src/winbits.c @@ -257,6 +257,49 @@ void win_close(void) } +// Keyboard layout switching + +static void switchlayout(char const * layout) +{ + char layoutname[KL_NAMELENGTH]; + + GetKeyboardLayoutName(layoutname); + + if (!Bstrcmp(layoutname, layout)) + return; + + initprintf("Switching keyboard layout from %s to %s\n", layoutname, layout); + LoadKeyboardLayout(layout, KLF_ACTIVATE|KLF_SETFORPROCESS|KLF_SUBSTITUTE_OK); +} + +static char OriginalLayoutName[KL_NAMELENGTH]; + +void Win_GetOriginalLayoutName(void) +{ + GetKeyboardLayoutName(OriginalLayoutName); +} + +void Win_SetKeyboardLayoutUS(int const toggle) +{ + if (toggle) + { + static int done = 0; + + if (!done) + { + // 00000409 is "American English" + switchlayout("00000409"); + + done = 1; + } + } + else if (OriginalLayoutName[0]) + { + switchlayout(OriginalLayoutName); + } +} + + // // ShowErrorBox() -- shows an error message box // diff --git a/polymer/eduke32/build/src/winlayer.c b/polymer/eduke32/build/src/winlayer.c index f91b0cb3c..719599609 100644 --- a/polymer/eduke32/build/src/winlayer.c +++ b/polymer/eduke32/build/src/winlayer.c @@ -143,7 +143,6 @@ char quitevent=0; char appactive=1; char realfs=0; char regrabmouse=0; -char defaultlayoutname[KL_NAMELENGTH]; int32_t inputchecked = 0; //------------------------------------------------------------------------------------------------- @@ -709,27 +708,15 @@ int32_t handleevents(void) } -void switchlayout(char const * layout) -{ - char layoutname[KL_NAMELENGTH]; - - GetKeyboardLayoutName(layoutname); - - if (!Bstrcmp(layoutname, layout)) - return; - - initprintf("Switching keyboard layout from %s to %s\n", layoutname, layout); - LoadKeyboardLayout(layout, KLF_ACTIVATE|KLF_SETFORPROCESS|KLF_SUBSTITUTE_OK); -} - - // // initinput() -- init input system // int32_t initinput(void) { int32_t i; - static int32_t readlayout=0; + + Win_GetOriginalLayoutName(); + Win_SetKeyboardLayoutUS(1); moustat=0; memset(keystatus, 0, sizeof(keystatus)); @@ -745,18 +732,6 @@ int32_t initinput(void) inputdevices = 1|2; joyisgamepad = joynumaxes = joynumbuttons = joynumhats=0; - // 00000409 is "American English" - - if (!readlayout) - { - GetKeyboardLayoutName(defaultlayoutname); - - if (Bstrcmp(defaultlayoutname, "00000409")) - switchlayout("00000409"); - - readlayout = 1; - } - GetKeyNames(); InitDirectInput(); @@ -769,8 +744,7 @@ int32_t initinput(void) // void uninitinput(void) { - if (defaultlayoutname[0]) - switchlayout(defaultlayoutname); + Win_SetKeyboardLayoutUS(0); uninitmouse(); UninitDirectInput();