Reactos
1/*
2 * PROJECT: ReactOS CTF
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: ITfDisplayAttributeMgr implementation
5 * COPYRIGHT: Copyright 2010 CodeWeavers, Aric Stewart
6 * Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#include "precomp.h"
10#include "displayattributemgr.h"
11
12#include <wine/debug.h>
13WINE_DEFAULT_DEBUG_CHANNEL(msctf);
14
15////////////////////////////////////////////////////////////////////////////
16
17CDisplayAttributeMgr::CDisplayAttributeMgr()
18 : m_cRefs(1)
19{
20}
21
22CDisplayAttributeMgr::~CDisplayAttributeMgr()
23{
24 TRACE("destroying %p\n", this);
25}
26
27BOOL CDisplayAttributeMgr::_IsInCollection(REFGUID rguid)
28{
29 FIXME("(%p)\n", wine_dbgstr_guid(&rguid));
30 return FALSE;
31}
32
33void CDisplayAttributeMgr::_AdviseMarkupCollection(ITfTextInputProcessor *pProcessor, DWORD dwCookie)
34{
35 FIXME("(%p, %u)\n", pProcessor, dwCookie);
36}
37
38void CDisplayAttributeMgr::_UnadviseMarkupCollection(DWORD dwCookie)
39{
40 FIXME("(%u)\n", dwCookie);
41}
42
43void CDisplayAttributeMgr::_SetThis()
44{
45 FIXME("()\n");
46}
47
48STDMETHODIMP
49CDisplayAttributeMgr::QueryInterface(REFIID riid, void **ppvObj)
50{
51 if (!ppvObj)
52 return E_INVALIDARG;
53
54 *ppvObj = NULL;
55
56 if (riid == IID_IUnknown ||
57 riid == IID_ITfDisplayAttributeMgr ||
58 riid == IID_CDisplayAttributeMgr)
59 {
60 *ppvObj = this;
61 }
62 else if (riid == IID_ITfDisplayAttributeCollectionMgr)
63 {
64 *ppvObj = static_cast<ITfDisplayAttributeCollectionMgr *>(this);
65 }
66
67 if (!*ppvObj)
68 return E_NOINTERFACE;
69
70 AddRef();
71 return S_OK;
72}
73
74STDMETHODIMP_(ULONG)
75CDisplayAttributeMgr::AddRef()
76{
77 return ::InterlockedIncrement(&m_cRefs);
78}
79
80STDMETHODIMP_(ULONG)
81CDisplayAttributeMgr::Release()
82{
83 ULONG ret = ::InterlockedDecrement(&m_cRefs);
84 if (!ret)
85 delete this;
86 return ret;
87}
88
89STDMETHODIMP CDisplayAttributeMgr::OnUpdateInfo()
90{
91 FIXME("()\n");
92 return E_NOTIMPL;
93}
94
95STDMETHODIMP
96CDisplayAttributeMgr::EnumDisplayAttributeInfo(_Out_ IEnumTfDisplayAttributeInfo **ppEnum)
97{
98 FIXME("(%p)\n", ppEnum);
99 return E_NOTIMPL;
100}
101
102STDMETHODIMP
103CDisplayAttributeMgr::GetDisplayAttributeInfo(
104 _In_ REFGUID guid,
105 _Out_ ITfDisplayAttributeInfo **ppInfo,
106 _Out_ CLSID *pclsidOwner)
107{
108 FIXME("(%s, %p, %s)\n", wine_dbgstr_guid(&guid), ppInfo, wine_dbgstr_guid(pclsidOwner));
109 return E_NOTIMPL;
110}
111
112STDMETHODIMP
113CDisplayAttributeMgr::UnknownMethod(_In_ DWORD unused)
114{
115 FIXME("(0x%lX)\n", unused);
116 return E_NOTIMPL;
117}
118
119////////////////////////////////////////////////////////////////////////////
120
121EXTERN_C
122HRESULT DisplayAttributeMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
123{
124 if (pUnkOuter)
125 return CLASS_E_NOAGGREGATION;
126
127 CDisplayAttributeMgr *This = new(cicNoThrow) CDisplayAttributeMgr();
128 if (!This)
129 return E_OUTOFMEMORY;
130
131 HRESULT hr = This->QueryInterface(IID_ITfDisplayAttributeMgr, (void **)ppOut);
132 This->Release();
133 return hr;
134}