diff options
author | nyamatongwe <unknown> | 2001-04-30 05:46:30 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2001-04-30 05:46:30 +0000 |
commit | b669de65e5aecfeb666cb660e0785851d7cde441 (patch) | |
tree | f53dca934f81ee4c933b036c61f141ec5c7954d6 | |
parent | 8b3ad7c54cd0531f3cafad365433d25bce285e0d (diff) | |
download | scintilla-mirror-b669de65e5aecfeb666cb660e0785851d7cde441.tar.gz |
Forwarding state of Alt key to key map and using the returned consumed
parameter to see whether to call DefWindowProc.
Added word part movement keys to key map even though they conflict
with entering characters by number as that can be forced to work by entering
Num Lock mode.
WM_CHAR control key messages can go into the buffer now if they arrived
from being entered by number by detecting when they were not consumed
by key down processing.
-rw-r--r-- | src/KeyMap.cxx | 4 | ||||
-rw-r--r-- | win32/ScintillaWin.cxx | 14 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/KeyMap.cxx b/src/KeyMap.cxx index 352567e51..e1fe8e032 100644 --- a/src/KeyMap.cxx +++ b/src/KeyMap.cxx @@ -73,10 +73,14 @@ KeyToCommand KeyMap::MapDefault[] = { {SCK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND}, {SCK_LEFT, SCI_CTRL, SCI_WORDLEFT}, {SCK_LEFT, SCI_CSHIFT, SCI_WORDLEFTEXTEND}, + {SCK_LEFT, SCI_ALT, SCI_WORDPARTLEFT}, + {SCK_LEFT, SCI_ASHIFT, SCI_WORDPARTLEFTEXTEND}, {SCK_RIGHT, SCI_NORM, SCI_CHARRIGHT}, {SCK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND}, {SCK_RIGHT, SCI_CTRL, SCI_WORDRIGHT}, {SCK_RIGHT, SCI_CSHIFT, SCI_WORDRIGHTEXTEND}, + {SCK_RIGHT, SCI_ALT, SCI_WORDPARTRIGHT}, + {SCK_RIGHT, SCI_ASHIFT, SCI_WORDPARTRIGHTEXTEND}, {SCK_HOME, SCI_NORM, SCI_VCHOME}, {SCK_HOME, SCI_SHIFT, SCI_VCHOMEEXTEND}, {SCK_HOME, SCI_CTRL, SCI_DOCUMENTSTART}, diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index e09f8f096..79a3d1183 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -112,6 +112,8 @@ public: class ScintillaWin : public ScintillaBase { + bool lastKeyDownConsumed; + bool capturedMouse; bool hasOKText; @@ -206,6 +208,8 @@ HINSTANCE ScintillaWin::hInstance = 0; ScintillaWin::ScintillaWin(HWND hwnd) { + lastKeyDownConsumed = false; + capturedMouse = false; hasOKText = false; @@ -490,7 +494,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam return ::DefWindowProc(wMain.GetID(), iMessage, wParam, lParam); case WM_CHAR: - if (!iscntrl(wParam&0xff)) { + if (!iscntrl(wParam&0xff) || !lastKeyDownConsumed) { if (IsUnicodeMode()) { AddCharBytes(static_cast<char>(wParam&0xff)); } else { @@ -499,12 +503,16 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam } return 1; + case WM_SYSKEYDOWN: case WM_KEYDOWN: { //Platform::DebugPrintf("S keydown %d %x %x %x %x\n",iMessage, wParam, lParam, ::IsKeyDown(VK_SHIFT), ::IsKeyDown(VK_CONTROL)); + lastKeyDownConsumed = false; int ret = KeyDown(KeyTranslate(wParam), Platform::IsKeyDown(VK_SHIFT), - Platform::IsKeyDown(VK_CONTROL), false); - if (!ret) + Platform::IsKeyDown(VK_CONTROL), + Platform::IsKeyDown(VK_MENU), + &lastKeyDownConsumed); + if (!ret && !lastKeyDownConsumed) return ::DefWindowProc(wMain.GetID(), iMessage, wParam, lParam); break; } |