Reactos
1/*
2 * PROJECT: ReactOS CTF
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: Precompiled header for msctf.dll
5 * COPYRIGHT: Copyright 2008 Aric Stewart, CodeWeavers
6 * Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#pragma once
10
11#include <initguid.h>
12#include <windef.h>
13#include <winbase.h>
14#include <oleauto.h>
15#include <olectl.h>
16#include <cguid.h>
17#include <msctf.h>
18#include <msctf_undoc.h>
19#include <tchar.h>
20#include <strsafe.h>
21#include <wine/list.h>
22
23// Cicero
24#include <cicbase.h>
25#include <cicarray.h>
26#include <cicreg.h>
27#include <cicutb.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#define COOKIE_MAGIC_TMSINK 0x0010
34#define COOKIE_MAGIC_CONTEXTSINK 0x0020
35#define COOKIE_MAGIC_GUIDATOM 0x0030
36#define COOKIE_MAGIC_IPPSINK 0x0040
37#define COOKIE_MAGIC_EDITCOOKIE 0x0050
38#define COOKIE_MAGIC_COMPARTMENTSINK 0x0060
39#define COOKIE_MAGIC_DMSINK 0x0070
40#define COOKIE_MAGIC_THREADFOCUSSINK 0x0080
41#define COOKIE_MAGIC_KEYTRACESINK 0x0090
42#define COOKIE_MAGIC_UIELEMENTSINK 0x00a0
43#define COOKIE_MAGIC_INPUTPROCESSORPROFILEACTIVATIONSINK 0x00b0
44#define COOKIE_MAGIC_ACTIVELANGSINK 0x00c0
45
46extern DWORD g_dwTLSIndex;
47extern TfClientId g_processId;
48extern ITfCompartmentMgr *g_globalCompartmentMgr;
49
50HRESULT ThreadMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut);
51HRESULT DocumentMgr_Constructor(ITfThreadMgrEventSink*, ITfDocumentMgr **ppOut);
52HRESULT Context_Constructor(TfClientId tidOwner, IUnknown *punk, ITfDocumentMgr *mgr, ITfContext **ppOut, TfEditCookie *pecTextStore);
53HRESULT InputProcessorProfiles_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut);
54HRESULT CategoryMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut);
55HRESULT Range_Constructor(ITfContext *context, DWORD anchorStart, DWORD anchorEnd, ITfRange **ppOut);
56HRESULT CompartmentMgr_Constructor(IUnknown *pUnkOuter, REFIID riid, IUnknown **ppOut);
57HRESULT CompartmentMgr_Destructor(ITfCompartmentMgr *This);
58HRESULT LangBarMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut);
59HRESULT DisplayAttributeMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut);
60
61HRESULT Context_Initialize(ITfContext *cxt, ITfDocumentMgr *manager);
62HRESULT Context_Uninitialize(ITfContext *cxt);
63void ThreadMgr_OnDocumentMgrDestruction(ITfThreadMgr *tm, ITfDocumentMgr *mgr);
64HRESULT TF_SELECTION_to_TS_SELECTION_ACP(const TF_SELECTION *tf, TS_SELECTION_ACP *tsAcp);
65
66/* cookie function */
67DWORD generate_Cookie(DWORD magic, LPVOID data);
68DWORD get_Cookie_magic(DWORD id);
69LPVOID get_Cookie_data(DWORD id);
70LPVOID remove_Cookie(DWORD id);
71DWORD enumerate_Cookie(DWORD magic, DWORD *index);
72
73/* activated text services functions */
74HRESULT add_active_textservice(TF_LANGUAGEPROFILE *lp);
75BOOL get_active_textservice(REFCLSID rclsid, TF_LANGUAGEPROFILE *lp);
76HRESULT activate_textservices(ITfThreadMgrEx *tm);
77HRESULT deactivate_textservices(void);
78
79CLSID get_textservice_clsid(TfClientId tid);
80HRESULT get_textservice_sink(TfClientId tid, REFCLSID iid, IUnknown** sink);
81HRESULT set_textservice_sink(TfClientId tid, REFCLSID iid, IUnknown* sink);
82
83typedef struct {
84 struct list entry;
85 union {
86 IUnknown *pIUnknown;
87 ITfThreadMgrEventSink *pITfThreadMgrEventSink;
88 ITfCompartmentEventSink *pITfCompartmentEventSink;
89 ITfTextEditSink *pITfTextEditSink;
90 ITfLanguageProfileNotifySink *pITfLanguageProfileNotifySink;
91 ITfTransitoryExtensionSink *pITfTransitoryExtensionSink;
92 } interfaces;
93} Sink;
94
95#define SINK_ENTRY(cursor,type) (LIST_ENTRY(cursor,Sink,entry)->interfaces.p##type)
96#define SINK_FOR_EACH(cursor,list,type,elem) \
97 for ((cursor) = (list)->next, elem = SINK_ENTRY(cursor,type); \
98 (cursor) != (list); \
99 (cursor) = (cursor)->next, elem = SINK_ENTRY(cursor,type))
100
101HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie);
102HRESULT unadvise_sink(DWORD cookie);
103void free_sinks(struct list *sink_list);
104
105#define szwSystemTIPKey L"SOFTWARE\\Microsoft\\CTF\\TIP"
106#define szwSystemCTFKey L"SOFTWARE\\Microsoft\\CTF"
107
108HRESULT __wine_register_resources(HMODULE module);
109HRESULT __wine_unregister_resources(HMODULE module);
110
111BOOL ProcessAttach(HINSTANCE hinstDLL);
112VOID ProcessDetach(HINSTANCE hinstDLL);
113
114#ifdef __cplusplus
115} // extern "C"
116#endif