OSDN Git Service

Separate AppName::SetIMEState from CXkeymacsDll::InitKeyboardProc.
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sun, 22 Jan 2012 18:07:40 +0000 (03:07 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sun, 22 Jan 2012 18:07:40 +0000 (03:07 +0900)
Make the handler of WM_SETTEXT not change the IME state.

xkeymacsdll/AppName.cpp
xkeymacsdll/AppName.h
xkeymacsdll/xkeymacsdll.cpp
xkeymacsdll/xkeymacsdll.h

index 4aeddf3..8cd497e 100644 (file)
@@ -37,6 +37,7 @@ LPCTSTR AppName::GetAppName()
 \r
 void AppName::SetIMEState(bool on)\r
 {\r
+       AppName::Init();\r
        m_IMEState = on;\r
        if (!on)\r
                return;\r
@@ -51,6 +52,11 @@ void AppName::SetIMEState(bool on)
        _tcscpy_s(m_IMEName, m_FallbackIMEName);\r
 }\r
 \r
+bool AppName::GetIMEState()\r
+{\r
+       return m_IMEState;\r
+}\r
+\r
 // The code starting here is derived from work by co <cogood\81\97gmail.com>.\r
 void AppName::CorrectAppName(TCHAR (&text)[WINDOW_TEXT_LENGTH], TCHAR (&appName)[CLASS_NAME_LENGTH])\r
 {\r
@@ -128,7 +134,7 @@ bool AppName::IsCmdExe(const CString& text)
                _T("syswow64\\cmd.exe")\r
        };\r
        for (int i = 0; i < _countof(prompts); ++i)\r
-               if (text.Right(_tcslen(prompts[i])).CompareNoCase(prompts[i]) == 0)\r
+               if (text.Right(static_cast<int>(_tcslen(prompts[i]))).CompareNoCase(prompts[i]) == 0)\r
                        return true;\r
        return false;\r
 }\r
index 500bea3..3126a6c 100644 (file)
@@ -8,6 +8,7 @@ public:
        static void Init();\r
        static LPCTSTR GetAppName();\r
        static void SetIMEState(bool on);\r
+       static bool GetIMEState();\r
        static void CorrectAppName(TCHAR (&text)[WINDOW_TEXT_LENGTH], TCHAR (&appName)[CLASS_NAME_LENGTH]);\r
        static bool IsConsole();\r
        static bool Match(LPCTSTR name);\r
index d4346cc..9a74713 100644 (file)
@@ -248,20 +248,24 @@ LRESULT CALLBACK CXkeymacsDll::CallWndProc(int nCode, WPARAM wParam, LPARAM lPar
                const CWPSTRUCT *cwps = reinterpret_cast<CWPSTRUCT *>(lParam);\r
                switch (cwps->message) {\r
                case WM_IME_STARTCOMPOSITION:\r
-                       InitKeyboardProc(true);\r
+                       AppName::SetIMEState(true);\r
+                       InitKeyboardProc();\r
                        break;\r
                case WM_IME_ENDCOMPOSITION:\r
-                       InitKeyboardProc(false);\r
+                       AppName::SetIMEState(false);\r
+                       InitKeyboardProc();\r
                        break;\r
                case WM_SETFOCUS:\r
                        if (cwps->hwnd == GetForegroundWindow()) {\r
-                               InitKeyboardProc(false);\r
+                               AppName::SetIMEState(false);\r
+                               InitKeyboardProc();\r
                                ShowKeyboardHookState();\r
                        }\r
                        break;\r
                case WM_NCACTIVATE:\r
                        if (cwps->wParam && cwps->hwnd == GetForegroundWindow()) {\r
-                               InitKeyboardProc(false);\r
+                               AppName::SetIMEState(false);\r
+                               InitKeyboardProc();\r
                                ShowKeyboardHookState();\r
                        }\r
                        break;\r
@@ -278,7 +282,7 @@ LRESULT CALLBACK CXkeymacsDll::CallWndRetProc(int nCode, WPARAM wParam, LPARAM l
                switch (cwprets->message) {\r
                case WM_SETTEXT:\r
                        if (cwprets->hwnd == GetForegroundWindow())\r
-                               InitKeyboardProc(false);\r
+                               InitKeyboardProc();\r
                        break;\r
                case WM_SETCURSOR:\r
                        DoSetCursor();\r
@@ -295,10 +299,12 @@ LRESULT CALLBACK CXkeymacsDll::GetMsgProc(int nCode, WPARAM wParam, LPARAM lPara
                const MSG *msg = reinterpret_cast<MSG *>(lParam);\r
                switch (msg->message) {\r
                case WM_IME_STARTCOMPOSITION:\r
-                       InitKeyboardProc(true);\r
+                       AppName::SetIMEState(true);\r
+                       InitKeyboardProc();\r
                        break;\r
                case WM_IME_ENDCOMPOSITION:\r
-                       InitKeyboardProc(false);\r
+                       AppName::SetIMEState(false);\r
+                       InitKeyboardProc();\r
                        break;\r
                }\r
        }\r
@@ -312,18 +318,17 @@ LRESULT CALLBACK CXkeymacsDll::ShellProc(int nCode, WPARAM wParam, LPARAM lParam
                TCHAR className[CLASS_NAME_LENGTH];\r
                GetClassName(reinterpret_cast<HWND>(wParam), className, CLASS_NAME_LENGTH);\r
                if (!_tcsicmp(className, _T("ConsoleWindowClass"))) {\r
-                       InitKeyboardProc(false);\r
+                       AppName::SetIMEState(false);\r
+                       InitKeyboardProc();\r
                        ShowKeyboardHookState();\r
                }\r
        }\r
        return CallNextHookEx(NULL, nCode, wParam, lParam);\r
 }\r
 \r
-void CXkeymacsDll::InitKeyboardProc(bool imeState)\r
+void CXkeymacsDll::InitKeyboardProc()\r
 {\r
        AppName::Init();\r
-       AppName::SetIMEState(imeState);\r
-\r
        if (m_CurrentConfig == NULL ||\r
                        _tcsnicmp(m_CurrentConfig->AppName, AppName::GetAppName(), 0xF) ||      // PROCESSENTRY32 has only 0xF bytes of Name\r
                        !CUtils::IsMatchWindowText(m_CurrentConfig->WindowText)) {\r
@@ -348,7 +353,7 @@ void CXkeymacsDll::InitKeyboardProc(bool imeState)
        }\r
        if (m_CurrentConfig->SettingStyle != SETTING_DISABLE &&\r
                        (_tcsicmp(m_CurrentConfig->AppName, _T("Default")) || !CUtils::IsDefaultIgnoreApplication()) &&\r
-                       !imeState && CUtils::IsDialog() && m_CurrentConfig->UseDialogSetting)\r
+                       !AppName::GetIMEState() && CUtils::IsDialog() && m_CurrentConfig->UseDialogSetting)\r
                // Use Dialog Setting\r
                m_CurrentConfig = GetAppConfig(_T("Dialog"), m_CurrentConfig);\r
        m_CmdID = m_CurrentConfig->CmdID;\r
index 82187e9..7839dc8 100644 (file)
@@ -69,7 +69,7 @@ private:
        static LRESULT CALLBACK CallWndRetProc(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 void InitKeyboardProc(bool imeState);\r
+       static void InitKeyboardProc();\r
        static AppConfig* GetAppConfig(LPCTSTR szName, AppConfig* fallback);\r
        static BOOL m_bRightShift;\r
        static BOOL m_bRightControl;\r