[MSUTB][SDK] Add CLBarItemBase (#6444)

Supporting Language Bar...
JIRA issue: CORE-19363
- Implement CLBarItemBase class.
- Add TF_E_... flags to "msctf.idl".
This commit is contained in:
Katayama Hirofumi MZ 2024-02-06 12:21:46 +09:00 committed by GitHub
parent 9e43518da5
commit 34705d1a5d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 160 additions and 4 deletions

View file

@ -830,6 +830,40 @@ public:
STDMETHOD_(BOOL, OnDelayMsg)(UINT uMsg) override;
};
/***********************************************************************/
class CLBarItemBase : public ITfLangBarItem
{
protected:
DWORD m_dwItemStatus;
TF_LANGBARITEMINFO m_NewUIInfo;
WCHAR m_szToolTipText[256];
LONG m_cRefs;
ITfLangBarItemSink *m_pLangBarItemSink;
public:
CLBarItemBase();
virtual ~CLBarItemBase();
HRESULT ShowInternal(BOOL bShow, BOOL bUpdate);
void InitNuiInfo(
REFIID clsidService,
REFGUID guidItem,
DWORD dwStyle,
DWORD ulSort,
LPCWSTR Source);
HRESULT AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie);
HRESULT UnadviseSink(DWORD dwCookie);
// ITfLangBarItem methods
STDMETHOD(GetInfo)(TF_LANGBARITEMINFO *pInfo) override;
STDMETHOD(GetStatus)(DWORD *pdwStatus) override;
STDMETHOD(Show)(BOOL fShow) override;
STDMETHOD(GetTooltipString)(BSTR *pbstrToolTip) override;
};
/***********************************************************************
* CUTBLangBarDlg
*/
@ -2362,6 +2396,110 @@ CTrayIconWnd::_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return 0;
}
/***********************************************************************
* CLBarItemBase
*/
CLBarItemBase::CLBarItemBase()
{
m_dwItemStatus = 0;
m_szToolTipText[0] = 0;
m_cRefs = 1;
m_pLangBarItemSink = NULL;
}
CLBarItemBase::~CLBarItemBase()
{
if (m_pLangBarItemSink)
m_pLangBarItemSink->Release();
}
HRESULT
CLBarItemBase::AdviseSink(
REFIID riid,
IUnknown *punk,
DWORD *pdwCookie)
{
if (IsEqualIID(riid, IID_ITfLangBarItemSink) || m_pLangBarItemSink)
return TF_E_NOOBJECT;
HRESULT hr = punk->QueryInterface(IID_ITfLangBarItemSink, (void **)&m_pLangBarItemSink);
if (SUCCEEDED(hr))
*pdwCookie = 0x80000001;
return hr;
}
HRESULT CLBarItemBase::UnadviseSink(DWORD dwCookie)
{
if (dwCookie != 0x80000001)
return E_FAIL;
if (!m_pLangBarItemSink)
return E_UNEXPECTED;
m_pLangBarItemSink->Release();
m_pLangBarItemSink = NULL;
return S_OK;
}
void
CLBarItemBase::InitNuiInfo(
REFIID clsidService,
REFGUID guidItem,
DWORD dwStyle,
DWORD ulSort,
LPCWSTR Source)
{
m_NewUIInfo.clsidService = clsidService;
m_NewUIInfo.guidItem = guidItem;
m_NewUIInfo.dwStyle = dwStyle;
m_NewUIInfo.ulSort = ulSort;
StringCchCopyW(m_NewUIInfo.szDescription, _countof(m_NewUIInfo.szDescription), Source);
}
HRESULT
CLBarItemBase::ShowInternal(BOOL bShow, BOOL bUpdate)
{
DWORD dwOldStatus = m_dwItemStatus;
if (bShow)
m_dwItemStatus &= ~0x1;
else
m_dwItemStatus |= 0x1;
if (bUpdate && (dwOldStatus != m_dwItemStatus))
{
if (m_pLangBarItemSink)
m_pLangBarItemSink->OnUpdate(TF_LBI_STATUS);
}
return S_OK;
}
STDMETHODIMP CLBarItemBase::GetInfo(TF_LANGBARITEMINFO *pInfo)
{
CopyMemory(pInfo, &m_NewUIInfo, sizeof(*pInfo));
return S_OK;
}
STDMETHODIMP CLBarItemBase::GetStatus(DWORD *pdwStatus)
{
*pdwStatus = m_dwItemStatus;
return S_OK;
}
STDMETHODIMP CLBarItemBase::Show(BOOL fShow)
{
return ShowInternal(fShow, TRUE);
}
STDMETHODIMP CLBarItemBase::GetTooltipString(BSTR *pbstrToolTip)
{
if (!pbstrToolTip)
return E_INVALIDARG;
BSTR bstr = ::SysAllocString(m_szToolTipText);
*pbstrToolTip = bstr;
return bstr ? S_OK : E_OUTOFMEMORY;
}
/***********************************************************************
* GetLibTls (MSUTB.@)
*

View file

@ -23,10 +23,28 @@ import "textstor.idl";
import "ctfutb.idl";
#endif
cpp_quote("#define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)")
cpp_quote("#define TF_E_DISCONNECTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0504)")
cpp_quote("#define TF_E_ALREADY_EXISTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0506)")
cpp_quote("#define TF_E_NOLOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)")
cpp_quote("#define TF_E_ALREADY_EXISTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0506)")
cpp_quote("#define TF_E_COMPOSITION_REJECTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0508)")
cpp_quote("#define TF_E_DISCONNECTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0504)")
cpp_quote("#define TF_E_EMPTYCONTEXT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0509)")
cpp_quote("#define TF_E_FORMAT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x020A)")
cpp_quote("#define TF_E_INVALIDPOINT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0207)")
cpp_quote("#define TF_E_INVALIDPOS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200)")
cpp_quote("#define TF_E_INVALIDVIEW MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0505)")
cpp_quote("#define TF_E_LOCKED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0500)")
cpp_quote("#define TF_E_NOINTERFACE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0204)")
cpp_quote("#define TF_E_NOLAYOUT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0206)")
cpp_quote("#define TF_E_NOLOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)")
cpp_quote("#define TF_E_NOOBJECT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202)")
cpp_quote("#define TF_E_NOPROVIDER MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0503)")
cpp_quote("#define TF_E_NOSELECTION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0205)")
cpp_quote("#define TF_E_NOSERVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0203)")
cpp_quote("#define TF_E_NOTOWNEDRANGE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0502)")
cpp_quote("#define TF_E_RANGE_NOT_COVERED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0507)")
cpp_quote("#define TF_E_READONLY MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0209)")
cpp_quote("#define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)")
cpp_quote("#define TF_E_SYNCHRONOUS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0208)")
cpp_quote("#define TF_S_ASYNC MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x0300)")
cpp_quote("EXTERN_C HRESULT WINAPI TF_InitSystem(VOID);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_UninitSystem(VOID);")