ReleaseKey(VK_CONTROL);\r
}\r
if (bIsAltDown) {\r
+ if (CUtils::IsVisualStudio2010())\r
+ CXkeymacsDll::SetHookAltRelease(); // Ignore Alt release\r
ReleaseKey(VK_MENU);\r
}\r
if (bIsShiftDown) {\r
AdKduAu('E', 'I');\r
return ERROR_SUCCESS; // i.e. return 0;\r
}\r
- if (CUtils::IsVisualStudioDotNet()) { // Ctrl + Click select a word on Visual Studio .NET\r
- ReleaseKey(VK_CONTROL);\r
- return ClickCaret();\r
+ if (CUtils::IsVisualStudio()) { // Ctrl + Click select a word on Visual Studio .NET\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ if (bIsCtrlDown)\r
+ ReleaseKey(VK_CONTROL);\r
+ DWORD res = ClickCaret();\r
+ if (bIsCtrlDown)\r
+ DepressKey(VK_CONTROL);\r
+ return res;\r
}\r
\r
return ClickCaret();\r
if (CUtils::IsFlash()\r
|| CUtils::IsSleipnir()) {\r
CdKduCu('O');\r
- } else if (CUtils::IsVisualStudioDotNet()) {\r
+ } else if (CUtils::IsVisualStudio()) {\r
AdKduAu('F', 'O', 'F');\r
} else {\r
AdKduAu('F', 'O');\r
AdKduAu('S', VK_RETURN);\r
} else if (CUtils::IsNami2000()) {\r
AdKduAu('D', 'F');\r
- } else if (CUtils::IsVisualStudioDotNet()) {\r
+ } else if (CUtils::IsVisualStudio()) {\r
AdKduAu('E', 'F', 'F');\r
} else if (CUtils::IsDirector()) {\r
AdKduAu('E', 'F', 'T');\r
}\r
\r
if (CUtils::IsVisualCpp()\r
- || CUtils::IsVisualStudioDotNet()) {\r
+ || CUtils::IsVisualStudio()) {\r
switch (direction) {\r
case FORWARD:\r
CdKduCu('I');\r
|| CUtils::IsOpenJane()\r
|| CUtils::IsStoryEditor()\r
|| CUtils::IsVisualBasicEditor()\r
- || CUtils::IsVisualStudioDotNet()\r
+ || CUtils::IsVisualStudio()\r
|| CUtils::IsWordpad()) {\r
bDirectionForward = 0;\r
} else if (CUtils::IsLotusNotes()\r
return !_tcsicmp(m_szApplicationName, _T("csh.exe"));\r
}\r
\r
-BOOL CUtils::IsVisualStudioDotNet()\r
+BOOL CUtils::IsVisualStudio()\r
{\r
- return !_tcsicmp(m_szApplicationName, _T("devenv.exe"));\r
+ if (IsVisualCpp() || CUtils::IsVisualBasic())\r
+ return FALSE;\r
+ TCHAR szWindowText[WINDOW_TEXT_LENGTH] = _T("");\r
+ GetWindowText(GetForegroundWindow(), szWindowText, sizeof(szWindowText));\r
+ return _tcsstr(szWindowText, _T(" - Microsoft Visual ")) != NULL;\r
+}\r
+\r
+BOOL CUtils::IsVisualStudio2010()\r
+{\r
+ if (IsVisualStudio()) {\r
+ TCHAR szWindowText[WINDOW_TEXT_LENGTH] = _T("");\r
+ GetWindowText(GetForegroundWindow(), szWindowText, sizeof(szWindowText));\r
+ return _tcsstr(szWindowText, _T("2010")) != NULL;\r
+ }\r
+ return FALSE;\r
}\r
\r
BOOL CUtils::IsAccess()\r
static BOOL IsVisualBasic();\r
static BOOL IsProject();\r
static BOOL IsAccess();\r
- static BOOL IsVisualStudioDotNet();\r
+ static BOOL IsVisualStudio();\r
+ static BOOL IsVisualStudio2010();\r
static BOOL IsCsh();\r
static BOOL IsSh();\r
static BOOL IsBash();\r
\r
#include "xkeymacsDll.h"\r
#pragma data_seg(".xkmcs")\r
+ BOOL CXkeymacsDll::m_bHookAltRelease = FALSE;\r
BOOL CXkeymacsDll::m_bEnableKeyboardHook = FALSE;\r
HHOOK CXkeymacsDll::m_hHookCallWnd = NULL;\r
HHOOK CXkeymacsDll::m_hHookCallWndRet = NULL;\r
return res;\r
}\r
\r
+void CXkeymacsDll::SetHookAltRelease()\r
+{\r
+ m_bHookAltRelease = TRUE;\r
+}\r
+\r
// set hooks\r
void CXkeymacsDll::SetHooks()\r
{\r
}\r
\r
if (lParam & BEING_RELEASED) {\r
- if (nKey == VK_MENU\r
- || nKey == VK_LWIN\r
- || nKey == VK_RWIN\r
- || nKey == VK_APPS\r
- || nKey == VK_LMENU\r
- || nKey == VK_RMENU) {\r
- for (int i = 0; i < MAX_COMMAND_TYPE; ++i) {\r
- if (Commands[m_Config.nCommandID[m_nApplicationID][i][nKey]].fCommand\r
- && (Commands[m_Config.nCommandID[m_nApplicationID][i][nKey]].fCommand != CCommands::MetaAlt\r
- || nKey != VK_MENU && nKey != VK_LMENU && nKey != VK_RMENU)) {\r
+ BOOL bAlt = FALSE;\r
+ switch (nKey) {\r
+ case VK_MENU:\r
+ case VK_LMENU:\r
+ case VK_RMENU:\r
+ bAlt = TRUE;\r
+ if (m_bHookAltRelease) {\r
+ m_bHookAltRelease = FALSE;\r
+ goto HOOK;\r
+ }\r
+ // pass through\r
+ case VK_LWIN:\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 && !(bAlt && func == CCommands::MetaAlt))\r
goto HOOK;\r
- }\r
}\r
}\r
-\r
if (nOneShotModifier[nKey]) {\r
ReleaseKey(nOneShotModifier[nKey]);\r
nOneShotModifier[nKey] = 0;\r
Kdu(nKey);\r
}\r
}\r
-\r
goto DO_NOTHING;\r
}\r
\r
static BOOL SaveConfig();\r
static BOOL LoadConfig();\r
static void SetM_xTip(const TCHAR *const szPath);\r
+ static void SetHookAltRelease();\r
static BOOL Get326Compatible();\r
static void Set326Compatible(int nApplicationID, BOOL b326Compatible);\r
static void SetCursorData(HCURSOR hEnable, HCURSOR hDisableTMP, HCURSOR hDisableWOCQ, HICON hDisable, BOOL bEnable);\r
CXkeymacsDll();\r
virtual ~CXkeymacsDll();\r
private:\r
+ static BOOL m_bHookAltRelease;\r
static TCHAR m_M_xTip[128];\r
static void InvokeM_x(const TCHAR* const szPath);\r
static void LogCallWndProcMessage(WPARAM wParam, LPARAM lParam);\r