diff --git a/src/dlangui/platforms/sdl/sdlapp.d b/src/dlangui/platforms/sdl/sdlapp.d index 765e3c86..b6794ecf 100644 --- a/src/dlangui/platforms/sdl/sdlapp.d +++ b/src/dlangui/platforms/sdl/sdlapp.d @@ -796,10 +796,19 @@ class SDLWindow : Window { return res; } + static bool isNumLockEnabled() + { + version(Windows) { + return !!(GetKeyState( VK_NUMLOCK ) & 1); + } else { + return !!(SDL_GetModState() & KMOD_NUM); + } + } + uint _keyFlags; - bool processKeyEvent(KeyAction action, uint keyCode, uint flags) { - debug(DebugSDL) Log.d("processKeyEvent ", action, " SDL key=0x", format("%08x", keyCode), " SDL flags=0x", format("%08x", flags)); - keyCode = convertKeyCode(keyCode); + bool processKeyEvent(KeyAction action, uint keyCodeIn, uint flags) { + debug(DebugSDL) Log.d("processKeyEvent ", action, " SDL key=0x", format("%08x", keyCodeIn), " SDL flags=0x", format("%08x", flags)); + uint keyCode = convertKeyCode(keyCodeIn); flags = convertKeyFlags(flags); if (action == KeyAction.KeyDown) { switch(keyCode) { @@ -842,6 +851,13 @@ class SDLWindow : Window { _keyFlags = flags; debug(DebugSDL) Log.d("processKeyEvent ", action, " converted key=0x", format("%08x", keyCode), " converted flags=0x", format("%08x", flags)); + if (action == KeyAction.KeyDown || action == KeyAction.KeyUp) { + if ((keyCodeIn >= SDLK_KP_1 && keyCodeIn <= SDLK_KP_0 + || keyCodeIn == SDLK_KP_PERIOD + //|| keyCodeIn >= 0x40000059 && keyCodeIn + ) && isNumLockEnabled) + return false; + } bool res = dispatchKeyEvent(new KeyEvent(action, keyCode, flags)); // if ((keyCode & 0x10000) && (keyCode & 0xF000) != 0xF000) { // dchar[1] text; diff --git a/src/dlangui/widgets/editors.d b/src/dlangui/widgets/editors.d index 7cd203f2..42b455b0 100644 --- a/src/dlangui/widgets/editors.d +++ b/src/dlangui/widgets/editors.d @@ -1688,7 +1688,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction cancelHoverTimer(); bool ctrlOrAltPressed = false; //(event.flags & (KeyFlag.Control /* | KeyFlag.Alt */)); if (event.action == KeyAction.Text && event.text.length && !ctrlOrAltPressed) { - Log.d("text entered: ", event.text); + //Log.d("text entered: ", event.text); if (readOnly) return true; if (replaceMode && _selectionRange.empty && _content[_caretPos.line].length >= _caretPos.pos + event.text.length) {