OSDN Git Service

Use GetKeyboardLayoutList instead of GetKeyboardLayout and drop the
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Tue, 12 Jul 2011 05:49:07 +0000 (14:49 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Tue, 12 Jul 2011 05:49:07 +0000 (14:49 +0900)
code using TSF.

xkeymacs/profile.cpp
xkeymacs/profile.h

index e503485..a3bcee5 100644 (file)
@@ -10,7 +10,7 @@
 #include <Imm.h>\r
 #include <Shlwapi.h>\r
 #include <TlHelp32.h>\r
-#include <msctf.h>\r
+#include <vector>\r
 \r
 #ifdef _DEBUG\r
 #undef THIS_FILE\r
@@ -1007,12 +1007,7 @@ void CProfile::InitApplicationList(CComboBox *const cApplicationList)
                }\r
        }\r
 \r
-       TCHAR szFilename[MAX_PATH];\r
-       TCHAR szDescription[WINDOW_TEXT_LENGTH];\r
-       GetIMEInfo(szFilename, szDescription);\r
-       szListItem.Format(IDS_APPLICATION_LIST_ITEM, szDescription, szFilename);\r
-       if (IsNotSameString(cApplicationList, szListItem))\r
-               cApplicationList->AddString(szListItem);\r
+       AddIMEInfo(cApplicationList);\r
 \r
        // Add Dialog\r
        cApplicationList->InsertString(0, CString(MAKEINTRESOURCE(IDS_DIALOG_TITLE)));\r
@@ -1022,46 +1017,23 @@ void CProfile::InitApplicationList(CComboBox *const cApplicationList)
        cApplicationList->SelectString(-1, CString(MAKEINTRESOURCE(IDS_DEFAULT_TITLE)));\r
 }\r
 \r
-void CProfile::GetIMEInfo(const LPTSTR szFilename, const LPTSTR szDescription)\r
+void CProfile::AddIMEInfo(CComboBox *cApplicationList)\r
 {\r
-       _tcscpy_s(szFilename, MAX_PATH, _T("IME")); // IDS_IME_FILE_NAME;\r
-       _tcscpy_s(szDescription, WINDOW_TEXT_LENGTH, _T("Input Method Editor"));\r
-       HKL hKL = GetKeyboardLayout(0);\r
-       if (!ImmIsIME(hKL))\r
+       const UINT n = GetKeyboardLayoutList(0, NULL);\r
+       if (!n)\r
                return;\r
-       TCHAR buf[MAX_PATH]; // larger than WINDOW_TEXT_LENGTH\r
-       if (ImmGetDescription(hKL, buf, WINDOW_TEXT_LENGTH)) {\r
-               _tcscpy_s(szDescription, WINDOW_TEXT_LENGTH, buf);\r
-               goto filename;\r
-       }\r
-       // try TSF\r
-       CoInitialize(NULL);\r
-       HRESULT hr;\r
-       ITfInputProcessorProfiles *pProfiles;\r
-       hr = CoCreateInstance(CLSID_TF_InputProcessorProfiles, NULL, CLSCTX_INPROC_SERVER, IID_ITfInputProcessorProfiles, reinterpret_cast<LPVOID*>(&pProfiles));\r
-       if (SUCCEEDED(hr)) {\r
-               const LANGID langid = GetUserDefaultLangID();\r
-               CLSID clsid;\r
-               GUID guid;\r
-               hr = pProfiles->GetDefaultLanguageProfile(langid, GUID_TFCAT_TIP_KEYBOARD, &clsid, &guid);\r
-               if (SUCCEEDED(hr)) {\r
-                       BSTR bstr;\r
-                       hr = pProfiles->GetLanguageProfileDescription(clsid, langid, guid, &bstr);\r
-                       if (SUCCEEDED(hr)) {\r
-#ifdef _MBCS\r
-                               WideCharToMultiByte(CP_ACP, 0, bstr, -1, szDescription, MAX_PATH, NULL, NULL);\r
-#else\r
-                               wcscpy_s(szDescription, WINDOW_TEXT_LENGTH, bstr);\r
-#endif\r
-                               SysFreeString(bstr);\r
-                       }\r
+       std::vector<HKL> hkls(n);\r
+       GetKeyboardLayoutList(n, &hkls[0]);\r
+       TCHAR szFileName[MAX_PATH];\r
+       TCHAR szDescription[WINDOW_TEXT_LENGTH];\r
+       for (std::vector<HKL>::const_iterator p = hkls.begin(); p != hkls.end(); ++p)\r
+               if (ImmGetDescription(*p, szDescription, WINDOW_TEXT_LENGTH) &&\r
+                               ImmGetIMEFileName(*p, szFileName, MAX_PATH)) {\r
+                       CString item;\r
+                       item.Format(IDS_APPLICATION_LIST_ITEM, szDescription, szFileName);\r
+                       if (IsNotSameString(cApplicationList, item))\r
+                               cApplicationList->AddString(item);\r
                }\r
-               pProfiles->Release();\r
-       }\r
-       CoUninitialize();\r
-filename:\r
-       if (ImmGetIMEFileName(hKL, buf, MAX_PATH))\r
-               _tcscpy_s(szFilename, MAX_PATH, buf);\r
 }\r
 \r
 void CProfile::GetTaskList()\r
index 9536e1e..ee02f30 100644 (file)
@@ -91,7 +91,7 @@ private:
        static CString WriteKeyBind(int nCommandType, int nKey);\r
        static void LoadRegistry();\r
        static void SaveRegistry();\r
-       static void GetIMEInfo(const LPTSTR szFilename, const LPTSTR szDescription);\r
+       static void AddIMEInfo(CComboBox *cApplicationList);\r
 };\r
 \r
 #endif // !defined(AFX_PROFILE_H__9415254D_4656_484B_A730_E02580D8A221__INCLUDED_)\r