aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2001-04-30 05:46:30 +0000
committernyamatongwe <unknown>2001-04-30 05:46:30 +0000
commitb669de65e5aecfeb666cb660e0785851d7cde441 (patch)
treef53dca934f81ee4c933b036c61f141ec5c7954d6
parent8b3ad7c54cd0531f3cafad365433d25bce285e0d (diff)
downloadscintilla-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.cxx4
-rw-r--r--win32/ScintillaWin.cxx14
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;
}