OSDN Git Service

Rewrite CXkeymacsDll::InitKeyboardProc.
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Tue, 21 Jun 2011 07:01:03 +0000 (16:01 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Tue, 21 Jun 2011 07:01:03 +0000 (16:01 +0900)
Fix a bug where VK_END is wrongly pressed on find dialogs.

xkeymacsdll/xkeymacsdll.cpp
xkeymacsdll/xkeymacsdll.h

index 7fb7dbf..4ccb6d0 100644 (file)
@@ -573,64 +573,31 @@ void CXkeymacsDll::Kdu(BYTE bVk, DWORD n, BOOL bOriginal)
 \r
 void CXkeymacsDll::InitKeyboardProc(BOOL bImeComposition)\r
 {\r
-       if (CUtils::IsFindDialog()) {\r
-               static BOOL bImeCompositionOld = FALSE;\r
-               if (!bImeComposition\r
-                && bImeCompositionOld) {\r
-                       DepressKey(VK_END);\r
-                       ReleaseKey(VK_END);\r
-               }\r
-               bImeCompositionOld = bImeComposition;\r
-       }\r
-\r
        CUtils::SetApplicationName(bImeComposition);\r
-\r
        if (_tcsnicmp(m_Config.szSpecialApp[m_nApplicationID], CUtils::GetApplicationName(), 0xF) || !IsMatchWindowText(m_Config.szWindowText[m_nApplicationID])) {     // PROCESSENTRY32 has only 0xF bytes of Name\r
                m_nApplicationID = -1;\r
-\r
-               for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
-                       if (!_tcsnicmp(m_Config.szSpecialApp[nApplicationID], CUtils::GetApplicationName(), 0xF) && IsMatchWindowText(m_Config.szWindowText[nApplicationID])) {\r
-\r
-                               if (m_nApplicationID < 0\r
-                                || CUtils::GetWindowTextType(m_Config.szWindowText[m_nApplicationID]) < CUtils::GetWindowTextType(m_Config.szWindowText[nApplicationID])\r
-                                || CUtils::GetWindowTextType(m_Config.szWindowText[m_nApplicationID]) == CUtils::GetWindowTextType(m_Config.szWindowText[nApplicationID])\r
-                                && _tcscmp(m_Config.szWindowText[m_nApplicationID], m_Config.szWindowText[nApplicationID]) <= 0) {\r
-                                       m_nApplicationID = nApplicationID;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if (m_nApplicationID < 0) {\r
-                       for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
-                               if (!_tcsicmp(m_Config.szSpecialApp[nApplicationID], _T("Default"))) {\r
-                                       m_nApplicationID = nApplicationID;\r
-                                       break;\r
-                               }\r
-                       }\r
-\r
-                       if (m_nApplicationID < 0) {\r
-                               m_nApplicationID = 0;\r
+               for (int nAppID = 0; nAppID < MAX_APP; nAppID++) {\r
+                       if (_tcsnicmp(m_Config.szSpecialApp[nAppID], CUtils::GetApplicationName(), 0xF) || !IsMatchWindowText(m_Config.szWindowText[nAppID]))\r
+                               continue;\r
+                       if (m_nApplicationID < 0)\r
+                               m_nApplicationID = nAppID;\r
+                       else {\r
+                               const LPCSTR curText = m_Config.szWindowText[m_nApplicationID];\r
+                               const LPCSTR newText = m_Config.szWindowText[nAppID];\r
+                               const int curType = CUtils::GetWindowTextType(curText);\r
+                               const int newType = CUtils::GetWindowTextType(newText);\r
+                               if (curType < newType || curType == newType && _tcscmp(curText, newText) <= 0)\r
+                                       m_nApplicationID = nAppID;\r
                        }\r
                }\r
+               if (m_nApplicationID < 0)\r
+                       m_nApplicationID = GetAppID(_T("Default"), 0);\r
        }\r
-\r
-       if (m_Config.nSettingStyle[m_nApplicationID] != SETTING_DISABLE\r
-        && (_tcsicmp(m_Config.szSpecialApp[m_nApplicationID], _T("Default")) || !CUtils::IsDefaultIgnoreApplication())\r
-        && !bImeComposition\r
-        && CUtils::IsDialog()) {\r
+       if (m_Config.nSettingStyle[m_nApplicationID] != SETTING_DISABLE &&\r
+                       (_tcsicmp(m_Config.szSpecialApp[m_nApplicationID], _T("Default")) || !CUtils::IsDefaultIgnoreApplication()) &&\r
+                       !bImeComposition && CUtils::IsDialog() && m_Config.bUseDialogSetting[m_nApplicationID])\r
                // Use Dialog Setting\r
-               if (m_Config.bUseDialogSetting[m_nApplicationID]) {\r
-                       int nOriginalApplicationID = m_nApplicationID;\r
-                       for (m_nApplicationID = 0; m_nApplicationID < MAX_APP; ++m_nApplicationID) {\r
-                               if (!_tcsicmp(m_Config.szSpecialApp[m_nApplicationID], _T("Dialog"))) {\r
-                                       break;\r
-                               }\r
-                       }\r
-                       if (m_nApplicationID == MAX_APP) {\r
-                               m_nApplicationID = nOriginalApplicationID;\r
-                       }\r
-               }\r
-       }\r
+               m_nApplicationID = GetAppID(_T("Dialog"), m_nApplicationID);\r
 \r
        ICONMSG msg[3] = {\r
                {CX_ICON, OFF_ICON, ""},\r
@@ -643,7 +610,14 @@ void CXkeymacsDll::InitKeyboardProc(BOOL bImeComposition)
        CCommands::Reset();\r
 }\r
 \r
-// emulate emacs       // cf virtual-key code\r
+int CXkeymacsDll::GetAppID(const LPCSTR szName, const int fallback)\r
+{\r
+       for (int i = 0; i < MAX_APP; i++)\r
+               if (!_tcsicmp(m_Config.szSpecialApp[i], szName))\r
+                       return i;\r
+       return fallback;\r
+}\r
+\r
 LRESULT CALLBACK CXkeymacsDll::KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)\r
 {\r
        ASSERT(0 <= wParam && wParam <= UCHAR_MAX);\r
index 62700ee..f27bdda 100644 (file)
@@ -137,6 +137,7 @@ private:
        static LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);\r
        static LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam);\r
        static LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam);\r
+       static int GetAppID(const LPCSTR szName, const int fallback);\r
        static KeyBind ParseKey(LPCTSTR& def);\r
        static BYTE a2v(TCHAR nAscii);\r
        static BOOL IsShift(TCHAR nAscii);\r