// CUtils::Log(_T("i: %x, %d, %d, %d, %d, %d, %d, %d, %d"), bVk,\r
// IsDown(VK_CONTROL), IsDown(VK_CONTROL, FALSE), IsDepressedModifier(CCommands::C_), IsDepressedModifier(CCommands::C_, FALSE),\r
// IsDown(VK_MENU), IsDown(VK_MENU, FALSE), IsDepressedModifier(CCommands::MetaAlt), IsDepressedModifier(CCommands::MetaAlt, FALSE));\r
- Original(GetModifierState(), bVk, 1);\r
+ SetOriginal(GetModifierState(), bVk);\r
}\r
DoKeybd_event(bVk, 0);\r
}\r
{\r
ASSERT(0 <= wParam && wParam <= UCHAR_MAX);\r
\r
- int nCommandType = NONE;\r
- BYTE nKey = (BYTE)wParam;\r
+ UINT nCommandType = NONE;\r
+ BYTE nOrigKey = (BYTE)wParam;\r
\r
static BOOL bLocked = FALSE;\r
static const BYTE RECURSIVE_KEY = 0x07;\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"), nCode, nKey, lParam, IsDll64, Is64ProcessHwnd(GetForegroundWindow()));\r
+// CUtils::Log(_T("nCode = %#x, nKey = %#x, lParam = %p, %d, %d"), nOrigCode, nKey, lParam, IsDll64, Is64ProcessHwnd(GetForegroundWindow()));\r
\r
if (Is64ProcessHwnd(GetForegroundWindow()) != IsDll64 || CUtils::IsXkeymacs())\r
return CallNextHookEx(g_hHookKeyboard, nCode, wParam, lParam);\r
goto DO_NOTHING;\r
}\r
\r
- if (nKey == RECURSIVE_KEY) {\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
goto HOOK_RECURSIVE_KEY;\r
} else {\r
\r
{\r
static BOOL bShift = FALSE;\r
- if (IsDepressedShiftKeyOnly(nKey)) {\r
+ if (IsDepressedShiftKeyOnly(nOrigKey)) {\r
if (lParam & BEING_RELEASED) {\r
if (bShift) {\r
CCommands::SetMark(FALSE);\r
}\r
}\r
\r
+ BYTE nKey = nOrigKey;\r
switch (nKey) {\r
case VK_CONTROL:\r
if (lParam & EXTENDED_KEY) {\r
}\r
\r
if (lParam & BEING_RELEASED) {\r
- BOOL bAlt = FALSE;\r
- switch (nKey) {\r
+ switch (nOrigKey) {\r
case VK_MENU:\r
- case VK_LMENU:\r
- case VK_RMENU:\r
- bAlt = TRUE;\r
if (m_nHookAltRelease) {\r
if (m_nHookAltRelease & ~HOOK_ALT_LATER)\r
m_nHookAltRelease--;\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 && !(bAlt && func == CCommands::MetaAlt))\r
+ if (func && !(nOrigKey == VK_MENU && func == CCommands::MetaAlt))\r
goto HOOK;\r
}\r
}\r
if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == NULL\r
&& m_Config.nFunctionID[m_nApplicationID][nCommandType][nKey] < 0) {\r
if (m_Config.bIgnoreUndefinedMetaCtrl[m_nApplicationID]) {\r
- if (Original(CONTROL, nKey)) {\r
- Original(CONTROL, nKey, -1);\r
+ if (CheckOriginal(CONTROL, nKey)) {\r
goto DO_NOTHING;\r
}\r
CCommands::Reset(GOTO_HOOK);\r
}\r
}\r
\r
- {\r
- BYTE nKey = (BYTE)wParam; // VK_CONTROL is needed instead of VK_RCONTROL and VK_LCONTROL in this block just for Original()\r
- int nVirtualCommandType = GetModifierState(FALSE);\r
- if (nKey == VK_CONTROL)\r
- nVirtualCommandType &= ~CONTROL;\r
- if (nKey == VK_MENU)\r
- nVirtualCommandType &= ~META;\r
- if (Original(nVirtualCommandType, nKey)) {\r
- Original(nVirtualCommandType, nKey, -1);\r
- goto DO_NOTHING;\r
- }\r
+ int nVirtualCommandType = GetModifierState(FALSE);\r
+ if (nOrigKey == VK_CONTROL)\r
+ nVirtualCommandType &= ~CONTROL;\r
+ if (nOrigKey == VK_MENU)\r
+ nVirtualCommandType &= ~META;\r
+ if (CheckOriginal(nVirtualCommandType, nOrigKey)) {\r
+ goto DO_NOTHING;\r
}\r
\r
if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::EnableOrDisableXKeymacs) {\r
}\r
\r
if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType & ~CONTROL][nKey]].fCommand == CCommands::OneShotModifierCtrl) {\r
- nOneShotModifier[nKey] = VK_LCONTROL;\r
- DepressKey(nOneShotModifier[nKey]);\r
+ nOneShotModifier[nKey] = VK_CONTROL;\r
+ DepressKey(VK_CONTROL);\r
bCherryOneShotModifier = TRUE;\r
goto HOOK;\r
} else if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::OneShotModifierCtrlRepeat) {\r
- nOneShotModifier[nKey] = VK_LCONTROL;\r
- DepressKey(nOneShotModifier[nKey]);\r
+ nOneShotModifier[nKey] = VK_CONTROL;\r
+ DepressKey(VK_CONTROL);\r
bCherryOneShotModifier = TRUE;\r
goto HOOK;\r
} else if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType & ~CONTROL][nKey]].fCommand == CCommands::OneShotModifierCtrlRepeat) {\r
- ReleaseKey(nOneShotModifier[nKey]);\r
+ ReleaseKey(VK_CONTROL);\r
bCherryOneShotModifier = FALSE;\r
Kdu(nKey);\r
goto HOOK;\r
} else if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType & ~META][nKey]].fCommand == CCommands::OneShotModifierAlt) {\r
- nOneShotModifier[nKey] = VK_LMENU;\r
- DepressKey(nOneShotModifier[nKey]);\r
+ nOneShotModifier[nKey] = VK_MENU;\r
+ DepressKey(VK_MENU);\r
bCherryOneShotModifier = TRUE;\r
goto HOOK;\r
} else if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::OneShotModifierAltRepeat) {\r
- nOneShotModifier[nKey] = VK_LMENU;\r
- DepressKey(nOneShotModifier[nKey]);\r
+ nOneShotModifier[nKey] = VK_MENU;\r
+ DepressKey(VK_MENU);\r
bCherryOneShotModifier = TRUE;\r
goto HOOK;\r
} else if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType & ~META][nKey]].fCommand == CCommands::OneShotModifierAltRepeat) {\r
- ReleaseKey(nOneShotModifier[nKey]);\r
+ ReleaseKey(VK_MENU);\r
bCherryOneShotModifier = FALSE;\r
Kdu(nKey);\r
goto HOOK;\r
} else if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType & ~SHIFT][nKey]].fCommand == CCommands::OneShotModifierShift) {\r
nOneShotModifier[nKey] = VK_SHIFT;\r
- DepressKey(nOneShotModifier[nKey]);\r
+ DepressKey(VK_SHIFT);\r
bCherryOneShotModifier = TRUE;\r
goto HOOK;\r
} else if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::OneShotModifierShiftRepeat) {\r
nOneShotModifier[nKey] = VK_SHIFT;\r
- DepressKey(nOneShotModifier[nKey]);\r
+ DepressKey(VK_SHIFT);\r
bCherryOneShotModifier = TRUE;\r
goto HOOK;\r
} else if (Commands[m_Config.nCommandID[m_nApplicationID][nCommandType & ~SHIFT][nKey]].fCommand == CCommands::OneShotModifierShiftRepeat) {\r
- ReleaseKey(nOneShotModifier[nKey]);\r
+ ReleaseKey(VK_SHIFT);\r
bCherryOneShotModifier = FALSE;\r
Kdu(nKey);\r
goto HOOK;\r
}\r
\r
if (!Commands[m_Config.nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand) {\r
- if (nKey == VK_CONTROL\r
- || nKey == VK_LCONTROL\r
- || nKey == VK_RCONTROL\r
- || nKey == VK_MENU\r
- || nKey == VK_LMENU\r
- || nKey == VK_RMENU\r
- || nKey == VK_SHIFT\r
- || nKey == VK_LSHIFT\r
- || nKey == VK_RSHIFT) {\r
+ if (nOrigKey == VK_CONTROL || nOrigKey == VK_MENU || nOrigKey == VK_SHIFT) {\r
goto DO_NOTHING;\r
}\r
\r
return pSnap->GetNext();\r
}\r
\r
-void CXkeymacsDll::Original(int nCommandType, BYTE bVk, int nOriginal)\r
+void CXkeymacsDll::SetOriginal(UINT nCommandType, BYTE bVk)\r
{\r
- nCommandType &= ~SHIFT;\r
-\r
- switch (bVk) {\r
- case VK_CONTROL:\r
- bVk = VK_LCONTROL;\r
- break;\r
- case VK_MENU:\r
- bVk = VK_LMENU;\r
- break;\r
- case VK_SHIFT:\r
- bVk = VK_LSHIFT;\r
- break;\r
- default:\r
- break;\r
- }\r
-\r
- m_nOriginal[nCommandType][bVk] += nOriginal;\r
+ m_nOriginal[nCommandType & ~SHIFT][bVk]++;\r
}\r
\r
-int CXkeymacsDll::Original(int nCommandType, BYTE bVk)\r
+int CXkeymacsDll::CheckOriginal(UINT nCommandType, BYTE bVk)\r
{\r
nCommandType &= ~SHIFT;\r
-\r
- switch (bVk) {\r
- case VK_CONTROL:\r
- bVk = VK_LCONTROL;\r
- break;\r
- case VK_MENU:\r
- bVk = VK_LMENU;\r
- break;\r
- case VK_SHIFT:\r
- bVk = VK_LSHIFT;\r
- break;\r
- default:\r
- break;\r
- }\r
-\r
- return m_nOriginal[nCommandType][bVk];\r
+ if (m_nOriginal[nCommandType][bVk])\r
+ return m_nOriginal[nCommandType][bVk]--;\r
+ return 0;\r
}\r
\r
void CXkeymacsDll::IncreaseKillRingIndex(int nKillRing)\r