dinput: When handling axes, ignore the ABS_HAT.* as they are handled as POV.
[wine] / dlls / mshtml / mshtml_private.h
1 /*
2  * Copyright 2005-2006 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "docobj.h"
20 #include "mshtml.h"
21 #include "mshtmhst.h"
22 #include "hlink.h"
23
24 #ifdef INIT_GUID
25 #include "initguid.h"
26 #endif
27
28 #include "nsiface.h"
29
30 #define NS_OK                     ((nsresult)0x00000000L)
31 #define NS_ERROR_FAILURE          ((nsresult)0x80004005L)
32 #define NS_NOINTERFACE            ((nsresult)0x80004002L)
33 #define NS_ERROR_NOT_IMPLEMENTED  ((nsresult)0x80004001L)
34 #define NS_ERROR_INVALID_ARG      ((nsresult)0x80070057L) 
35 #define NS_ERROR_UNEXPECTED       ((nsresult)0x8000ffffL)
36 #define NS_ERROR_UNKNOWN_PROTOCOL ((nsresult)0x804b0012L)
37
38 #define NS_FAILED(res) ((res) & 0x80000000)
39 #define NS_SUCCEEDED(res) (!NS_FAILED(res))
40
41 #define NSAPI WINAPI
42
43 #define NS_ELEMENT_NODE   1
44 #define NS_DOCUMENT_NODE  9
45
46 typedef struct HTMLDOMNode HTMLDOMNode;
47 typedef struct ConnectionPoint ConnectionPoint;
48 typedef struct BSCallback BSCallback;
49
50 typedef enum {
51     UNKNOWN_USERMODE,
52     BROWSEMODE,
53     EDITMODE        
54 } USERMODE;
55
56 typedef struct {
57     const IHTMLDocument2Vtbl              *lpHTMLDocument2Vtbl;
58     const IHTMLDocument3Vtbl              *lpHTMLDocument3Vtbl;
59     const IPersistMonikerVtbl             *lpPersistMonikerVtbl;
60     const IPersistFileVtbl                *lpPersistFileVtbl;
61     const IMonikerPropVtbl                *lpMonikerPropVtbl;
62     const IOleObjectVtbl                  *lpOleObjectVtbl;
63     const IOleDocumentVtbl                *lpOleDocumentVtbl;
64     const IOleDocumentViewVtbl            *lpOleDocumentViewVtbl;
65     const IOleInPlaceActiveObjectVtbl     *lpOleInPlaceActiveObjectVtbl;
66     const IViewObject2Vtbl                *lpViewObject2Vtbl;
67     const IOleInPlaceObjectWindowlessVtbl *lpOleInPlaceObjectWindowlessVtbl;
68     const IServiceProviderVtbl            *lpServiceProviderVtbl;
69     const IOleCommandTargetVtbl           *lpOleCommandTargetVtbl;
70     const IOleControlVtbl                 *lpOleControlVtbl;
71     const IHlinkTargetVtbl                *lpHlinkTargetVtbl;
72     const IConnectionPointContainerVtbl   *lpConnectionPointContainerVtbl;
73     const IPersistStreamInitVtbl          *lpPersistStreamInitVtbl;
74
75     LONG ref;
76
77     NSContainer *nscontainer;
78
79     IOleClientSite *client;
80     IDocHostUIHandler *hostui;
81     IOleInPlaceSite *ipsite;
82     IOleInPlaceFrame *frame;
83
84     HWND hwnd;
85     HWND tooltips_hwnd;
86
87     USERMODE usermode;
88     BOOL in_place_active;
89     BOOL ui_active;
90     BOOL window_active;
91     BOOL has_key_path;
92     BOOL container_locked;
93
94     ConnectionPoint *cp_htmldocevents;
95     ConnectionPoint *cp_htmldocevents2;
96     ConnectionPoint *cp_propnotif;
97
98     HTMLDOMNode *nodes;
99 } HTMLDocument;
100
101 struct NSContainer {
102     const nsIWebBrowserChromeVtbl       *lpWebBrowserChromeVtbl;
103     const nsIContextMenuListenerVtbl    *lpContextMenuListenerVtbl;
104     const nsIURIContentListenerVtbl     *lpURIContentListenerVtbl;
105     const nsIEmbeddingSiteWindowVtbl    *lpEmbeddingSiteWindowVtbl;
106     const nsITooltipListenerVtbl        *lpTooltipListenerVtbl;
107     const nsIInterfaceRequestorVtbl     *lpInterfaceRequestorVtbl;
108     const nsIWeakReferenceVtbl          *lpWeakReferenceVtbl;
109     const nsISupportsWeakReferenceVtbl  *lpSupportsWeakReferenceVtbl;
110
111     nsIWebBrowser *webbrowser;
112     nsIWebNavigation *navigation;
113     nsIBaseWindow *window;
114     nsIWebBrowserFocus *focus;
115
116     LONG ref;
117
118     NSContainer *parent;
119     HTMLDocument *doc;
120
121     HWND hwnd;
122
123     BSCallback *bscallback; /* hack */
124 };
125
126 typedef struct {
127     const nsIHttpChannelVtbl *lpHttpChannelVtbl;
128     const nsIUploadChannelVtbl *lpUploadChannelVtbl;
129
130     LONG ref;
131
132     nsIChannel *channel;
133     nsIHttpChannel *http_channel;
134     nsIWineURI *uri;
135     nsIInputStream *post_data_stream;
136     nsILoadGroup *load_group;
137     nsIInterfaceRequestor *notif_callback;
138     nsLoadFlags load_flags;
139     nsIURI *original_uri;
140     char *content;
141 } nsChannel;
142
143 typedef struct {
144     const nsIInputStreamVtbl *lpInputStreamVtbl;
145
146     LONG ref;
147
148     char buf[1024];
149     DWORD buf_size;
150 } nsProtocolStream;
151
152 struct BSCallback {
153     const IBindStatusCallbackVtbl *lpBindStatusCallbackVtbl;
154     const IServiceProviderVtbl    *lpServiceProviderVtbl;
155     const IHttpNegotiate2Vtbl     *lpHttpNegotiate2Vtbl;
156     const IInternetBindInfoVtbl   *lpInternetBindInfoVtbl;
157
158     LONG ref;
159
160     LPWSTR headers;
161     HGLOBAL post_data;
162     ULONG post_data_len;
163
164     nsChannel *nschannel;
165     nsIStreamListener *nslistener;
166     nsISupports *nscontext;
167
168     nsProtocolStream *nsstream;
169 };
170
171 struct HTMLDOMNode {
172     const IHTMLDOMNodeVtbl *lpHTMLDOMNodeVtbl;
173
174     void (*destructor)(IUnknown*);
175
176     enum {
177         NT_UNKNOWN,
178         NT_HTMLELEM
179     } node_type;
180
181     union {
182         IUnknown *unk;
183         IHTMLElement *elem;
184     } impl;
185
186     nsIDOMNode *nsnode;
187     HTMLDocument *doc;
188
189     HTMLDOMNode *next;
190 };
191
192 typedef struct {
193     const IHTMLElementVtbl *lpHTMLElementVtbl;
194     const IHTMLElement2Vtbl *lpHTMLElement2Vtbl;
195
196     void (*destructor)(IUnknown*);
197
198     nsIDOMHTMLElement *nselem;
199     HTMLDOMNode *node;
200
201     IUnknown *impl;
202 } HTMLElement;
203
204 typedef struct {
205     const IHTMLTextContainerVtbl *lpHTMLTextContainerVtbl;
206
207     IUnknown *impl;
208 } HTMLTextContainer;
209
210 #define HTMLDOC(x)       ((IHTMLDocument2*)               &(x)->lpHTMLDocument2Vtbl)
211 #define HTMLDOC3(x)      ((IHTMLDocument3*)               &(x)->lpHTMLDocument3Vtbl)
212 #define PERSIST(x)       ((IPersist*)                     &(x)->lpPersistFileVtbl)
213 #define PERSISTMON(x)    ((IPersistMoniker*)              &(x)->lpPersistMonikerVtbl)
214 #define PERSISTFILE(x)   ((IPersistFile*)                 &(x)->lpPersistFileVtbl)
215 #define MONPROP(x)       ((IMonikerProp*)                 &(x)->lpMonikerPropVtbl)
216 #define OLEOBJ(x)        ((IOleObject*)                   &(x)->lpOleObjectVtbl)
217 #define OLEDOC(x)        ((IOleDocument*)                 &(x)->lpOleDocumentVtbl)
218 #define DOCVIEW(x)       ((IOleDocumentView*)             &(x)->lpOleDocumentViewVtbl)
219 #define OLEWIN(x)        ((IOleWindow*)                   &(x)->lpOleInPlaceActiveObjectVtbl)
220 #define ACTOBJ(x)        ((IOleInPlaceActiveObject*)      &(x)->lpOleInPlaceActiveObjectVtbl)
221 #define VIEWOBJ(x)       ((IViewObject*)                  &(x)->lpViewObject2Vtbl)
222 #define VIEWOBJ2(x)      ((IViewObject2*)                 &(x)->lpViewObject2Vtbl)
223 #define INPLACEOBJ(x)    ((IOleInPlaceObject*)            &(x)->lpOleInPlaceObjectWindowlessVtbl)
224 #define INPLACEWIN(x)    ((IOleInPlaceObjectWindowless*)  &(x)->lpOleInPlaceObjectWindowlessVtbl)
225 #define SERVPROV(x)      ((IServiceProvider*)             &(x)->lpServiceProviderVtbl)
226 #define CMDTARGET(x)     ((IOleCommandTarget*)            &(x)->lpOleCommandTargetVtbl)
227 #define CONTROL(x)       ((IOleControl*)                  &(x)->lpOleControlVtbl)
228 #define HLNKTARGET(x)    ((IHlinkTarget*)                 &(x)->lpHlinkTargetVtbl)
229 #define CONPTCONT(x)     ((IConnectionPointContainer*)    &(x)->lpConnectionPointContainerVtbl)
230 #define PERSTRINIT(x)    ((IPersistStreamInit*)           &(x)->lpPersistStreamInitVtbl)
231
232 #define NSWBCHROME(x)    ((nsIWebBrowserChrome*)          &(x)->lpWebBrowserChromeVtbl)
233 #define NSCML(x)         ((nsIContextMenuListener*)       &(x)->lpContextMenuListenerVtbl)
234 #define NSURICL(x)       ((nsIURIContentListener*)        &(x)->lpURIContentListenerVtbl)
235 #define NSEMBWNDS(x)     ((nsIEmbeddingSiteWindow*)       &(x)->lpEmbeddingSiteWindowVtbl)
236 #define NSIFACEREQ(x)    ((nsIInterfaceRequestor*)        &(x)->lpInterfaceRequestorVtbl)
237 #define NSTOOLTIP(x)     ((nsITooltipListener*)           &(x)->lpTooltipListenerVtbl)
238 #define NSWEAKREF(x)     ((nsIWeakReference*)             &(x)->lpWeakReferenceVtbl)
239 #define NSSUPWEAKREF(x)  ((nsISupportsWeakReference*)     &(x)->lpSupportsWeakReferenceVtbl)
240
241 #define NSCHANNEL(x)     ((nsIChannel*)        &(x)->lpHttpChannelVtbl)
242 #define NSHTTPCHANNEL(x) ((nsIHttpChannel*)    &(x)->lpHttpChannelVtbl)
243 #define NSUPCHANNEL(x)   ((nsIUploadChannel*)  &(x)->lpUploadChannelVtbl)
244
245 #define HTTPNEG(x)       ((IHttpNegotiate2*)              &(x)->lpHttpNegotiate2Vtbl)
246 #define STATUSCLB(x)     ((IBindStatusCallback*)          &(x)->lpBindStatusCallbackVtbl)
247 #define BINDINFO(x)      ((IInternetBindInfo*)            &(x)->lpInternetBindInfoVtbl);
248
249 #define HTMLELEM(x)      ((IHTMLElement*)                 &(x)->lpHTMLElementVtbl)
250 #define HTMLELEM2(x)     ((IHTMLElement2*)                &(x)->lpHTMLElement2Vtbl)
251 #define HTMLDOMNODE(x)   ((IHTMLDOMNode*)                 &(x)->lpHTMLDOMNodeVtbl)
252
253 #define HTMLTEXTCONT(x)  ((IHTMLTextContainer*)           &(x)->lpHTMLTextContainerVtbl)
254
255 #define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
256
257 HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**);
258 HRESULT HTMLLoadOptions_Create(IUnknown*,REFIID,void**);
259
260 void HTMLDocument_HTMLDocument3_Init(HTMLDocument*);
261 void HTMLDocument_Persist_Init(HTMLDocument*);
262 void HTMLDocument_OleCmd_Init(HTMLDocument*);
263 void HTMLDocument_OleObj_Init(HTMLDocument*);
264 void HTMLDocument_View_Init(HTMLDocument*);
265 void HTMLDocument_Window_Init(HTMLDocument*);
266 void HTMLDocument_Service_Init(HTMLDocument*);
267 void HTMLDocument_Hlink_Init(HTMLDocument*);
268 void HTMLDocument_ConnectionPoints_Init(HTMLDocument*);
269
270 void HTMLDocument_ConnectionPoints_Destroy(HTMLDocument*);
271
272 NSContainer *NSContainer_Create(HTMLDocument*,NSContainer*);
273 void NSContainer_Release(NSContainer*);
274
275 void HTMLDocument_LockContainer(HTMLDocument*,BOOL);
276 void HTMLDocument_ShowContextMenu(HTMLDocument*,DWORD,POINT*);
277
278 void show_tooltip(HTMLDocument*,DWORD,DWORD,LPCWSTR);
279 void hide_tooltip(HTMLDocument*);
280
281 HRESULT ProtocolFactory_Create(REFCLSID,REFIID,void**);
282
283 void close_gecko(void);
284 void register_nsservice(nsIComponentRegistrar*,nsIServiceManager*);
285 void init_nsio(nsIComponentManager*,nsIComponentRegistrar*);
286
287 void hlink_frame_navigate(HTMLDocument*,IHlinkFrame*,LPCWSTR,nsIInputStream*,DWORD);
288
289 nsIURI *get_nsIURI(LPCWSTR);
290
291 void *nsalloc(size_t);
292 void nsfree(void*);
293
294 void nsACString_Init(nsACString*,const char*);
295 PRUint32 nsACString_GetData(const nsACString*,const char**,PRBool*);
296 void nsACString_Finish(nsACString*);
297
298 void nsAString_Init(nsAString*,const PRUnichar*);
299 PRUint32 nsAString_GetData(const nsAString*,const PRUnichar**,PRBool*);
300 void nsAString_Finish(nsAString*);
301
302 nsIInputStream *create_nsstream(const char*,PRInt32);
303
304 BSCallback *create_bscallback(HTMLDocument*,LPCOLESTR);
305 HRESULT start_binding(BSCallback*,IMoniker*);
306
307 IHlink *Hlink_Create(void);
308 IHTMLSelectionObject *HTMLSelectionObject_Create(nsISelection*);
309 IHTMLTxtRange *HTMLTxtRange_Create(nsISelection*);
310
311 void HTMLElement_Create(HTMLDOMNode*);
312 void HTMLBodyElement_Create(HTMLElement*);
313 void HTMLInputElement_Create(HTMLElement*);
314 void HTMLSelectElement_Create(HTMLElement*);
315 void HTMLTextAreaElement_Create(HTMLElement*);
316
317 void HTMLElement2_Init(HTMLElement*);
318
319 void HTMLTextContainer_Init(HTMLTextContainer*,IUnknown*);
320
321 HRESULT HTMLDOMNode_QI(HTMLDOMNode*,REFIID,void**);
322 HRESULT HTMLElement_QI(HTMLElement*,REFIID,void**);
323
324 HTMLDOMNode *get_node(HTMLDocument*,nsIDOMNode*);
325 void release_nodes(HTMLDocument*);
326
327 void install_wine_gecko(void);
328
329 DEFINE_GUID(CLSID_AboutProtocol, 0x3050F406, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
330 DEFINE_GUID(CLSID_JSProtocol, 0x3050F3B2, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
331 DEFINE_GUID(CLSID_MailtoProtocol, 0x3050F3DA, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
332 DEFINE_GUID(CLSID_ResProtocol, 0x3050F3BC, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
333 DEFINE_GUID(CLSID_SysimageProtocol, 0x76E67A63, 0x06E9, 0x11D2, 0xA8,0x40, 0x00,0x60,0x08,0x05,0x93,0x82);
334
335 DEFINE_GUID(CLSID_CMarkup,0x3050f4fb,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
336
337 extern LONG module_ref;
338 #define LOCK_MODULE()   InterlockedIncrement(&module_ref)
339 #define UNLOCK_MODULE() InterlockedDecrement(&module_ref)
340
341 extern HINSTANCE hInst;