Move WINDEBUGINFO from winbase.h to winbase16.h and rename to
[wine/wine-kai.git] / dlls / shdocvw / oleobject.c
blob862fcb87f2a990841c9ffe71b8c8076899815547
1 /*
2 * Implementation of IOleObject interfaces for IE Web Browser
4 * - IOleObject
5 * - IOleInPlaceObject
6 * - IOleControl
8 * 2001 John R. Sheets (for CodeWeavers)
9 */
11 #include <string.h>
12 #include "debugtools.h"
13 #include "shdocvw.h"
14 #include "ole2.h"
16 DEFAULT_DEBUG_CHANNEL(shdocvw);
18 /**********************************************************************
19 * Implement the IOleObject interface for the web browser component
21 * Based on DefaultHandler code in dlls/ole32/defaulthandler.c.
24 static ULONG WINAPI WBOOBJ_AddRef(LPOLEOBJECT iface);
25 static ULONG WINAPI WBOOBJ_Release(LPOLEOBJECT iface);
27 /************************************************************************
28 * WBOOBJ_QueryInterface (IUnknown)
30 * Interfaces we need to (at least pretend to) retrieve:
32 * a6bc3ac0-dbaa-11ce-9de3-00aa004bb851 IID_IProvideClassInfo2
33 * b196b283-bab4-101a-b69c-00aa00341d07 IID_IProvideClassInfo
34 * cf51ed10-62fe-11cf-bf86-00a0c9034836 IID_IQuickActivate
35 * 7fd52380-4e07-101b-ae2d-08002b2ec713 IID_IPersistStreamInit
36 * 0000010a-0000-0000-c000-000000000046 IID_IPersistStorage
37 * b196b284-bab4-101a-b69c-00aa00341d07 IID_IConnectionPointContainer
39 static HRESULT WINAPI WBOOBJ_QueryInterface(LPOLEOBJECT iface,
40 REFIID riid, void** ppobj)
42 ICOM_THIS(IOleObjectImpl, iface);
45 * Perform a sanity check on the parameters.
47 if ((This == NULL) || (ppobj == NULL) )
48 return E_INVALIDARG;
50 if (IsEqualGUID (&IID_IPersistStorage, riid))
52 TRACE("Returning IID_IPersistStorage interface\n");
53 *ppobj = (LPVOID)&SHDOCVW_PersistStorage;
54 WBOOBJ_AddRef (iface);
55 return S_OK;
57 else if (IsEqualGUID (&IID_IPersistStreamInit, riid))
59 TRACE("Returning IID_IPersistStreamInit interface\n");
60 *ppobj = (LPVOID)&SHDOCVW_PersistStreamInit;
61 WBOOBJ_AddRef (iface);
62 return S_OK;
64 else if (IsEqualGUID (&IID_IProvideClassInfo, riid))
66 TRACE("Returning IID_IProvideClassInfo interface\n");
67 *ppobj = (LPVOID)&SHDOCVW_ProvideClassInfo;
68 WBOOBJ_AddRef (iface);
69 return S_OK;
71 else if (IsEqualGUID (&IID_IProvideClassInfo2, riid))
73 TRACE("Returning IID_IProvideClassInfo2 interface %p\n",
74 &SHDOCVW_ProvideClassInfo2);
75 *ppobj = (LPVOID)&SHDOCVW_ProvideClassInfo2;
76 WBOOBJ_AddRef (iface);
77 return S_OK;
79 else if (IsEqualGUID (&IID_IQuickActivate, riid))
81 TRACE("Returning IID_IQuickActivate interface\n");
82 *ppobj = (LPVOID)&SHDOCVW_QuickActivate;
83 WBOOBJ_AddRef (iface);
84 return S_OK;
86 else if (IsEqualGUID (&IID_IConnectionPointContainer, riid))
88 TRACE("Returning IID_IConnectionPointContainer interface\n");
89 *ppobj = (LPVOID)&SHDOCVW_ConnectionPointContainer;
90 WBOOBJ_AddRef (iface);
91 return S_OK;
93 else if (IsEqualGUID (&IID_IOleInPlaceObject, riid))
95 TRACE("Returning IID_IOleInPlaceObject interface\n");
96 *ppobj = (LPVOID)&SHDOCVW_OleInPlaceObject;
97 WBOOBJ_AddRef (iface);
98 return S_OK;
100 else if (IsEqualGUID (&IID_IOleControl, riid))
102 TRACE("Returning IID_IOleControl interface\n");
103 *ppobj = (LPVOID)&SHDOCVW_OleControl;
104 WBOOBJ_AddRef (iface);
105 return S_OK;
107 else if (IsEqualGUID (&IID_IWebBrowser, riid))
109 TRACE("Returning IID_IWebBrowser interface\n");
110 *ppobj = (LPVOID)&SHDOCVW_WebBrowser;
111 WBOOBJ_AddRef (iface);
112 return S_OK;
114 else if (IsEqualGUID (&IID_IDispatch, riid))
116 TRACE("Returning IID_IDispatch interface\n");
117 *ppobj = (LPVOID)&SHDOCVW_WebBrowser;
118 WBOOBJ_AddRef (iface);
119 return S_OK;
122 TRACE ("Failed to find iid = %s\n", debugstr_guid(riid));
124 return E_NOINTERFACE;
127 /************************************************************************
128 * WBOOBJ_AddRef (IUnknown)
130 static ULONG WINAPI WBOOBJ_AddRef(LPOLEOBJECT iface)
132 ICOM_THIS(IOleObjectImpl, iface);
134 TRACE("\n");
135 return ++(This->ref);
138 /************************************************************************
139 * WBOOBJ_Release (IUnknown)
141 static ULONG WINAPI WBOOBJ_Release(LPOLEOBJECT iface)
143 ICOM_THIS(IOleObjectImpl, iface);
145 /* static class, won't be freed */
146 TRACE("\n");
147 return --(This->ref);
150 /************************************************************************
151 * WBOOBJ_SetClientSite (IOleObject)
153 static HRESULT WINAPI WBOOBJ_SetClientSite(LPOLEOBJECT iface,
154 LPOLECLIENTSITE pClientSite)
156 FIXME("stub: (%p, %p)\n", iface, pClientSite);
157 return S_OK;
160 /************************************************************************
161 * WBOOBJ_GetClientSite (IOleObject)
163 static HRESULT WINAPI WBOOBJ_GetClientSite(LPOLEOBJECT iface,
164 LPOLECLIENTSITE* ppClientSite)
166 FIXME("stub: (%p)\n", *ppClientSite);
167 return S_OK;
170 /************************************************************************
171 * WBOOBJ_SetHostNames (IOleObject)
173 static HRESULT WINAPI WBOOBJ_SetHostNames(LPOLEOBJECT iface, LPCOLESTR szContainerApp,
174 LPCOLESTR szContainerObj)
176 FIXME("stub: (%p, %s, %s)\n", iface, debugstr_w(szContainerApp),
177 debugstr_w(szContainerObj));
178 return S_OK;
181 /************************************************************************
182 * WBOOBJ_Close (IOleObject)
184 static HRESULT WINAPI WBOOBJ_Close(LPOLEOBJECT iface, DWORD dwSaveOption)
186 FIXME("stub: ()\n");
187 return S_OK;
190 /************************************************************************
191 * WBOOBJ_SetMoniker (IOleObject)
193 static HRESULT WINAPI WBOOBJ_SetMoniker(LPOLEOBJECT iface,
194 DWORD dwWhichMoniker, IMoniker* pmk)
196 FIXME("stub: (%p, %ld, %p)\n", iface, dwWhichMoniker, pmk);
197 return S_OK;
200 /************************************************************************
201 * WBOOBJ_GetMoniker (IOleObject)
203 * Delegate this request to the client site if we have one.
205 static HRESULT WINAPI WBOOBJ_GetMoniker(LPOLEOBJECT iface, DWORD dwAssign,
206 DWORD dwWhichMoniker, LPMONIKER *ppmk)
208 FIXME("stub (%p, %ld, %ld, %p)\n", iface, dwAssign, dwWhichMoniker, ppmk);
209 return E_UNSPEC;
212 /************************************************************************
213 * WBOOBJ_InitFromData (IOleObject)
215 * This method is meaningless if the server is not running
217 static HRESULT WINAPI WBOOBJ_InitFromData(LPOLEOBJECT iface, LPDATAOBJECT pDataObject,
218 BOOL fCreation, DWORD dwReserved)
220 FIXME("stub: (%p, %p, %d, %ld)\n", iface, pDataObject, fCreation, dwReserved);
221 return OLE_E_NOTRUNNING;
224 /************************************************************************
225 * WBOOBJ_GetClipboardData (IOleObject)
227 * This method is meaningless if the server is not running
229 static HRESULT WINAPI WBOOBJ_GetClipboardData(LPOLEOBJECT iface, DWORD dwReserved,
230 LPDATAOBJECT *ppDataObject)
232 FIXME("stub: (%p, %ld, %p)\n", iface, dwReserved, ppDataObject);
233 return OLE_E_NOTRUNNING;
236 /************************************************************************
237 * WBOOBJ_DoVerb (IOleObject)
239 static HRESULT WINAPI WBOOBJ_DoVerb(LPOLEOBJECT iface, LONG iVerb, struct tagMSG* lpmsg,
240 LPOLECLIENTSITE pActiveSite, LONG lindex,
241 HWND hwndParent, LPCRECT lprcPosRect)
243 FIXME(": stub iVerb = %ld\n", iVerb);
244 switch (iVerb)
246 case OLEIVERB_INPLACEACTIVATE:
247 FIXME ("stub for OLEIVERB_INPLACEACTIVATE\n");
248 break;
249 case OLEIVERB_HIDE:
250 FIXME ("stub for OLEIVERB_HIDE\n");
251 break;
254 return S_OK;
257 /************************************************************************
258 * WBOOBJ_EnumVerbs (IOleObject)
260 * Delegate to OleRegEnumVerbs.
262 static HRESULT WINAPI WBOOBJ_EnumVerbs(LPOLEOBJECT iface,
263 IEnumOLEVERB** ppEnumOleVerb)
265 TRACE("(%p, %p)\n", iface, ppEnumOleVerb);
267 return OleRegEnumVerbs(&CLSID_WebBrowser, ppEnumOleVerb);
270 /************************************************************************
271 * WBOOBJ_EnumVerbs (IOleObject)
273 static HRESULT WINAPI WBOOBJ_Update(LPOLEOBJECT iface)
275 FIXME(": Stub\n");
276 return E_NOTIMPL;
279 /************************************************************************
280 * WBOOBJ_IsUpToDate (IOleObject)
282 * This method is meaningless if the server is not running
284 static HRESULT WINAPI WBOOBJ_IsUpToDate(LPOLEOBJECT iface)
286 FIXME("(%p)\n", iface);
287 return OLE_E_NOTRUNNING;
290 /************************************************************************
291 * WBOOBJ_GetUserClassID (IOleObject)
293 static HRESULT WINAPI WBOOBJ_GetUserClassID(LPOLEOBJECT iface, CLSID* pClsid)
295 FIXME("stub: (%p, %p)\n", iface, pClsid);
296 return S_OK;
299 /************************************************************************
300 * WBOOBJ_GetUserType (IOleObject)
302 * Delegate to OleRegGetUserType.
304 static HRESULT WINAPI WBOOBJ_GetUserType(LPOLEOBJECT iface, DWORD dwFormOfType,
305 LPOLESTR* pszUserType)
307 TRACE("(%p, %ld, %p)\n", iface, dwFormOfType, pszUserType);
309 return OleRegGetUserType(&CLSID_WebBrowser, dwFormOfType, pszUserType);
312 /************************************************************************
313 * WBOOBJ_SetExtent (IOleObject)
315 * This method is meaningless if the server is not running
317 static HRESULT WINAPI WBOOBJ_SetExtent(LPOLEOBJECT iface, DWORD dwDrawAspect,
318 SIZEL* psizel)
320 FIXME("stub: (%p, %lx, (%ld x %ld))\n", iface, dwDrawAspect,
321 psizel->cx, psizel->cy);
322 return OLE_E_NOTRUNNING;
325 /************************************************************************
326 * WBOOBJ_GetExtent (IOleObject)
328 static HRESULT WINAPI WBOOBJ_GetExtent(LPOLEOBJECT iface, DWORD dwDrawAspect,
329 SIZEL* psizel)
331 FIXME("stub: (%p, %lx, %p)\n", iface, dwDrawAspect, psizel);
332 return S_OK;
335 /************************************************************************
336 * WBOOBJ_Advise (IOleObject)
338 static HRESULT WINAPI WBOOBJ_Advise(LPOLEOBJECT iface, IAdviseSink* pAdvSink,
339 DWORD* pdwConnection)
341 FIXME("stub: (%p, %p, %p)\n", iface, pAdvSink, pdwConnection);
342 return S_OK;
345 /************************************************************************
346 * WBOOBJ_Unadvise (IOleObject)
348 static HRESULT WINAPI WBOOBJ_Unadvise(LPOLEOBJECT iface, DWORD dwConnection)
350 FIXME("stub: (%p, %ld)\n", iface, dwConnection);
351 return S_OK;
354 /************************************************************************
355 * WBOOBJ_EnumAdvise (IOleObject)
357 static HRESULT WINAPI WBOOBJ_EnumAdvise(LPOLEOBJECT iface, IEnumSTATDATA** ppenumAdvise)
359 FIXME("stub: (%p, %p)\n", iface, ppenumAdvise);
360 return S_OK;
363 /************************************************************************
364 * WBOOBJ_GetMiscStatus (IOleObject)
366 * Delegate to OleRegGetMiscStatus.
368 static HRESULT WINAPI WBOOBJ_GetMiscStatus(LPOLEOBJECT iface, DWORD dwAspect,
369 DWORD* pdwStatus)
371 HRESULT hres;
373 TRACE("(%p, %lx, %p)\n", iface, dwAspect, pdwStatus);
375 hres = OleRegGetMiscStatus(&CLSID_WebBrowser, dwAspect, pdwStatus);
377 if (FAILED(hres))
378 *pdwStatus = 0;
380 return S_OK;
383 /************************************************************************
384 * WBOOBJ_SetColorScheme (IOleObject)
386 * This method is meaningless if the server is not running
388 static HRESULT WINAPI WBOOBJ_SetColorScheme(LPOLEOBJECT iface,
389 struct tagLOGPALETTE* pLogpal)
391 FIXME("stub: (%p, %p))\n", iface, pLogpal);
392 return OLE_E_NOTRUNNING;
395 /**********************************************************************
396 * IOleObject virtual function table for IE Web Browser component
399 static ICOM_VTABLE(IOleObject) WBOOBJ_Vtbl =
401 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
402 WBOOBJ_QueryInterface,
403 WBOOBJ_AddRef,
404 WBOOBJ_Release,
405 WBOOBJ_SetClientSite,
406 WBOOBJ_GetClientSite,
407 WBOOBJ_SetHostNames,
408 WBOOBJ_Close,
409 WBOOBJ_SetMoniker,
410 WBOOBJ_GetMoniker,
411 WBOOBJ_InitFromData,
412 WBOOBJ_GetClipboardData,
413 WBOOBJ_DoVerb,
414 WBOOBJ_EnumVerbs,
415 WBOOBJ_Update,
416 WBOOBJ_IsUpToDate,
417 WBOOBJ_GetUserClassID,
418 WBOOBJ_GetUserType,
419 WBOOBJ_SetExtent,
420 WBOOBJ_GetExtent,
421 WBOOBJ_Advise,
422 WBOOBJ_Unadvise,
423 WBOOBJ_EnumAdvise,
424 WBOOBJ_GetMiscStatus,
425 WBOOBJ_SetColorScheme
428 IOleObjectImpl SHDOCVW_OleObject = { &WBOOBJ_Vtbl, 1 };
431 /**********************************************************************
432 * Implement the IOleInPlaceObject interface
435 static HRESULT WINAPI WBOIPO_QueryInterface(LPOLEINPLACEOBJECT iface,
436 REFIID riid, LPVOID *ppobj)
438 ICOM_THIS(IOleInPlaceObjectImpl, iface);
440 FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj);
441 return E_NOINTERFACE;
444 static ULONG WINAPI WBOIPO_AddRef(LPOLEINPLACEOBJECT iface)
446 ICOM_THIS(IOleInPlaceObjectImpl, iface);
448 TRACE("\n");
449 return ++(This->ref);
452 static ULONG WINAPI WBOIPO_Release(LPOLEINPLACEOBJECT iface)
454 ICOM_THIS(IOleInPlaceObjectImpl, iface);
456 /* static class, won't be freed */
457 TRACE("\n");
458 return --(This->ref);
461 static HRESULT WINAPI WBOIPO_GetWindow(LPOLEINPLACEOBJECT iface, HWND* phwnd)
463 #if 0
464 /* Create a fake window to fool MFC into believing that we actually
465 * have an implemented browser control. Avoids the assertion.
467 HWND hwnd;
468 hwnd = CreateWindowA("BUTTON", "Web Control",
469 WS_HSCROLL | WS_VSCROLL | WS_OVERLAPPEDWINDOW,
470 CW_USEDEFAULT, CW_USEDEFAULT, 600,
471 400, NULL, NULL, NULL, NULL);
473 *phwnd = hwnd;
474 TRACE ("Returning hwnd = %d\n", hwnd);
475 #endif
477 FIXME("stub HWND* = %p\n", phwnd);
478 return S_OK;
481 static HRESULT WINAPI WBOIPO_ContextSensitiveHelp(LPOLEINPLACEOBJECT iface,
482 BOOL fEnterMode)
484 FIXME("stub fEnterMode = %d\n", fEnterMode);
485 return S_OK;
488 static HRESULT WINAPI WBOIPO_InPlaceDeactivate(LPOLEINPLACEOBJECT iface)
490 FIXME("stub \n");
491 return S_OK;
494 static HRESULT WINAPI WBOIPO_UIDeactivate(LPOLEINPLACEOBJECT iface)
496 FIXME("stub \n");
497 return S_OK;
500 static HRESULT WINAPI WBOIPO_SetObjectRects(LPOLEINPLACEOBJECT iface,
501 LPCRECT lprcPosRect, LPCRECT lprcClipRect)
503 FIXME("stub PosRect = %p, ClipRect = %p\n", lprcPosRect, lprcClipRect);
504 return S_OK;
507 static HRESULT WINAPI WBOIPO_ReactivateAndUndo(LPOLEINPLACEOBJECT iface)
509 FIXME("stub \n");
510 return S_OK;
513 /**********************************************************************
514 * IOleInPlaceObject virtual function table for IE Web Browser component
517 static ICOM_VTABLE(IOleInPlaceObject) WBOIPO_Vtbl =
519 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
520 WBOIPO_QueryInterface,
521 WBOIPO_AddRef,
522 WBOIPO_Release,
523 WBOIPO_GetWindow,
524 WBOIPO_ContextSensitiveHelp,
525 WBOIPO_InPlaceDeactivate,
526 WBOIPO_UIDeactivate,
527 WBOIPO_SetObjectRects,
528 WBOIPO_ReactivateAndUndo
531 IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject = { &WBOIPO_Vtbl, 1 };
534 /**********************************************************************
535 * Implement the IOleControl interface
538 static HRESULT WINAPI WBOC_QueryInterface(LPOLECONTROL iface,
539 REFIID riid, LPVOID *ppobj)
541 ICOM_THIS(IOleControlImpl, iface);
543 FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj);
544 return E_NOINTERFACE;
547 static ULONG WINAPI WBOC_AddRef(LPOLECONTROL iface)
549 ICOM_THIS(IOleControlImpl, iface);
551 TRACE("\n");
552 return ++(This->ref);
555 static ULONG WINAPI WBOC_Release(LPOLECONTROL iface)
557 ICOM_THIS(IOleControlImpl, iface);
559 /* static class, won't be freed */
560 TRACE("\n");
561 return --(This->ref);
564 static HRESULT WINAPI WBOC_GetControlInfo(LPOLECONTROL iface, LPCONTROLINFO pCI)
566 FIXME("stub: LPCONTROLINFO = %p\n", pCI);
567 return S_OK;
570 static HRESULT WINAPI WBOC_OnMnemonic(LPOLECONTROL iface, struct tagMSG *pMsg)
572 FIXME("stub: MSG* = %p\n", pMsg);
573 return S_OK;
576 static HRESULT WINAPI WBOC_OnAmbientPropertyChange(LPOLECONTROL iface, DISPID dispID)
578 FIXME("stub: DISPID = %ld\n", dispID);
579 return S_OK;
582 static HRESULT WINAPI WBOC_FreezeEvents(LPOLECONTROL iface, BOOL bFreeze)
584 FIXME("stub: bFreeze = %d\n", bFreeze);
585 return S_OK;
588 /**********************************************************************
589 * IOleControl virtual function table for IE Web Browser component
592 static ICOM_VTABLE(IOleControl) WBOC_Vtbl =
594 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
595 WBOC_QueryInterface,
596 WBOC_AddRef,
597 WBOC_Release,
598 WBOC_GetControlInfo,
599 WBOC_OnMnemonic,
600 WBOC_OnAmbientPropertyChange,
601 WBOC_FreezeEvents
604 IOleControlImpl SHDOCVW_OleControl = { &WBOC_Vtbl, 1 };