\r
using namespace std;\r
\r
+bool isUIElementMgrSafe=false;\r
+\r
+\r
bool fetchRangeExtent(ITfRange* pRange, long* start, ULONG* length) {\r
HRESULT res=S_OK;\r
if(!pRange) return false;\r
hr = src->AdviseSink(IID_ITfActiveLanguageProfileNotifySink,\r
(ITfActiveLanguageProfileNotifySink*)this, &mLangProfCookie);\r
}\r
- if (hr == S_OK) {\r
- hr = mpThreadMgr->QueryInterface(IID_ITfUIElementMgr,(void**)&mpUIElementMgr);\r
- }\r
- if (hr == S_OK) {\r
- hr = src->AdviseSink(IID_ITfUIElementSink,\r
- (ITfUIElementSink*)this, &mUIElementCookie);\r
+ if(isUIElementMgrSafe) {\r
+ if (hr == S_OK) {\r
+ hr = mpThreadMgr->QueryInterface(IID_ITfUIElementMgr,(void**)&mpUIElementMgr);\r
+ }\r
+ if (hr == S_OK) {\r
+ hr = src->AdviseSink(IID_ITfUIElementSink,(ITfUIElementSink*)this, &mUIElementCookie);\r
+ }\r
}\r
src->Release();\r
src = NULL;\r
}\r
\r
void TSF_inProcess_initialize() {\r
+ //Allow use of UIElementMgr on Vista and higher (crashes things on XP)\r
+ if((GetVersion()&0xff)>5) isUIElementMgrSafe=true;\r
// Initialize TLS and use window hook to create TSF sink in each thread\r
gTsfIndex = TlsAlloc();\r
if (gTsfIndex != TLS_OUT_OF_INDEXES)\r