ReactOS 0.4.16-dev-1946-g52006dd
context.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS CTF
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: ITfContext implementation
5 * COPYRIGHT: Copyright 2009 Aric Stewart, CodeWeavers
6 * Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#include "precomp.h"
10
11#include <wine/debug.h>
13
15
17 : public ITfContext
18 , public ITfSource
19 // , public ITfContextComposition
21 // , public ITfContextOwnerServices
23 // , public ITfMouseTracker
24 // , public ITfQueryEmbedded
25 , public ITfSourceSingle
26 , public ITextStoreACPSink
28{
29public:
30 CContext();
31 virtual ~CContext();
32
34 TfClientId tidOwner,
36 ITfDocumentMgr *mgr,
37 ITfContext **ppOut,
38 TfEditCookie *pecTextStore);
41
42 // ** IUnknown methods **
43 STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override;
46
47 // ** ITfContext methods **
52 _Out_ HRESULT *phrSession) override;
55 _Out_ BOOL *pfWriteSession) override;
58 _In_ ULONG ulIndex,
59 _In_ ULONG ulCount,
60 _Out_ TF_SELECTION *pSelection,
61 _Out_ ULONG *pcFetched) override;
64 _In_ ULONG ulCount,
65 _In_ const TF_SELECTION *pSelection) override;
68 _Out_ ITfRange **ppStart) override;
71 _Out_ ITfRange **ppEnd) override;
74 STDMETHODIMP GetStatus(_Out_ TF_STATUS *pdcs) override;
76 _In_ REFGUID guidProp,
77 _Out_ ITfProperty **ppProp) override;
79 _In_ REFGUID guidProp,
80 _Out_ ITfReadOnlyProperty **ppProp) override;
82 _In_ const GUID **prgProp,
83 _In_ ULONG cProp,
84 _In_ const GUID **prgAppProp,
85 _In_ ULONG cAppProp,
86 _Out_ ITfReadOnlyProperty **ppProperty) override;
91 _In_ ITfRange *pRange,
92 _Out_ ITfRangeBackup **ppBackup) override;
93
94 // ** ITfSource methods **
98 _Out_ DWORD *pdwCookie) override;
99 STDMETHODIMP UnadviseSink(_In_ DWORD dwCookie) override;
100
101 // ** ITfContextOwnerCompositionServices methods **
103 _In_ TfEditCookie ecWrite,
104 _In_ ITfRange *pCompositionRange,
106 _Out_ ITfComposition **ppComposition) override;
109 _In_ TfEditCookie ecRead,
110 _In_ ITfRange *pTestRange,
111 _Out_ IEnumITfCompositionView **ppEnum) override;
113 _In_ TfEditCookie ecWrite,
114 _In_ ITfCompositionView *pComposition,
116 _Out_ ITfComposition **ppComposition) override;
118
119 // ** ITfInsertAtSelection methods **
123 _In_ const WCHAR *pchText,
124 _In_ LONG cch,
125 _Out_ ITfRange **ppRange) override;
129 _In_ IDataObject *pDataObject,
130 _Out_ ITfRange **ppRange) override;
131
132 // ** ITfSourceSingle methods **
136 _In_ IUnknown *punk) override;
139 _In_ REFIID riid) override;
140
141 // ** ITextStoreACPSink methods **
144 _In_ const TS_TEXTCHANGE *pChange) override;
147 _In_ TsLayoutCode lcode,
148 _In_ TsViewCookie vcView) override;
151 _In_ LONG acpStart,
152 _In_ LONG acpEnd,
153 _In_ ULONG cAttrs,
154 _In_ const TS_ATTRID *paAttrs) override;
155 STDMETHODIMP OnLockGranted(_In_ DWORD dwLockFlags) override;
158
159 // ** ITextStoreACPServices methods **
161 _In_ ITfProperty *prop,
164 _In_ IStream *stream) override;
166 _In_ ITfProperty *prop,
169 _In_ ITfPersistentPropertyLoaderACP *loader) override;
173 _In_ LONG end,
174 _Out_ ITfRangeACP **range) override;
175
176protected:
179
180 // Aggregation
182
187
191
192 // kept as separate lists to reduce unnecessary iterations
198};
199
201
202typedef struct tagEditCookie
203{
207
209
211 : m_cRefs(1)
212 , m_connected(FALSE)
213 , m_CompartmentMgr(NULL)
214 , m_manager(NULL)
215 , m_pITextStoreACP(NULL)
216 , m_pITfContextOwnerCompositionSink(NULL)
217 , m_currentEditSession(NULL)
218{
224}
225
227{
229 TRACE("destroying %p\n", this);
230
233
236
237 if (m_defaultCookie)
238 {
241 m_defaultCookie = 0;
242 }
243
249
252}
253
255{
256 *ppvObj = NULL;
257
258 IUnknown *pUnk = NULL;
259 if (riid == IID_IUnknown || riid == IID_ITfContext)
260 pUnk = static_cast<ITfContext *>(this);
261 else if (riid == IID_ITfSource)
262 pUnk = static_cast<ITfSource *>(this);
263 else if (riid == IID_ITfContextOwnerCompositionServices)
264 pUnk = static_cast<ITfContextOwnerCompositionServices *>(this);
265 else if (riid == IID_ITfInsertAtSelection)
266 pUnk = static_cast<ITfInsertAtSelection *>(this);
267 else if (riid == IID_ITfCompartmentMgr)
269 else if (riid == IID_ITfSourceSingle)
270 pUnk = static_cast<ITfSourceSingle *>(this);
271 else if (riid == IID_ITextStoreACPSink)
272 pUnk = static_cast<ITextStoreACPSink *>(this);
273 else if (riid == IID_ITextStoreACPServices)
274 pUnk = static_cast<ITextStoreACPServices *>(this);
275
276 if (pUnk)
277 {
278 pUnk->AddRef();
279 *ppvObj = pUnk;
280 return S_OK;
281 }
282
283 WARN("unsupported interface: %s\n", debugstr_guid(&riid));
284 return E_NOINTERFACE;
285}
286
288{
289 return ::InterlockedIncrement(&m_cRefs);
290}
291
293{
295 if (!ret)
296 delete this;
297 return ret;
298}
299
302 _In_ ITfEditSession *pes,
304 _Out_ HRESULT *phrSession)
305{
306 HRESULT hr;
307 DWORD dwLockFlags = 0x0;
308
309 TRACE("(%p) %i %p %x %p\n", this, tid, pes, dwFlags, phrSession);
310
311 if (!(dwFlags & TF_ES_READ) && !(dwFlags & TF_ES_READWRITE))
312 {
313 *phrSession = E_FAIL;
314 return E_INVALIDARG;
315 }
316
317 if (!m_pITextStoreACP)
318 {
319 FIXME("No ITextStoreACP available\n");
320 *phrSession = E_FAIL;
321 return E_FAIL;
322 }
323
324 if (!(dwFlags & TF_ES_ASYNC))
325 dwLockFlags |= TS_LF_SYNC;
326
328 dwLockFlags |= TS_LF_READWRITE;
329 else if (dwFlags & TF_ES_READ)
330 dwLockFlags |= TS_LF_READ;
331
334
337 {
338 *phrSession = TS_E_READONLY;
339 return S_OK;
340 }
341
342 hr = pes->QueryInterface(IID_ITfEditSession, (LPVOID *)&m_currentEditSession);
343 if (FAILED(hr))
344 {
345 *phrSession = E_FAIL;
346 return E_INVALIDARG;
347 }
348
349 return m_pITextStoreACP->RequestLock(dwLockFlags, phrSession);
350}
351
354 _Out_ BOOL *pfWriteSession)
355{
356 FIXME("STUB:(%p)\n", this);
357 return E_NOTIMPL;
358}
359
362 _In_ ULONG ulIndex,
363 _In_ ULONG ulCount,
364 _Out_ TF_SELECTION *pSelection,
365 _Out_ ULONG *pcFetched)
366{
367 ULONG count, i;
368 ULONG totalFetched = 0;
369 HRESULT hr = S_OK;
370
371 if (!pSelection || !pcFetched)
372 return E_INVALIDARG;
373
374 *pcFetched = 0;
375
376 if (!m_connected)
377 return TF_E_DISCONNECTED;
378
380 return TF_E_NOLOCK;
381
382 if (!m_pITextStoreACP)
383 {
384 FIXME("Context does not have a ITextStoreACP\n");
385 return E_NOTIMPL;
386 }
387
388 count = (ulIndex == (ULONG)TF_DEFAULT_SELECTION) ? 1 : ulCount;
389
390 for (i = 0; i < count; i++)
391 {
392 DWORD fetched;
393 TS_SELECTION_ACP acps;
394
395 hr = m_pITextStoreACP->GetSelection(ulIndex + i, 1, &acps, &fetched);
396 if (hr == TS_E_NOLOCK)
397 return TF_E_NOLOCK;
398 else if (FAILED(hr))
399 break;
400
401 pSelection[totalFetched].style.ase = (TfActiveSelEnd)acps.style.ase;
402 pSelection[totalFetched].style.fInterimChar = acps.style.fInterimChar;
403 Range_Constructor(this, acps.acpStart, acps.acpEnd, &pSelection[totalFetched].range);
404 totalFetched++;
405 }
406
407 *pcFetched = totalFetched;
408 return hr;
409}
410
414 _In_ ULONG ulCount,
415 _In_ const TF_SELECTION *pSelection)
416{
417 TS_SELECTION_ACP *acp;
418 ULONG i;
419 HRESULT hr;
420
421 TRACE("(%p) %i %i %p\n", this, ec, ulCount, pSelection);
422
423 if (!m_pITextStoreACP)
424 {
425 FIXME("Context does not have a ITextStoreACP\n");
426 return E_NOTIMPL;
427 }
428
430 return TF_E_NOLOCK;
431
432 acp = (TS_SELECTION_ACP *)cicMemAlloc(sizeof(TS_SELECTION_ACP) * ulCount);
433 if (!acp)
434 return E_OUTOFMEMORY;
435
436 for (i = 0; i < ulCount; i++)
437 {
438 if (FAILED(TF_SELECTION_to_TS_SELECTION_ACP(&pSelection[i], &acp[i])))
439 {
440 TRACE("Selection Conversion Failed\n");
441 cicMemFree(acp);
442 return E_FAIL;
443 }
444 }
445
446 hr = m_pITextStoreACP->SetSelection(ulCount, acp);
447
448 cicMemFree(acp);
449
450 return hr;
451}
452
456 _Out_ ITfRange **ppStart)
457{
458 TRACE("(%p) %i %p\n", this, ec, ppStart);
459
460 if (!ppStart)
461 return E_INVALIDARG;
462
463 *ppStart = NULL;
464
465 if (!m_connected)
466 return TF_E_DISCONNECTED;
467
469 return TF_E_NOLOCK;
470
471 return Range_Constructor(this, 0, 0, ppStart);
472}
473
477 _Out_ ITfRange **ppEnd)
478{
479 LONG end;
480
481 TRACE("(%p) %i %p\n", this, ec, ppEnd);
482
483 if (!ppEnd)
484 return E_INVALIDARG;
485
486 *ppEnd = NULL;
487
488 if (!m_connected)
489 return TF_E_DISCONNECTED;
490
492 return TF_E_NOLOCK;
493
494 if (!m_pITextStoreACP)
495 {
496 FIXME("Context does not have a ITextStoreACP\n");
497 return E_NOTIMPL;
498 }
499
501
502 return Range_Constructor(this, end, end, ppEnd);
503}
504
506{
507 FIXME("STUB:(%p)\n", this);
508 return E_NOTIMPL;
509}
510
512{
513 FIXME("STUB:(%p)\n", this);
514 return E_NOTIMPL;
515}
516
518{
519 TRACE("(%p) %p\n", this, pdcs);
520
521 if (!m_connected)
522 return TF_E_DISCONNECTED;
523
524 if (!pdcs)
525 return E_INVALIDARG;
526
527 if (!m_pITextStoreACP)
528 {
529 FIXME("Context does not have a ITextStoreACP\n");
530 return E_NOTIMPL;
531 }
532
534
535 *pdcs = m_documentStatus;
536
537 return S_OK;
538}
539
541 _In_ REFGUID guidProp,
542 _Out_ ITfProperty **ppProp)
543{
544 FIXME("STUB:(%p)\n", this);
545 return E_NOTIMPL;
546}
547
549 _In_ REFGUID guidProp,
550 _Out_ ITfReadOnlyProperty **ppProp)
551{
552 FIXME("STUB:(%p)\n", this);
553 return E_NOTIMPL;
554}
555
557 _In_ const GUID **prgProp,
558 _In_ ULONG cProp,
559 _In_ const GUID **prgAppProp,
560 _In_ ULONG cAppProp,
561 _Out_ ITfReadOnlyProperty **ppProperty)
562{
563 FIXME("STUB:(%p)\n", this);
564 return E_NOTIMPL;
565}
566
568{
569 FIXME("STUB:(%p)\n", this);
570 return E_NOTIMPL;
571}
572
574{
575 TRACE("(%p) %p\n", this, ppDm);
576
577 if (!ppDm)
578 return E_INVALIDARG;
579
580 *ppDm = m_manager;
581 if (!m_manager)
582 return S_FALSE;
583
584 m_manager->AddRef();
585 return S_OK;
586}
587
590 _In_ ITfRange *pRange,
591 _Out_ ITfRangeBackup **ppBackup)
592{
593 FIXME("STUB:(%p)\n", this);
594 return E_NOTIMPL;
595}
596
600 _Out_ DWORD *pdwCookie)
601{
602 TRACE("(%p) %s %p %p\n", this, debugstr_guid(&riid), punk, pdwCookie);
603
604 if (cicIsNullPtr(&riid) || !punk || !pdwCookie)
605 return E_INVALIDARG;
606
607 if (riid == IID_ITfTextEditSink)
608 return advise_sink(&m_pTextEditSink, IID_ITfTextEditSink, COOKIE_MAGIC_CONTEXTSINK, punk, pdwCookie);
609
610 FIXME("(%p) Unhandled Sink: %s\n", this, debugstr_guid(&riid));
611 return E_NOTIMPL;
612}
613
615{
616 TRACE("(%p) %x\n", this, dwCookie);
617
619 return E_INVALIDARG;
620
621 return unadvise_sink(dwCookie);
622}
623
625 _In_ TfEditCookie ecWrite,
626 _In_ ITfRange *pCompositionRange,
628 _Out_ ITfComposition **ppComposition)
629{
630 FIXME("STUB:(%p) %#x %p %p %p\n", this, ecWrite, pCompositionRange, pSink, ppComposition);
631 return E_NOTIMPL;
632}
633
635{
636 FIXME("STUB:(%p) %p\n", this, ppEnum);
637 return E_NOTIMPL;
638}
639
641 _In_ TfEditCookie ecRead,
642 _In_ ITfRange *pTestRange,
644{
645 FIXME("STUB:(%p) %#x %p %p\n", this, ecRead, pTestRange, ppEnum);
646 return E_NOTIMPL;
647}
648
650 _In_ TfEditCookie ecWrite,
651 _In_ ITfCompositionView *pComposition,
653 _Out_ ITfComposition **ppComposition)
654{
655 FIXME("STUB:(%p) %#x %p %p %p\n", this, ecWrite, pComposition, pSink, ppComposition);
656 return E_NOTIMPL;
657}
658
660{
661 FIXME("STUB:(%p) %p\n", this, pComposition);
662 return E_NOTIMPL;
663}
664
668 _In_ const WCHAR *pchText,
669 _In_ LONG cch,
670 _Out_ ITfRange **ppRange)
671{
673 LONG acpStart, acpEnd;
674 TS_TEXTCHANGE change;
675 HRESULT hr;
676
677 TRACE("(%p) %i %x %s %p\n", this, ec, dwFlags, debugstr_wn(pchText,cch), ppRange);
678
679 if (!m_connected)
680 return TF_E_DISCONNECTED;
681
683 return TF_E_NOLOCK;
684
686
687 if ((cookie->lockType & TS_LF_READWRITE) != TS_LF_READWRITE)
688 return TS_E_READONLY;
689
690 if (!m_pITextStoreACP)
691 {
692 FIXME("Context does not have a ITextStoreACP\n");
693 return E_NOTIMPL;
694 }
695
696 hr = m_pITextStoreACP->InsertTextAtSelection(dwFlags, pchText, cch, &acpStart, &acpEnd, &change);
697 if (SUCCEEDED(hr))
698 Range_Constructor(this, change.acpStart, change.acpNewEnd, ppRange);
699
700 return hr;
701}
702
706 _In_ IDataObject *pDataObject,
707 _Out_ ITfRange **ppRange)
708{
709 FIXME("STUB:(%p)\n", this);
710 return E_NOTIMPL;
711}
712
717{
718 FIXME("STUB:(%p) %i %s %p\n", this, tid, debugstr_guid(&riid), punk);
719 return E_NOTIMPL;
720}
721
725{
726 FIXME("STUB:(%p) %i %s\n", this, tid, debugstr_guid(&riid));
727 return E_NOTIMPL;
728}
729
732 _In_ const TS_TEXTCHANGE *pChange)
733{
734 FIXME("STUB:(%p)\n", this);
735 return S_OK;
736}
737
739{
740 FIXME("STUB:(%p)\n", this);
741 return S_OK;
742}
743
745 _In_ TsLayoutCode lcode,
746 _In_ TsViewCookie vcView)
747{
748 FIXME("STUB:(%p)\n", this);
749 return S_OK;
750}
751
753{
754 HRESULT hr, hrSession;
755
756 TRACE("(%p) %x\n", this, dwFlags);
757
758 if (!m_pITextStoreACP)
759 {
760 FIXME("Context does not have a ITextStoreACP\n");
761 return E_NOTIMPL;
762 }
763
765
766 if(SUCCEEDED(hr) && SUCCEEDED(hrSession))
768
769 return S_OK;
770}
771
773 _In_ LONG acpStart,
774 _In_ LONG acpEnd,
775 _In_ ULONG cAttrs,
776 _In_ const TS_ATTRID *paAttrs)
777{
778 FIXME("STUB:(%p)\n", this);
779 return E_NOTIMPL;
780}
781
783{
784 HRESULT hr;
785 EditCookie *cookie, *sinkcookie;
786 TfEditCookie ec;
787 struct list *cursor;
788
789 TRACE("(%p) %x\n", this, dwLockFlags);
790
792 {
793 FIXME("OnLockGranted called for something other than an EditSession\n");
794 return S_OK;
795 }
796
798 if (!cookie)
799 return E_OUTOFMEMORY;
800
801 sinkcookie = (EditCookie *)cicMemAlloc(sizeof(EditCookie));
802 if (!sinkcookie)
803 {
805 return E_OUTOFMEMORY;
806 }
807
808 cookie->lockType = dwLockFlags;
809 cookie->pOwningContext = this;
811
813
814 if ((dwLockFlags & TS_LF_READWRITE) == TS_LF_READWRITE)
815 {
817 TfEditCookie sc;
818
819 sinkcookie->lockType = TS_LF_READ;
820 sinkcookie->pOwningContext = this;
822
823 /*TODO: implement ITfEditRecord */
825 {
826 sink->OnEndEdit(static_cast<ITfContext *>(this), sc, NULL);
827 }
828 sinkcookie = (EditCookie *)remove_Cookie(sc);
829 }
830 cicMemFree(sinkcookie);
831
834
835 /* Edit Cookie is only valid during the edit session */
838
839 return hr;
840}
841
843{
844 FIXME("STUB:(%p)\n", this);
845 return E_NOTIMPL;
846}
847
849{
850 FIXME("STUB:(%p)\n", this);
851 return E_NOTIMPL;
852}
853
855 _In_ ITfProperty *prop,
859{
860 FIXME("stub: %p %p %p %p %p\n", this, prop, range, header, stream);
861 return E_NOTIMPL;
862}
863
865 _In_ ITfProperty *prop,
869{
870 FIXME("stub: %p %p %p %p %p\n", this, prop, header, stream, loader);
871 return E_NOTIMPL;
872}
873
875{
876 FIXME("stub: %p %p\n", this, prop);
877 return E_NOTIMPL;
878}
879
882 _In_ LONG end,
884{
885 FIXME("stub: %p %d %d %p\n", this, start, end, range);
886 return S_OK;
887}
888
890 TfClientId tidOwner,
891 IUnknown *punk,
892 ITfDocumentMgr *mgr,
893 ITfContext **ppOut,
894 TfEditCookie *pecTextStore)
895{
897 if (!This)
898 return E_OUTOFMEMORY;
899
901 if (!cookie)
902 {
903 delete This;
904 return E_OUTOFMEMORY;
905 }
906
907 TRACE("(%p) %x %p %p %p\n", This, tidOwner, punk, ppOut, pecTextStore);
908
909 This->m_tidOwner = tidOwner;
910 This->m_manager = mgr;
911
912 CompartmentMgr_Constructor(static_cast<ITfContext *>(This), IID_IUnknown, (IUnknown **)&This->m_CompartmentMgr);
913
914 cookie->lockType = TF_ES_READ;
915 cookie->pOwningContext = This;
916
917 if (punk)
918 {
919 punk->QueryInterface(IID_ITextStoreACP, (LPVOID*)&This->m_pITextStoreACP);
920 punk->QueryInterface(IID_ITfContextOwnerCompositionSink, (LPVOID*)&This->m_pITfContextOwnerCompositionSink);
921
922 if (!This->m_pITextStoreACP && !This->m_pITfContextOwnerCompositionSink)
923 FIXME("Unhandled pUnk\n");
924 }
925
927 *pecTextStore = This->m_defaultCookie;
928
929 list_init(&This->m_pContextKeyEventSink);
930 list_init(&This->m_pEditTransactionSink);
931 list_init(&This->m_pStatusSink);
932 list_init(&This->m_pTextEditSink);
933 list_init(&This->m_pTextLayoutSink);
934
935 *ppOut = static_cast<ITfContext *>(This);
936 TRACE("returning %p\n", *ppOut);
937
938 return S_OK;
939}
940
942{
944 {
945 m_pITextStoreACP->AdviseSink(IID_ITextStoreACPSink,
946 static_cast<ITextStoreACPSink *>(this),
948 }
950 m_manager = manager;
951 return S_OK;
952}
953
955{
957 m_pITextStoreACP->UnadviseSink(static_cast<ITextStoreACPSink *>(this));
959 m_manager = NULL;
960 return S_OK;
961}
962
964
968 TfClientId tidOwner,
969 IUnknown *punk,
970 ITfDocumentMgr *mgr,
971 ITfContext **ppOut,
972 TfEditCookie *pecTextStore)
973{
974 return CContext::CreateInstance(tidOwner, punk, mgr, ppOut, pecTextStore);
975}
976
979{
980 CContext *This = static_cast<CContext *>(iface);
981 return This->Initialize(manager);
982}
983
986{
987 CContext *This = static_cast<CContext *>(iface);
988 return This->Uninitialize();
989}
#define InterlockedDecrement
Definition: armddk.h:52
#define GetStatus(BaseIoAddress, Status)
Definition: atapi.h:328
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
HRESULT Range_Constructor(ITfContext *context, DWORD anchorStart, DWORD anchorEnd, ITfRange **ppOut)
Definition: range.cpp:372
#define SINK_FOR_EACH(cursor, list, type, elem)
Definition: precomp.h:96
#define COOKIE_MAGIC_EDITCOOKIE
Definition: precomp.h:37
#define COOKIE_MAGIC_CONTEXTSINK
Definition: precomp.h:34
HRESULT TF_SELECTION_to_TS_SELECTION_ACP(const TF_SELECTION *tf, TS_SELECTION_ACP *tsAcp)
Definition: range.cpp:385
static void list_init(struct list_entry *head)
Definition: list.h:51
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHODIMP_(t)
Definition: basetyps.h:44
const GUID IID_IUnknown
static LPVOID cicMemAlloc(SIZE_T size)
Definition: cicbase.h:10
#define cicNoThrow
Definition: cicbase.h:46
static void cicMemFree(LPVOID ptr)
Definition: cicbase.h:20
static bool cicIsNullPtr(LPCVOID ptr)
Definition: cicbase.h:40
struct list m_pContextKeyEventSink
Definition: context.cpp:193
STDMETHODIMP OnLayoutChange(_In_ TsLayoutCode lcode, _In_ TsViewCookie vcView) override
Definition: context.cpp:744
STDMETHODIMP OnTextChange(_In_ DWORD dwFlags, _In_ const TS_TEXTCHANGE *pChange) override
Definition: context.cpp:730
STDMETHODIMP Unserialize(_In_ ITfProperty *prop, _In_ const TF_PERSISTENT_PROPERTY_HEADER_ACP *header, _In_ IStream *stream, _In_ ITfPersistentPropertyLoaderACP *loader) override
Definition: context.cpp:864
STDMETHODIMP AdviseSingleSink(_In_ TfClientId tid, _In_ REFIID riid, _In_ IUnknown *punk) override
Definition: context.cpp:713
STDMETHODIMP OnLockGranted(_In_ DWORD dwLockFlags) override
Definition: context.cpp:782
struct list m_pStatusSink
Definition: context.cpp:195
STDMETHODIMP TakeOwnership(_In_ TfEditCookie ecWrite, _In_ ITfCompositionView *pComposition, _In_ ITfCompositionSink *pSink, _Out_ ITfComposition **ppComposition) override
Definition: context.cpp:649
virtual ~CContext()
Definition: context.cpp:226
STDMETHODIMP_(ULONG) Release() override
STDMETHODIMP EnumProperties(_Out_ IEnumTfProperties **ppEnum) override
Definition: context.cpp:567
STDMETHODIMP EnumViews(_Out_ IEnumTfContextViews **ppEnum) override
Definition: context.cpp:511
STDMETHODIMP StartComposition(_In_ TfEditCookie ecWrite, _In_ ITfRange *pCompositionRange, _In_ ITfCompositionSink *pSink, _Out_ ITfComposition **ppComposition) override
Definition: context.cpp:624
STDMETHODIMP SetSelection(_In_ TfEditCookie ec, _In_ ULONG ulCount, _In_ const TF_SELECTION *pSelection) override
Definition: context.cpp:412
STDMETHODIMP OnEndEditTransaction() override
Definition: context.cpp:848
STDMETHODIMP FindComposition(_In_ TfEditCookie ecRead, _In_ ITfRange *pTestRange, _Out_ IEnumITfCompositionView **ppEnum) override
Definition: context.cpp:640
STDMETHODIMP GetEnd(_In_ TfEditCookie ec, _Out_ ITfRange **ppEnd) override
Definition: context.cpp:475
TfClientId m_tidOwner
Definition: context.cpp:183
STDMETHODIMP InWriteSession(_In_ TfClientId tid, _Out_ BOOL *pfWriteSession) override
Definition: context.cpp:352
STDMETHODIMP GetSelection(_In_ TfEditCookie ec, _In_ ULONG ulIndex, _In_ ULONG ulCount, _Out_ TF_SELECTION *pSelection, _Out_ ULONG *pcFetched) override
Definition: context.cpp:360
struct list m_pEditTransactionSink
Definition: context.cpp:194
ITextStoreACP * m_pITextStoreACP
Definition: context.cpp:188
BOOL m_connected
Definition: context.cpp:178
STDMETHODIMP OnAttrsChange(_In_ LONG acpStart, _In_ LONG acpEnd, _In_ ULONG cAttrs, _In_ const TS_ATTRID *paAttrs) override
Definition: context.cpp:772
STDMETHODIMP ForceLoadProperty(_In_ ITfProperty *prop) override
Definition: context.cpp:874
CContext()
Definition: context.cpp:210
STDMETHODIMP Serialize(_In_ ITfProperty *prop, _In_ ITfRange *range, _Out_ TF_PERSISTENT_PROPERTY_HEADER_ACP *header, _In_ IStream *stream) override
Definition: context.cpp:854
STDMETHODIMP CreateRangeBackup(_In_ TfEditCookie ec, _In_ ITfRange *pRange, _Out_ ITfRangeBackup **ppBackup) override
Definition: context.cpp:588
STDMETHODIMP OnStartEditTransaction() override
Definition: context.cpp:842
ITfEditSession * m_currentEditSession
Definition: context.cpp:190
TS_STATUS m_documentStatus
Definition: context.cpp:185
HRESULT Initialize(ITfDocumentMgr *manager)
Definition: context.cpp:941
struct list m_pTextEditSink
Definition: context.cpp:196
STDMETHODIMP GetStart(_In_ TfEditCookie ec, _Out_ ITfRange **ppStart) override
Definition: context.cpp:454
STDMETHODIMP GetActiveView(_Out_ ITfContextView **ppView) override
Definition: context.cpp:505
STDMETHODIMP GetDocumentMgr(_Out_ ITfDocumentMgr **ppDm) override
Definition: context.cpp:573
HRESULT Uninitialize()
Definition: context.cpp:954
struct list m_pTextLayoutSink
Definition: context.cpp:197
ITfDocumentMgr * m_manager
Definition: context.cpp:186
STDMETHODIMP RequestEditSession(_In_ TfClientId tid, _In_ ITfEditSession *pes, _In_ DWORD dwFlags, _Out_ HRESULT *phrSession) override
Definition: context.cpp:300
STDMETHODIMP EnumCompositions(_Out_ IEnumITfCompositionView **ppEnum) override
Definition: context.cpp:634
STDMETHODIMP InsertTextAtSelection(_In_ TfEditCookie ec, _In_ DWORD dwFlags, _In_ const WCHAR *pchText, _In_ LONG cch, _Out_ ITfRange **ppRange) override
Definition: context.cpp:665
LONG m_cRefs
Definition: context.cpp:177
STDMETHODIMP OnSelectionChange() override
Definition: context.cpp:738
STDMETHODIMP AdviseSink(_In_ REFIID riid, _In_ IUnknown *punk, _Out_ DWORD *pdwCookie) override
Definition: context.cpp:597
STDMETHODIMP TrackProperties(_In_ const GUID **prgProp, _In_ ULONG cProp, _In_ const GUID **prgAppProp, _In_ ULONG cAppProp, _Out_ ITfReadOnlyProperty **ppProperty) override
Definition: context.cpp:556
STDMETHODIMP GetProperty(_In_ REFGUID guidProp, _Out_ ITfProperty **ppProp) override
Definition: context.cpp:540
TfEditCookie m_defaultCookie
Definition: context.cpp:184
STDMETHODIMP TerminateComposition(_In_ ITfCompositionView *pComposition) override
Definition: context.cpp:659
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override
Definition: context.cpp:254
static HRESULT CreateInstance(TfClientId tidOwner, IUnknown *punk, ITfDocumentMgr *mgr, ITfContext **ppOut, TfEditCookie *pecTextStore)
Definition: context.cpp:889
STDMETHODIMP InsertEmbeddedAtSelection(_In_ TfEditCookie ec, _In_ DWORD dwFlags, _In_ IDataObject *pDataObject, _Out_ ITfRange **ppRange) override
Definition: context.cpp:703
ITfContextOwnerCompositionSink * m_pITfContextOwnerCompositionSink
Definition: context.cpp:189
ITfCompartmentMgr * m_CompartmentMgr
Definition: context.cpp:181
STDMETHODIMP CreateRange(_In_ LONG start, _In_ LONG end, _Out_ ITfRangeACP **range) override
Definition: context.cpp:880
STDMETHODIMP GetAppProperty(_In_ REFGUID guidProp, _Out_ ITfReadOnlyProperty **ppProp) override
Definition: context.cpp:548
STDMETHODIMP UnadviseSingleSink(_In_ TfClientId tid, _In_ REFIID riid) override
Definition: context.cpp:722
STDMETHODIMP_(ULONG) AddRef() override
STDMETHODIMP GetStatus(_Out_ TF_STATUS *pdcs) override
Definition: context.cpp:517
STDMETHODIMP OnStatusChange(_In_ DWORD dwFlags) override
Definition: context.cpp:752
STDMETHODIMP UnadviseSink(_In_ DWORD dwCookie) override
Definition: context.cpp:614
Definition: list.h:37
EXTERN_C HRESULT CompartmentMgr_Constructor(IUnknown *pUnkOuter, REFIID riid, IUnknown **ppOut)
EXTERN_C HRESULT Context_Initialize(ITfContext *iface, ITfDocumentMgr *manager)
Definition: context.cpp:978
EXTERN_C HRESULT Context_Uninitialize(ITfContext *iface)
Definition: context.cpp:985
struct tagEditCookie EditCookie
EXTERN_C HRESULT Context_Constructor(TfClientId tidOwner, IUnknown *punk, ITfDocumentMgr *mgr, ITfContext **ppOut, TfEditCookie *pecTextStore)
Definition: context.cpp:967
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint start
Definition: gl.h:1545
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
GLenum GLint * range
Definition: glext.h:7539
GLsizei GLenum GLboolean sink
Definition: glext.h:5672
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
const char cursor[]
Definition: icontest.c:13
REFIID riid
Definition: atlbase.h:39
static CInternetFolder * CreateInstance(void)
Definition: inetfolder.c:330
static TfClientId tid
HRESULT SetSelection([in] ULONG ulCount, [in, size_is(ulCount)] const TS_SELECTION_ACP *pSelection)
HRESULT GetSelection([in] ULONG ulIndex, [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] TS_SELECTION_ACP *pSelection, [out] ULONG *pcFetched)
HRESULT InsertTextAtSelection([in] DWORD dwFlags, [in, size_is(cch)] const WCHAR *pchText, [in] ULONG cch, [out] LONG *pacpStart, [out] LONG *pacpEnd, [out] TS_TEXTCHANGE *pChange)
HRESULT GetStatus([out] TS_STATUS *pdcs)
HRESULT AdviseSink([in] REFIID riid, [in, iid_is(riid)] IUnknown *punk, [in] DWORD dwMask)
HRESULT UnadviseSink([in] IUnknown *punk)
HRESULT RequestLock([in] DWORD dwLockFlags, [out] HRESULT *phrSession)
HRESULT GetEndACP([out] LONG *pacp)
const ULONG TF_DEFAULT_SELECTION
Definition: msctf.idl:441
const DWORD TF_ES_ASYNC
Definition: msctf.idl:415
const DWORD TF_ES_READ
Definition: msctf.idl:413
const DWORD TF_ES_READWRITE
Definition: msctf.idl:414
TfActiveSelEnd
Definition: msctf.idl:427
HRESULT DoEditSession([in] TfEditCookie ec)
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
nsrefcnt AddRef()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_wn
Definition: kernel32.h:33
static IAdviseSinkEx AdviseSink
Definition: htmldoc.c:5184
EXTERN_C HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie)
Definition: msctf.cpp:259
EXTERN_C DWORD get_Cookie_magic(DWORD id)
Definition: msctf.cpp:203
EXTERN_C LPVOID get_Cookie_data(DWORD id)
Definition: msctf.cpp:217
EXTERN_C HRESULT unadvise_sink(DWORD cookie)
Definition: msctf.cpp:286
EXTERN_C DWORD generate_Cookie(DWORD magic, LPVOID data)
Definition: msctf.cpp:157
EXTERN_C LPVOID remove_Cookie(DWORD id)
Definition: msctf.cpp:231
EXTERN_C void free_sinks(struct list *sink_list)
Definition: msctf.cpp:297
DWORD TfClientId
Definition: msctf.idl:87
DWORD TfEditCookie
Definition: msctf.idl:86
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
long LONG
Definition: pedump.c:60
#define REFIID
Definition: guiddef.h:118
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
_In_ UINT _In_ UINT cch
Definition: shellapi.h:432
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
TsActiveSelEnd ase
Definition: textstor.idl:86
TS_SELECTIONSTYLE style
Definition: textstor.idl:94
DWORD dwDynamicFlags
Definition: textstor.idl:73
LONG acpNewEnd
Definition: textstor.idl:81
Definition: scsiwmi.h:51
Definition: cookie.c:34
Definition: parse.h:23
CContext * pOwningContext
Definition: context.cpp:205
DWORD lockType
Definition: context.cpp:204
const DWORD TS_LF_READWRITE
Definition: textstor.idl:58
DWORD TsViewCookie
Definition: textstor.idl:111
TsLayoutCode
Definition: textstor.idl:110
const DWORD TS_LF_SYNC
Definition: textstor.idl:56
const DWORD TS_SD_READONLY
Definition: textstor.idl:40
const DWORD TS_LF_READ
Definition: textstor.idl:57
const DWORD TS_AS_ALL_SINKS
Definition: textstor.idl:54
uint32_t ULONG
Definition: typedefs.h:59
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
static void Initialize()
Definition: xlate.c:212
__wchar_t WCHAR
Definition: xmlstorage.h:180