Browse Source

Merge pull request #540 from signmotion/default-keyboard-layout

Added a default keyboard layout for launching the game.
LuisAntonRebollo 11 years ago
parent
commit
54fa2bcdab

+ 3 - 0
Engine/source/platform/platformInput.h

@@ -118,6 +118,9 @@ public:
 
    static U8 getModifierKeys() {return smModifierKeys;}
    static void setModifierKeys(U8 mod) {smModifierKeys = mod;}
+
+   static void attemptSwitchToKeyboardLayout( U32 layout );
+
 #ifdef LOG_INPUT
    static void log( const char* format, ... );
 #endif

+ 18 - 0
Engine/source/platformWin32/winInput.cpp

@@ -33,6 +33,8 @@
 #include <stdarg.h>
 #endif
 
+#include <sstream>
+
 // Static class variables:
 InputManager*  Input::smManager;
 bool           Input::smActive;
@@ -79,6 +81,10 @@ void Input::init()
 
    destroy();
 
+#ifdef TORQUE_DEFAULT_KEYBOARD_LAYOUT
+   attemptSwitchToKeyboardLayout( TORQUE_DEFAULT_KEYBOARD_LAYOUT );
+#endif
+
 #ifdef LOG_INPUT
    struct tm* newTime;
    time_t aclock;
@@ -487,6 +493,18 @@ InputManager* Input::getManager()
    return( smManager );
 }
 
+//------------------------------------------------------------------------------
+void Input::attemptSwitchToKeyboardLayout( U32 layout )
+{
+   const auto lang = MAKELANGID( layout, SUBLANG_DEFAULT );
+   std::wstringstream ss;
+   ss << std::hex << lang;
+   const auto hexLang = ss.str().c_str();
+   ActivateKeyboardLayout( LoadKeyboardLayout(
+       hexLang,  KLF_ACTIVATE | KLF_REPLACELANG
+   ), KLF_REORDER );
+}
+
 #ifdef LOG_INPUT
 //------------------------------------------------------------------------------
 void Input::log( const char* format, ... )

+ 6 - 2
Engine/source/sim/actionMap.cpp

@@ -458,8 +458,12 @@ bool ActionMap::createEventDescriptor(const char* pEventString, EventDescriptor*
    }
 
    // Now we need to map the key string to the proper KEY code from event.h
-   //
-   AssertFatal(dStrlen(pObjectString) != 0, "Error, no key was specified!");
+   AssertFatal(
+       dStrlen( pObjectString ) > 0,
+       "Error, no key was specified!\n"
+       "Review file 'scripts/client/config.cs' and remove symbols"
+       " which is not latin. Or delete this file."
+   );
 
    if (dStrlen(pObjectString) == 1)
    {

+ 7 - 0
Templates/Empty/source/torqueConfig.h

@@ -148,6 +148,13 @@
 /// texture manager.
 #define TORQUE_FRAME_SIZE     16 << 20
 
+// Default keyboard layout for launching the game. It's fixed crash when a
+// game running with the extend unicode keyboard (cyrillic, for example).
+// Windows only.
+// @see For choice language >
+//      http://msdn.microsoft.com/en-us/library/windows/desktop/dd318693%28v=vs.85%29.aspx
+#define TORQUE_DEFAULT_KEYBOARD_LAYOUT  LANG_ENGLISH
+
 // Finally, we define some dependent #defines. This enables some subsidiary
 // functionality to get automatically turned on in certain configurations.
 

+ 7 - 0
Templates/Full/source/torqueConfig.h

@@ -169,6 +169,13 @@
 /// texture manager.
 #define TORQUE_FRAME_SIZE     16 << 20
 
+// Default keyboard layout for launching the game. It's fixed crash when a
+// game running with the extend unicode keyboard (cyrillic, for example).
+// Windows only.
+// @see For choice language >
+//      http://msdn.microsoft.com/en-us/library/windows/desktop/dd318693%28v=vs.85%29.aspx
+#define TORQUE_DEFAULT_KEYBOARD_LAYOUT  LANG_ENGLISH
+
 // Finally, we define some dependent #defines. This enables some subsidiary
 // functionality to get automatically turned on in certain configurations.