Aric Stewart : msctf: Implement ITfInputProcessorProfiles:: GetDefaultLanguageProfile.
Alexandre Julliard
julliard at winehq.org
Fri Jun 26 09:47:18 CDT 2009
Module: wine
Branch: master
Commit: 6e7145d64e773a6cf104884a08869e36d11e36d0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6e7145d64e773a6cf104884a08869e36d11e36d0
Author: Aric Stewart <aric at codeweavers.com>
Date: Fri Jun 26 17:03:30 2009 +0900
msctf: Implement ITfInputProcessorProfiles::GetDefaultLanguageProfile.
---
dlls/msctf/inputprocessor.c | 41 +++++++++++++++++++++++++++++++++++++++--
dlls/msctf/msctf.c | 1 +
dlls/msctf/msctf_internal.h | 1 +
3 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/dlls/msctf/inputprocessor.c b/dlls/msctf/inputprocessor.c
index 765c3d5..239c9f9 100644
--- a/dlls/msctf/inputprocessor.c
+++ b/dlls/msctf/inputprocessor.c
@@ -47,6 +47,11 @@ static const WCHAR szwEnable[] = {'E','n','a','b','l','e',0};
static const WCHAR szwTipfmt[] = {'%','s','\\','%','s',0};
static const WCHAR szwFullLangfmt[] = {'%','s','\\','%','s','\\','%','s','\\','0','x','%','0','8','x','\\','%','s',0};
+static const WCHAR szwAssemblies[] = {'A','s','s','e','m','b','l','i','e','s',0};
+static const WCHAR szwDefault[] = {'D','e','f','a','u','l','t',0};
+static const WCHAR szwProfile[] = {'P','r','o','f','i','l','e',0};
+static const WCHAR szwDefaultFmt[] = {'%','s','\\','%','s','\\','0','x','%','0','8','x','\\','%','s',0};
+
typedef struct tagInputProcessorProfilesSink {
struct list entry;
union {
@@ -312,9 +317,41 @@ static HRESULT WINAPI InputProcessorProfiles_GetDefaultLanguageProfile(
ITfInputProcessorProfiles *iface, LANGID langid, REFGUID catid,
CLSID *pclsid, GUID *pguidProfile)
{
+ WCHAR fullkey[168];
+ WCHAR buf[39];
+ HKEY hkey;
+ DWORD count;
+ ULONG res;
InputProcessorProfiles *This = (InputProcessorProfiles*)iface;
- FIXME("STUB:(%p)\n",This);
- return E_NOTIMPL;
+
+ TRACE("%p) %x %s %p %p\n",This, langid, debugstr_guid(catid),pclsid,pguidProfile);
+
+ if (!catid || !pclsid || !pguidProfile)
+ return E_INVALIDARG;
+
+ StringFromGUID2(catid, buf, 39);
+ sprintfW(fullkey, szwDefaultFmt, szwSystemCTFKey, szwAssemblies, langid, buf);
+
+ if (RegOpenKeyExW(HKEY_CURRENT_USER, fullkey, 0, KEY_READ | KEY_WRITE,
+ &hkey ) != ERROR_SUCCESS)
+ return S_FALSE;
+
+ count = sizeof(buf);
+ res = RegQueryValueExW(hkey, szwDefault, 0, NULL, (LPBYTE)buf, &count);
+ if (res != ERROR_SUCCESS)
+ {
+ RegCloseKey(hkey);
+ return S_FALSE;
+ }
+ CLSIDFromString(buf,pclsid);
+
+ res = RegQueryValueExW(hkey, szwProfile, 0, NULL, (LPBYTE)buf, &count);
+ if (res == ERROR_SUCCESS)
+ CLSIDFromString(buf,pguidProfile);
+
+ RegCloseKey(hkey);
+
+ return S_OK;
}
static HRESULT WINAPI InputProcessorProfiles_SetDefaultLanguageProfile(
diff --git a/dlls/msctf/msctf.c b/dlls/msctf/msctf.c
index 9729ef3..b0a1c54 100644
--- a/dlls/msctf/msctf.c
+++ b/dlls/msctf/msctf.c
@@ -77,6 +77,7 @@ TfClientId processId = 0;
ITfCompartmentMgr *globalCompartmentMgr = NULL;
const WCHAR szwSystemTIPKey[] = {'S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','C','T','F','\\','T','I','P',0};
+const WCHAR szwSystemCTFKey[] = {'S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','C','T','F',0};
typedef HRESULT (*LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut);
diff --git a/dlls/msctf/msctf_internal.h b/dlls/msctf/msctf_internal.h
index eff30c9..928b046 100644
--- a/dlls/msctf/msctf_internal.h
+++ b/dlls/msctf/msctf_internal.h
@@ -63,4 +63,5 @@ extern HRESULT get_textservice_sink(TfClientId tid, REFCLSID iid, IUnknown** sin
extern HRESULT set_textservice_sink(TfClientId tid, REFCLSID iid, IUnknown* sink);
extern const WCHAR szwSystemTIPKey[];
+extern const WCHAR szwSystemCTFKey[];
#endif /* __WINE_MSCTF_I_H */
More information about the wine-cvs
mailing list