ReactOS 0.4.16-dev-1946-g52006dd
CCompartment Class Reference
Inheritance diagram for CCompartment:
Collaboration diagram for CCompartment:

Public Member Functions

 CCompartment (CompartmentValue *valueData)
 
virtual ~CCompartment ()
 
STDMETHODIMP QueryInterface (REFIID iid, LPVOID *ppvObj) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
STDMETHODIMP SetValue (_In_ TfClientId tid, _In_ const VARIANT *pvarValue) override
 
STDMETHODIMP GetValue (_Out_ VARIANT *pvarValue) override
 
STDMETHODIMP AdviseSink (_In_ REFIID riid, _In_ IUnknown *punk, _Out_ DWORD *pdwCookie) override
 
STDMETHODIMP UnadviseSink (_In_ DWORD dwCookie) override
 
- Public Member Functions inherited from ITfCompartment
HRESULT SetValue ([in] TfClientId tid, [in] const VARIANT *pvarValue)
 
HRESULT GetValue ([out] VARIANT *pvarValue)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
- Public Member Functions inherited from ITfSource
HRESULT AdviseSink ([in] REFIID riid, [in, iid_is(riid)] IUnknown *punk, [out] DWORD *pdwCookie)
 
HRESULT UnadviseSink ([in] DWORD dwCookie)
 

Static Public Member Functions

static HRESULT CreateInstance (CompartmentValue *valueData, ITfCompartment **ppOut)
 

Protected Attributes

LONG m_cRefs
 
VARIANT m_variant
 
CompartmentValuem_valueData
 
struct list m_CompartmentEventSink
 

Additional Inherited Members

- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 

Detailed Description

Definition at line 85 of file compartmentmgr.cpp.

Constructor & Destructor Documentation

◆ CCompartment()

CCompartment::CCompartment ( CompartmentValue valueData)

Definition at line 410 of file compartmentmgr.cpp.

411 : m_cRefs(1)
412 , m_valueData(valueData)
413{
416}
static void list_init(struct list_entry *head)
Definition: list.h:51
struct list m_CompartmentEventSink
CompartmentValue * m_valueData
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568

◆ ~CCompartment()

CCompartment::~CCompartment ( )
virtual

Definition at line 418 of file compartmentmgr.cpp.

419{
420 TRACE("destroying %p\n", this);
423}
EXTERN_C void free_sinks(struct list *sink_list)
Definition: msctf.cpp:297
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Member Function Documentation

◆ AdviseSink()

STDMETHODIMP CCompartment::AdviseSink ( _In_ REFIID  riid,
_In_ IUnknown punk,
_Out_ DWORD pdwCookie 
)
override

Definition at line 520 of file compartmentmgr.cpp.

524{
525 TRACE("(%p) %s %p %p\n", this, debugstr_guid(&riid), punk, pdwCookie);
526
527 if (cicIsNullPtr(&riid) || !punk || !pdwCookie)
528 return E_INVALIDARG;
529
530 if (riid == IID_ITfCompartmentEventSink)
531 {
532 return advise_sink(&m_CompartmentEventSink, IID_ITfCompartmentEventSink,
534 }
535
536 FIXME("(%p) Unhandled Sink: %s\n", this, debugstr_guid(&riid));
537 return E_NOTIMPL;
538}
#define COOKIE_MAGIC_COMPARTMENTSINK
Definition: precomp.h:38
#define FIXME(fmt,...)
Definition: precomp.h:53
static bool cicIsNullPtr(LPCVOID ptr)
Definition: cicbase.h:40
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
EXTERN_C HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie)
Definition: msctf.cpp:259
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158

◆ CreateInstance()

HRESULT CCompartment::CreateInstance ( CompartmentValue valueData,
ITfCompartment **  ppOut 
)
static

Definition at line 425 of file compartmentmgr.cpp.

426{
427 CCompartment *This = new(cicNoThrow) CCompartment(valueData);
428 if (!This)
429 return E_OUTOFMEMORY;
430
431 *ppOut = static_cast<ITfCompartment *>(This);
432 TRACE("returning %p\n", *ppOut);
433 return S_OK;
434}
#define cicNoThrow
Definition: cicbase.h:46
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define S_OK
Definition: intsafe.h:52

Referenced by CCompartmentMgr::GetCompartment().

◆ GetValue()

STDMETHODIMP CCompartment::GetValue ( _Out_ VARIANT pvarValue)
override

Definition at line 507 of file compartmentmgr.cpp.

508{
509 TRACE("(%p) %p\n", this, pvarValue);
510
511 if (!pvarValue)
512 return E_INVALIDARG;
513
514 ::VariantInit(pvarValue);
515 if (V_VT(&m_variant) == VT_EMPTY)
516 return S_FALSE;
517 return ::VariantCopy(pvarValue, &m_variant);
518}
@ VT_EMPTY
Definition: compat.h:2295
#define V_VT(A)
Definition: oleauto.h:211
#define S_FALSE
Definition: winerror.h:3451

◆ QueryInterface()

STDMETHODIMP CCompartment::QueryInterface ( REFIID  iid,
LPVOID ppvObj 
)
override

Definition at line 436 of file compartmentmgr.cpp.

437{
438 *ppvObj = NULL;
439
440 if (iid == IID_IUnknown || iid == IID_ITfCompartment)
441 *ppvObj = static_cast<ITfCompartment *>(this);
442 else if (iid == IID_ITfSource)
443 *ppvObj = static_cast<ITfSource *>(this);
444
445 if (*ppvObj)
446 {
447 AddRef();
448 return S_OK;
449 }
450
451 WARN("unsupported interface: %s\n", debugstr_guid(&iid));
452 return E_NOINTERFACE;
453}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define NULL
Definition: types.h:112
ULONG AddRef()
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ SetValue()

STDMETHODIMP CCompartment::SetValue ( _In_ TfClientId  tid,
_In_ const VARIANT pvarValue 
)
override

Definition at line 468 of file compartmentmgr.cpp.

469{
471 struct list *cursor;
472
473 TRACE("(%p) %i %p\n", this, tid, pvarValue);
474
475 if (!pvarValue)
476 return E_INVALIDARG;
477
478 if (!(V_VT(pvarValue) == VT_BSTR || V_VT(pvarValue) == VT_I4 || V_VT(pvarValue) == VT_UNKNOWN))
479 return E_INVALIDARG;
480
481 if (!m_valueData->owner)
483
485
486 /* Shallow copy of value and type */
487 m_variant = *pvarValue;
488
489 if (V_VT(pvarValue) == VT_BSTR)
490 {
491 V_BSTR(&m_variant) = ::SysAllocStringByteLen((char*)V_BSTR(pvarValue),
492 ::SysStringByteLen(V_BSTR(pvarValue)));
493 }
494 else if (V_VT(pvarValue) == VT_UNKNOWN)
495 {
496 V_UNKNOWN(&m_variant)->AddRef();
497 }
498
500 {
501 sink->OnChange(m_valueData->guid);
502 }
503
504 return S_OK;
505}
#define SINK_FOR_EACH(cursor, list, type, elem)
Definition: precomp.h:96
Definition: list.h:37
@ VT_BSTR
Definition: compat.h:2303
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_I4
Definition: compat.h:2298
GLsizei GLenum GLboolean sink
Definition: glext.h:5672
const char cursor[]
Definition: icontest.c:13
static TfClientId tid
UINT WINAPI SysStringByteLen(BSTR str)
Definition: oleaut.c:215
BSTR WINAPI DECLSPEC_HOTPATCH SysAllocStringByteLen(LPCSTR str, UINT len)
Definition: oleaut.c:428
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_BSTR(A)
Definition: oleauto.h:226

◆ STDMETHODIMP_() [1/2]

CCompartment::STDMETHODIMP_ ( ULONG  )
override

◆ STDMETHODIMP_() [2/2]

CCompartment::STDMETHODIMP_ ( ULONG  )
override

◆ UnadviseSink()

STDMETHODIMP CCompartment::UnadviseSink ( _In_ DWORD  dwCookie)
override

Definition at line 540 of file compartmentmgr.cpp.

541{
542 TRACE("(%p) %x\n", this, dwCookie);
543
545 return E_INVALIDARG;
546
547 return unadvise_sink(dwCookie);
548}
EXTERN_C DWORD get_Cookie_magic(DWORD id)
Definition: msctf.cpp:203
EXTERN_C HRESULT unadvise_sink(DWORD cookie)
Definition: msctf.cpp:286

Member Data Documentation

◆ m_CompartmentEventSink

struct list CCompartment::m_CompartmentEventSink
protected

Definition at line 115 of file compartmentmgr.cpp.

Referenced by AdviseSink(), CCompartment(), SetValue(), and ~CCompartment().

◆ m_cRefs

LONG CCompartment::m_cRefs
protected

Definition at line 112 of file compartmentmgr.cpp.

◆ m_valueData

CompartmentValue* CCompartment::m_valueData
protected

Definition at line 114 of file compartmentmgr.cpp.

Referenced by SetValue().

◆ m_variant

VARIANT CCompartment::m_variant
protected

Definition at line 113 of file compartmentmgr.cpp.

Referenced by CCompartment(), GetValue(), SetValue(), and ~CCompartment().


The documentation for this class was generated from the following file: