\r
LRESULT CALLBACK CXkeymacsDll::KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)\r
{\r
- ASSERT(0 <= wParam && wParam <= UCHAR_MAX);\r
-\r
- UINT nType = NONE;\r
- BYTE nOrigKey = (BYTE)wParam;\r
+ const BYTE nOrigKey = static_cast<BYTE>(wParam);\r
+ const bool bRelease = (lParam & BEING_RELEASED) != 0;\r
+ const bool bExtended = (lParam & EXTENDED_KEY) != 0;\r
\r
static BOOL bLocked = FALSE;\r
static const BYTE RECURSIVE_KEY = 0x07;\r
- static int (*fCommand)() = NULL;\r
+ static int (*fLastCommand)() = NULL;\r
static BYTE nOneShotModifier[MAX_KEY] = {'\0'};\r
static BOOL bCherryOneShotModifier = FALSE;\r
\r
-// CUtils::Log(_T("nCode = %#x, nKey = %#x, lParam = %p, %d, %d"), nOrigCode, nKey, lParam, IsDll64, Is64ProcessHwnd(GetForegroundWindow()));\r
+// CUtils::Log(_T("nCode = %#x, nKey = %#x, lParam = %p, %d, %d"), nCode, nOrigKey, lParam, IsDll64, Is64ProcessHwnd(GetForegroundWindow()));\r
\r
- if (Is64ProcessHwnd(GetForegroundWindow()) != IsDll64 || CUtils::IsXkeymacs())\r
+ if (Is64ProcessHwnd(GetForegroundWindow()) != IsDll64 || CUtils::IsXkeymacs() ||\r
+ nCode < 0 || nCode == HC_NOREMOVE)\r
return CallNextHookEx(g_hHookKeyboard, nCode, wParam, lParam);\r
\r
- if (nCode < 0 || nCode == HC_NOREMOVE) {\r
- goto DO_NOTHING;\r
- }\r
-\r
// CUtils::Log(_T("nKey = %#x, ext = %d, rel = %d, pre = %d, %#hx, %#hx"), nOrigKey,\r
// (lParam & EXTENDED_KEY) ? 1 : 0, (lParam & BEING_RELEASED) ? 1 : 0, (lParam & REPEATED_KEY) ? 1 : 0,\r
// GetKeyState(nOrigKey), GetAsyncKeyState(nOrigKey));\r
\r
if (nOrigKey == RECURSIVE_KEY) {\r
- if (lParam & BEING_RELEASED) {\r
+ if (bRelease)\r
goto HOOK_RECURSIVE_KEY;\r
- } else {\r
+ else\r
goto RECURSIVE_COMMAND;\r
- }\r
}\r
\r
- {\r
- static BOOL bShift = FALSE;\r
- if (IsDepressedShiftKeyOnly(nOrigKey)) {\r
- if (lParam & BEING_RELEASED) {\r
- if (bShift) {\r
- CCommands::SetMark(FALSE);\r
- }\r
- } else {\r
- bShift = TRUE;\r
- }\r
- } else {\r
- bShift = FALSE;\r
- }\r
- }\r
+ CancelMarkWithShift(nOrigKey, bRelease);\r
\r
BYTE nKey = nOrigKey;\r
switch (nKey) {\r
case VK_CONTROL:\r
- if (lParam & EXTENDED_KEY) {\r
- nKey = VK_RCONTROL;\r
- } else {\r
- nKey = VK_LCONTROL;\r
- }\r
+ nKey = bExtended ? VK_RCONTROL : VK_LCONTROL;\r
break;\r
case VK_MENU:\r
- if (lParam & EXTENDED_KEY) {\r
- nKey = VK_RMENU;\r
- } else {\r
- nKey = VK_LMENU;\r
- }\r
+ nKey = bExtended ? VK_RMENU : VK_LMENU;\r
break;\r
case VK_SHIFT:\r
- if (lParam & EXTENDED_KEY) {\r
- nKey = VK_RSHIFT;\r
- } else {\r
- nKey = VK_LSHIFT;\r
- }\r
- break;\r
- default:\r
+ nKey = bExtended ? VK_RSHIFT : VK_LSHIFT;\r
break;\r
}\r
\r
- if (lParam & BEING_RELEASED) {\r
+#define fCommand(type) (Commands[m_Config.nCommandID[m_nApplicationID][(type)][nKey]].fCommand)\r
+#define nFunctionID (m_Config.nFunctionID[m_nApplicationID][nType][nKey])\r
+\r
+ if (bRelease) {\r
switch (nOrigKey) {\r
case VK_MENU:\r
if (m_nHookAltRelease) {\r
case VK_RWIN:\r
case VK_APPS:\r
for (int i = 0; i < MAX_COMMAND_TYPE; ++i) {\r
- int (*func)() = Commands[m_Config.nCommandID[m_nApplicationID][i][nKey]].fCommand;\r
- if (func && !(nOrigKey == VK_MENU && func == CCommands::MetaAlt))\r
+ int (*const fCommand)() = fCommand(i);\r
+ if (fCommand && !(nOrigKey == VK_MENU && fCommand == CCommands::MetaAlt))\r
goto HOOK;\r
}\r
}\r
if (nOneShotModifier[nKey]) {\r
ReleaseKey(nOneShotModifier[nKey]);\r
nOneShotModifier[nKey] = 0;\r
-\r
if (bCherryOneShotModifier) {\r
bCherryOneShotModifier = FALSE;\r
Kdu(nKey);\r
goto DO_NOTHING;\r
}\r
\r
- if (m_Config.nSettingStyle[m_nApplicationID] == SETTING_DISABLE) {\r
+ if (m_Config.nSettingStyle[m_nApplicationID] == SETTING_DISABLE)\r
goto DO_NOTHING;\r
- }\r
\r
// Do Nothing for Meadow, Mule for Win32, ... if those use default setting.\r
- if (!_tcsicmp(m_Config.szSpecialApp[m_nApplicationID], _T("Default"))\r
- && CUtils::IsDefaultIgnoreApplication()) {\r
+ if (!_tcsicmp(m_Config.szSpecialApp[m_nApplicationID], _T("Default")) && CUtils::IsDefaultIgnoreApplication())\r
goto DO_NOTHING;\r
- }\r
\r
switch (IsPassThrough(nKey)) {\r
case GOTO_DO_NOTHING:\r
goto HOOK;\r
case CONTINUE:\r
break;\r
- default:\r
- ASSERT(0);\r
- break;\r
}\r
\r
// set command type\r
- nType = IsDown(VK_SHIFT) * SHIFT | IsControl() * CONTROL | IsMeta() * META | CCommands::bC_x() * CONTROLX;\r
+ int nType = IsDown(VK_SHIFT) * SHIFT | IsControl() * CONTROL | IsMeta() * META | CCommands::bC_x() * CONTROLX;\r
// Ignore undefined C-x ?\r
- if (nType & CONTROLX) {\r
- if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == NULL\r
- && m_Config.nFunctionID[m_nApplicationID][nType][nKey] < 0) {\r
- if (m_Config.bIgnoreUndefinedC_x[m_nApplicationID]) {\r
- CCommands::Reset(GOTO_HOOK);\r
- goto HOOK;\r
- }\r
- nType &= ~CONTROLX;\r
+ if (nType & CONTROLX && fCommand(nType) == NULL && nFunctionID < 0) {\r
+ if (m_Config.bIgnoreUndefinedC_x[m_nApplicationID]) {\r
+ CCommands::Reset(GOTO_HOOK);\r
+ goto HOOK;\r
}\r
+ nType &= ~CONTROLX;\r
}\r
// Ignore undefined Meta Ctrl+?\r
- if (CCommands::bM_() && (nType & CONTROL)) {\r
- if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == NULL\r
- && m_Config.nFunctionID[m_nApplicationID][nType][nKey] < 0) {\r
- if (m_Config.bIgnoreUndefinedMetaCtrl[m_nApplicationID]) {\r
- if (CheckOriginal(CONTROL, nKey)) {\r
- goto DO_NOTHING;\r
- }\r
- CCommands::Reset(GOTO_HOOK);\r
- goto HOOK;\r
- }\r
+ if (CCommands::bM_() && nType & CONTROL && fCommand(nType) == NULL && nFunctionID < 0) {\r
+ if (m_Config.bIgnoreUndefinedMetaCtrl[m_nApplicationID]) {\r
+ if (CheckOriginal(CONTROL, nKey))\r
+ goto DO_NOTHING;\r
+ CCommands::Reset(GOTO_HOOK);\r
+ goto HOOK;\r
nType &= ~META;\r
}\r
}\r
goto DO_NOTHING;\r
}\r
\r
- if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::EnableOrDisableXKeymacs) {\r
+ int (*const fCommand)() = fCommand(nType);\r
+ if (fCommand == CCommands::EnableOrDisableXKeymacs) {\r
ToggleKeyboardHookState();\r
goto HOOK;\r
}\r
- if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::EnableXKeymacs) {\r
- if (!m_bHook) {\r
+ if (fCommand == CCommands::EnableXKeymacs) {\r
+ if (!m_bHook)\r
ToggleKeyboardHookState();\r
- }\r
goto HOOK;\r
}\r
- if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::DisableXKeymacs) {\r
- if (m_bHook) {\r
+ if (fCommand == CCommands::DisableXKeymacs) {\r
+ if (m_bHook)\r
ToggleKeyboardHookState();\r
- }\r
goto HOOK;\r
}\r
- if (!m_bHook) {\r
+ if (!m_bHook)\r
goto DO_NOTHING;\r
- }\r
\r
- if (CCommands::bM_x()) {\r
- static unsigned int index = 0;\r
+ if (CCommands::bM_x() && !bRelease) {\r
+ static size_t index = 0;\r
static TCHAR szPath[MAX_PATH] = {'\0'};\r
-\r
- if (lParam & BEING_RELEASED) {\r
- // ignore\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::BackwardChar) {\r
- if (index) {\r
+ if (fCommand == CCommands::BackwardChar) {\r
+ if (index)\r
--index;\r
- }\r
goto HOOKX;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::BeginningOfLine) {\r
+ } else if (fCommand == CCommands::BeginningOfLine) {\r
index = 0;\r
goto HOOKX;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::DeleteBackwardChar) {\r
+ } else if (fCommand == CCommands::DeleteBackwardChar) {\r
if (index) {\r
--index;\r
- memmove(&szPath[index], &szPath[index + 1], _tcslen(szPath) - index);\r
+ memmove(szPath + index, szPath + index + 1, MAX_PATH - index);\r
SetM_xTip(szPath);\r
}\r
goto HOOKX;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::DeleteChar) {\r
+ } else if (fCommand == CCommands::DeleteChar) {\r
if (index < _tcslen(szPath)) {\r
- memmove(&szPath[index], &szPath[index + 1], _tcslen(szPath) - index);\r
+ memmove(szPath + index, szPath + index + 1, MAX_PATH - index);\r
SetM_xTip(szPath);\r
}\r
goto HOOKX;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::EndOfLine) {\r
+ } else if (fCommand == CCommands::EndOfLine) {\r
index = _tcslen(szPath);\r
goto HOOKX;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::ForwardChar) {\r
- if (index < _tcslen(szPath)) {\r
+ } else if (fCommand == CCommands::ForwardChar) {\r
+ if (index < _tcslen(szPath))\r
++index;\r
- }\r
goto HOOKX;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::KeyboardQuit) {\r
+ } else if (fCommand == CCommands::KeyboardQuit) {\r
CCommands::bM_x(FALSE);\r
index = 0;\r
memset(szPath, 0, sizeof(szPath));\r
goto HOOK;\r
- } else if (nKey == VK_RETURN\r
- || Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::Newline) {\r
+ } else if (nKey == VK_RETURN || fCommand == CCommands::Newline) {\r
InvokeM_x(szPath);\r
-\r
CCommands::bM_x(FALSE);\r
index = 0;\r
memset(szPath, 0, sizeof(szPath));\r
goto HOOK;\r
- } else if (index < MAX_PATH - 1) {\r
+ } else if (nKey && index < MAX_PATH - 1) {\r
const BOOL bIsShiftDown = IsDown(VK_SHIFT, FALSE);\r
- for (TCHAR nAscii = 1; nAscii != 0; ++nAscii) { // repeat until overflow\r
- if (nKey != 0 && a2v(nAscii) == nKey && bIsShiftDown == IsShift(nAscii)) {\r
+ TCHAR nAscii = 0;\r
+ do { // 1-127\r
+ if (a2v(++nAscii) == nKey && bIsShiftDown == IsShift(nAscii)) {\r
// CUtils::Log("M-x: %#X (%c), %#X (%c)", nKey, nKey, nAscii, nAscii);\r
- if (index < _tcslen(szPath)) {\r
- memmove(&szPath[index + 1], &szPath[index], __min(_tcslen(szPath) - index, MAX_PATH - (index + 1) - 1));\r
- }\r
+ if (index < _tcslen(szPath))\r
+ memmove(szPath + index + 1, szPath + index, MAX_PATH - index - 1);\r
szPath[index++] = nAscii;\r
// CUtils::Log("M-x: %c(%#04x)", nAscii, nAscii);\r
SetM_xTip(szPath);\r
goto HOOKX;\r
}\r
- }\r
+ } while (nAscii != 127);\r
}\r
}\r
\r
- if (CCommands::bC_u()) {\r
- if ((nType == NONE) && ('0' <= nKey) && (nKey <= '9')) {\r
+ if (CCommands::bC_u() && nType == NONE) {\r
+ if ('0' <= nKey && nKey <= '9') {\r
CCommands::NumericArgument(nKey - '0');\r
goto HOOK0_9;\r
}\r
- if ((nType == NONE) && (nKey == 0xBD)) {\r
+ if (nKey == VK_OEM_MINUS) {\r
CCommands::NumericArgumentMinus();\r
goto HOOK0_9;\r
}\r
}\r
\r
- if (Commands[m_Config.nCommandID[m_nApplicationID][nType & ~CONTROL][nKey]].fCommand == CCommands::OneShotModifierCtrl) {\r
- nOneShotModifier[nKey] = VK_CONTROL;\r
- DepressKey(VK_CONTROL);\r
- bCherryOneShotModifier = TRUE;\r
- goto HOOK;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::OneShotModifierCtrlRepeat) {\r
- nOneShotModifier[nKey] = VK_CONTROL;\r
- DepressKey(VK_CONTROL);\r
- bCherryOneShotModifier = TRUE;\r
- goto HOOK;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType & ~CONTROL][nKey]].fCommand == CCommands::OneShotModifierCtrlRepeat) {\r
- ReleaseKey(VK_CONTROL);\r
- bCherryOneShotModifier = FALSE;\r
- Kdu(nKey);\r
- goto HOOK;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType & ~META][nKey]].fCommand == CCommands::OneShotModifierAlt) {\r
- nOneShotModifier[nKey] = VK_MENU;\r
- DepressKey(VK_MENU);\r
- bCherryOneShotModifier = TRUE;\r
- goto HOOK;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::OneShotModifierAltRepeat) {\r
- nOneShotModifier[nKey] = VK_MENU;\r
- DepressKey(VK_MENU);\r
- bCherryOneShotModifier = TRUE;\r
- goto HOOK;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType & ~META][nKey]].fCommand == CCommands::OneShotModifierAltRepeat) {\r
- ReleaseKey(VK_MENU);\r
- bCherryOneShotModifier = FALSE;\r
- Kdu(nKey);\r
- goto HOOK;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType & ~SHIFT][nKey]].fCommand == CCommands::OneShotModifierShift) {\r
- nOneShotModifier[nKey] = VK_SHIFT;\r
- DepressKey(VK_SHIFT);\r
- bCherryOneShotModifier = TRUE;\r
- goto HOOK;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand == CCommands::OneShotModifierShiftRepeat) {\r
- nOneShotModifier[nKey] = VK_SHIFT;\r
- DepressKey(VK_SHIFT);\r
- bCherryOneShotModifier = TRUE;\r
- goto HOOK;\r
- } else if (Commands[m_Config.nCommandID[m_nApplicationID][nType & ~SHIFT][nKey]].fCommand == CCommands::OneShotModifierShiftRepeat) {\r
- ReleaseKey(VK_SHIFT);\r
- bCherryOneShotModifier = FALSE;\r
- Kdu(nKey);\r
- goto HOOK;\r
- } else {\r
- int i;\r
- for (i = 0; i < MAX_KEY; ++i) {\r
- if (nOneShotModifier[i] == nKey) {\r
- break;\r
- }\r
- }\r
- if (i == MAX_KEY) {\r
- bCherryOneShotModifier = FALSE;\r
- }\r
+#define OneShotModifier(type, vk, mod) \\r
+ if (fCommand(nType & ~type) == CCommands::OneShotModifier ## mod || \\r
+ fCommand(nType) == CCommands::OneShotModifier ## mod ## Repeat) { \\r
+ nOneShotModifier[nKey] = vk; \\r
+ DepressKey(vk); \\r
+ bCherryOneShotModifier = TRUE; \\r
+ goto HOOK; \\r
+ } else if (fCommand(nType & ~CONTROL) == CCommands::OneShotModifier ## mod ## Repeat) { \\r
+ ReleaseKey(vk); \\r
+ bCherryOneShotModifier = FALSE; \\r
+ Kdu(nKey); \\r
+ goto HOOK; \\r
}\r
\r
- if (0 <= m_Config.nFunctionID[m_nApplicationID][nType][nKey]\r
- && m_Config.nFunctionID[m_nApplicationID][nType][nKey] < MAX_FUNCTION\r
- && _tcslen(m_Config.szFunctionDefinition[m_Config.nFunctionID[m_nApplicationID][nType][nKey]])) {\r
- CallFunction(m_Config.nFunctionID[m_nApplicationID][nType][nKey]);\r
+ OneShotModifier(CONTROL, VK_CONTROL, Ctrl);\r
+ OneShotModifier(META, VK_MENU, Alt);\r
+ OneShotModifier(SHIFT, VK_SHIFT, Shift);\r
+ int i;\r
+ for (i = 0; i < MAX_KEY; ++i)\r
+ if (nOneShotModifier[i] == nOrigKey)\r
+ break;\r
+ if (i == MAX_KEY)\r
+ bCherryOneShotModifier = FALSE;\r
+\r
+ if (0 <= nFunctionID && nFunctionID < MAX_FUNCTION && m_Config.szFunctionDefinition[nFunctionID][0]) {\r
+ CallFunction(nFunctionID);\r
CCommands::Reset(GOTO_HOOK);\r
goto HOOK;\r
}\r
+#undef fCommand\r
+#undef nFunctionID\r
\r
- if (!Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand) {\r
- if (nOrigKey == VK_CONTROL || nOrigKey == VK_MENU || nOrigKey == VK_SHIFT) {\r
+ if (!fCommand) {\r
+ if (nOrigKey == VK_CONTROL || nOrigKey == VK_MENU || nOrigKey == VK_SHIFT)\r
goto DO_NOTHING;\r
- }\r
-\r
if (!(nType & SHIFT)) {\r
if (CCommands::IsSetMark()) {\r
if (CCommands::MoveCaret(nKey, nType & CONTROL) != CONTINUE) {\r
CCommands::SetMark(FALSE);\r
}\r
}\r
-\r
if (1 < CCommands::GetNumericArgument()) {\r
Kdu(nKey, CCommands::GetNumericArgument());\r
CCommands::ClearNumericArgument();\r
goto HOOK;\r
}\r
-\r
goto DO_NOTHING;\r
}\r
\r
- if (CCommands::IsTemporarilyDisableXKeymacs()\r
- && Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand != CCommands::KeyboardQuit) {\r
+ if (CCommands::IsTemporarilyDisableXKeymacs() && fCommand != CCommands::KeyboardQuit) {\r
CCommands::SetTemporarilyDisableXKeymacs(FALSE);\r
goto DO_NOTHING;\r
}\r
m_bRightAlt = IsDown(VK_RMENU, FALSE);\r
m_bRightShift = IsDown(VK_RSHIFT, FALSE);\r
\r
- if (!bLocked) {\r
- bLocked = TRUE;\r
- fCommand = Commands[m_Config.nCommandID[m_nApplicationID][nType][nKey]].fCommand;\r
+ if (bLocked)\r
+ goto HOOK_RECURSIVE_KEY;\r
+ bLocked = TRUE;\r
+ fLastCommand = fCommand;\r
RECURSIVE_COMMAND:\r
- switch (fCommand()) {\r
- case GOTO_DO_NOTHING:\r
- bLocked = FALSE;\r
- goto DO_NOTHING;\r
- case GOTO_HOOK:\r
- bLocked = FALSE;\r
- goto HOOK;\r
- case GOTO_RECURSIVE:\r
- goto RECURSIVE;\r
- case GOTO_HOOKX:\r
- bLocked = FALSE;\r
- goto HOOKX;\r
+ switch (fLastCommand()) {\r
+ case GOTO_DO_NOTHING:\r
+ bLocked = FALSE;\r
+ goto DO_NOTHING;\r
+ case GOTO_HOOK:\r
+ bLocked = FALSE;\r
+ goto HOOK;\r
+ case GOTO_RECURSIVE:\r
+ goto RECURSIVE;\r
+ case GOTO_HOOKX:\r
+ bLocked = FALSE;\r
+ goto HOOKX;\r
case GOTO_HOOK0_9:\r
- bLocked = FALSE;\r
- goto HOOK0_9;\r
- default:\r
- ASSERT(0);\r
- bLocked = FALSE;\r
- goto DO_NOTHING;\r
- }\r
- } else {\r
- goto HOOK_RECURSIVE_KEY;\r
+ bLocked = FALSE;\r
+ goto HOOK0_9;\r
}\r
\r
DO_NOTHING:\r
SetModifierIcons();\r
- if (m_bRecordingMacro && (!(lParam & BEING_RELEASED) || m_bDown[wParam])) {\r
+ if (m_bRecordingMacro && (!bRelease || m_bDown[wParam])) {\r
KbdMacro m = { nCode, wParam, lParam, TRUE };\r
m_Macro.push_back(m);\r
- m_bDown[wParam] |= !(lParam & BEING_RELEASED);\r
+ m_bDown[wParam] |= !bRelease;\r
}\r
return CallNextHookEx(g_hHookKeyboard, nCode, wParam, lParam);\r
\r
return FALSE;\r
}\r
\r
-BOOL CXkeymacsDll::IsDepressedShiftKeyOnly(BYTE nKey)\r
+void CXkeymacsDll::CancelMarkWithShift(BYTE nKey, bool bRelease)\r
{\r
- if (nKey != VK_SHIFT\r
- && nKey != VK_LSHIFT\r
- && nKey != VK_RSHIFT) {\r
- return FALSE;\r
- }\r
-\r
+ static bool bShift;\r
+ if (nKey != VK_SHIFT)\r
+ goto exit;\r
BYTE bVk = 0;\r
do {\r
- if (bVk == VK_SHIFT\r
- || bVk == VK_LSHIFT\r
- || bVk == VK_RSHIFT) {\r
+ if (bVk == VK_SHIFT || VK_LSHIFT || VK_RSHIFT)\r
continue;\r
- }\r
-\r
- if (IsDown(bVk, FALSE)) {\r
- return FALSE;\r
- }\r
+ if (IsDown(bVk, FALSE))\r
+ goto exit;\r
} while (++bVk);\r
- return TRUE;\r
+ if (!bRelease) {\r
+ bShift = TRUE;\r
+ return;\r
+ }\r
+ if (bShift)\r
+ CCommands::SetMark(FALSE);\r
+exit:\r
+ bShift = FALSE;\r
+ return;\r
}\r
\r
BOOL CXkeymacsDll::IsControl()\r