/**************************************************************************** MODEBIAS.CPP : Handling ModeBias. Sync conversion mode with Cicero's ModeBias History: 2-JUL-2000 CSLim Created ****************************************************************************/ #include "private.h" #include "korimx.h" #include "immxutil.h" #include "helpers.h" /*--------------------------------------------------------------------------- CKorIMX::SyncModeBias ---------------------------------------------------------------------------*/ BOOL CKorIMX::CheckModeBias(TfEditCookie ec, ITfContext *pic, ITfRange *pSelection) { BOOL fChanged = fFalse; ITfReadOnlyProperty *pProp = NULL; ITfRange* pRange = NULL; VARIANT var; CICPriv* pPriv; HRESULT hr; if (pSelection == NULL) return fFalse; if (FAILED(hr = pic->GetAppProperty(GUID_PROP_MODEBIAS, &pProp))) return fFalse; pRange = pSelection; QuickVariantInit(&var); hr = pProp->GetValue(ec, pRange, &var); pProp->Release(); if (!SUCCEEDED(hr)) goto lEnd; Assert(var.vt == VT_I4); if (var.vt != VT_I4) goto lEnd; if ((pPriv = GetInputContextPriv(pic)) == NULL) goto lEnd; // check if changed if (pPriv->GetModeBias() != (TfGuidAtom)var.lVal) { GUID guidModeBias; fChanged = TRUE; // Keep modebias update pPriv->SetModeBias(var.lVal); // ISSUE: !!! WARNING !!! // Yutakas said, Aimm should handle this. // Kor IME set Open status automatically when conversion mode to Hangul or Full shape. // GUID_COMPARTMENT_KEYBOARD_OPENCLOSE has higher priority than modebias GetGUIDFromGUIDATOM(&m_libTLS, (TfGuidAtom)var.lVal, &guidModeBias); // Multiple bias will bot be allowed. // GUID_MODEBIAS_NONE == ignore modebias if (IsEqualGUID(guidModeBias, GUID_MODEBIAS_NONE)) goto lEnd; // Office 10 #182239 if (IsEqualGUID(guidModeBias, GUID_MODEBIAS_HANGUL)) { Assert(IsOn(pic) == fTrue); SetConvMode(pic, TIP_HANGUL_MODE); goto lEnd; } if (IsEqualGUID(guidModeBias, GUID_MODEBIAS_FULLWIDTHHANGUL)) { Assert(IsOn(pic) == fFalse); SetConvMode(pic, TIP_HANGUL_MODE | TIP_JUNJA_MODE); goto lEnd; } if (IsEqualGUID(guidModeBias, GUID_MODEBIAS_FULLWIDTHALPHANUMERIC)) { Assert(IsOn(pic) == fTrue); SetConvMode(pic, TIP_JUNJA_MODE); goto lEnd; } if (IsEqualGUID(guidModeBias, GUID_MODEBIAS_HALFWIDTHALPHANUMERIC)) { Assert(IsOn(pic) == fFalse); SetConvMode(pic, TIP_ALPHANUMERIC_MODE); goto lEnd; } } lEnd: VariantClear(&var); return fChanged; } /*--------------------------------------------------------------------------- CKorIMX::InitializeModeBias ---------------------------------------------------------------------------*/ BOOL CKorIMX::InitializeModeBias(TfEditCookie ec, ITfContext *pic) { ITfRange* pSelection; if (pic == NULL) return fFalse; // // current selection is in the pRangeIP? // if (FAILED(GetSelectionSimple(ec, pic, &pSelection))) return fFalse; // // check mode bias // CheckModeBias(ec, pic, pSelection); SafeRelease(pSelection); // release it return fTrue; } /*--------------------------------------------------------------------------- CKorIMX::CheckModeBias This will submit async call of InitializeModeBias ---------------------------------------------------------------------------*/ void CKorIMX::CheckModeBias(ITfContext* pic) { CEditSession2 *pes; ESSTRUCT ess; HRESULT hr; ESStructInit(&ess, ESCB_INIT_MODEBIAS); if ((pes = new CEditSession2(pic, this, &ess, _EditSessionCallback2)) != NULL) { pes->Invoke(ES2_READONLY | ES2_SYNC, &hr); pes->Release(); } }