2 * Implementation of IOleObject interfaces for WebBrowser control
8 * Copyright 2001 John R. Sheets (for CodeWeavers)
9 * Copyright 2005 Jacek Caban
11 * This library is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
16 * This library is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with this library; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
27 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw
);
32 static ATOM shell_embedding_atom
= 0;
34 static LRESULT
resize_window(WebBrowser
*This
, LONG width
, LONG height
)
36 if(This
->doc_host
.hwnd
)
37 SetWindowPos(This
->doc_host
.hwnd
, NULL
, 0, 0, width
, height
,
38 SWP_NOZORDER
| SWP_NOACTIVATE
);
43 static LRESULT WINAPI
shell_embedding_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
47 static const WCHAR wszTHIS
[] = {'T','H','I','S',0};
49 if(msg
== WM_CREATE
) {
50 This
= *(WebBrowser
**)lParam
;
51 SetPropW(hwnd
, wszTHIS
, This
);
53 This
= GetPropW(hwnd
, wszTHIS
);
58 return resize_window(This
, LOWORD(lParam
), HIWORD(lParam
));
61 return DefWindowProcW(hwnd
, msg
, wParam
, lParam
);
64 static void create_shell_embedding_hwnd(WebBrowser
*This
)
66 IOleInPlaceSite
*inplace
;
70 static const WCHAR wszShellEmbedding
[] =
71 {'S','h','e','l','l',' ','E','m','b','e','d','d','i','n','g',0};
73 if(!shell_embedding_atom
) {
74 static WNDCLASSEXW wndclass
= {
78 0, 0 /* native uses 8 */, NULL
, NULL
, NULL
,
79 (HBRUSH
)COLOR_WINDOWFRAME
, NULL
,
83 wndclass
.hInstance
= shdocvw_hinstance
;
85 RegisterClassExW(&wndclass
);
88 hres
= IOleClientSite_QueryInterface(This
->client
, &IID_IOleInPlaceSite
, (void**)&inplace
);
90 IOleInPlaceSite_GetWindow(inplace
, &parent
);
91 IOleInPlaceSite_Release(inplace
);
94 This
->doc_host
.frame_hwnd
= This
->shell_embedding_hwnd
= CreateWindowExW(
96 wszShellEmbedding
, wszShellEmbedding
,
97 WS_CHILD
| WS_CLIPSIBLINGS
| WS_CLIPCHILDREN
| WS_TABSTOP
,
99 NULL
, shdocvw_hinstance
, This
);
102 static HRESULT
activate_inplace(WebBrowser
*This
, IOleClientSite
*active_site
, HWND parent_hwnd
)
112 hres
= IOleClientSite_QueryInterface(active_site
, &IID_IOleInPlaceSite
,
113 (void**)&This
->inplace
);
115 WARN("Could not get IOleInPlaceSite\n");
119 hres
= IOleInPlaceSite_CanInPlaceActivate(This
->inplace
);
121 WARN("CanInPlaceActivate returned: %08lx\n", hres
);
122 IOleInPlaceSite_Release(This
->inplace
);
126 hres
= IOleInPlaceSite_GetWindow(This
->inplace
, &This
->iphwnd
);
128 This
->iphwnd
= parent_hwnd
;
130 IOleInPlaceSite_OnInPlaceActivate(This
->inplace
);
132 IOleInPlaceSite_GetWindowContext(This
->inplace
, &This
->frame
, &This
->uiwindow
,
133 &This
->pos_rect
, &This
->clip_rect
,
136 SetWindowPos(This
->shell_embedding_hwnd
, NULL
,
137 This
->pos_rect
.left
, This
->pos_rect
.top
,
138 This
->pos_rect
.right
-This
->pos_rect
.left
,
139 This
->pos_rect
.bottom
-This
->pos_rect
.top
,
140 SWP_NOZORDER
| SWP_SHOWWINDOW
);
143 IOleClientSite_ShowObject(This
->client
);
144 IOleClientSite_GetContainer(This
->client
, &This
->container
);
148 IOleInPlaceFrame_GetWindow(This
->frame
, &This
->frame_hwnd
);
153 static HRESULT
activate_ui(WebBrowser
*This
, IOleClientSite
*active_site
, HWND parent_hwnd
)
157 static const WCHAR wszitem
[] = {'i','t','e','m',0};
162 hres
= activate_inplace(This
, active_site
, parent_hwnd
);
166 IOleInPlaceSite_OnUIActivate(This
->inplace
);
169 IOleInPlaceFrame_SetActiveObject(This
->frame
, ACTIVEOBJ(This
), wszitem
);
171 IOleInPlaceUIWindow_SetActiveObject(This
->uiwindow
, ACTIVEOBJ(This
), wszitem
);
174 * IOleInPlaceFrmae_SetMenu
180 /**********************************************************************
181 * Implement the IOleObject interface for the WebBrowser control
184 #define OLEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleObject, iface)
186 static HRESULT WINAPI
OleObject_QueryInterface(IOleObject
*iface
, REFIID riid
, void **ppv
)
188 WebBrowser
*This
= OLEOBJ_THIS(iface
);
189 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppv
);
192 static ULONG WINAPI
OleObject_AddRef(IOleObject
*iface
)
194 WebBrowser
*This
= OLEOBJ_THIS(iface
);
195 return IWebBrowser_AddRef(WEBBROWSER(This
));
198 static ULONG WINAPI
OleObject_Release(IOleObject
*iface
)
200 WebBrowser
*This
= OLEOBJ_THIS(iface
);
201 return IWebBrowser_Release(WEBBROWSER(This
));
204 static HRESULT WINAPI
OleObject_SetClientSite(IOleObject
*iface
, LPOLECLIENTSITE pClientSite
)
206 WebBrowser
*This
= OLEOBJ_THIS(iface
);
209 TRACE("(%p)->(%p)\n", This
, pClientSite
);
211 if(This
->client
== pClientSite
)
214 if(This
->doc_host
.hwnd
) {
215 DestroyWindow(This
->doc_host
.hwnd
);
216 This
->doc_host
.hwnd
= NULL
;
218 if(This
->shell_embedding_hwnd
) {
219 DestroyWindow(This
->shell_embedding_hwnd
);
220 This
->shell_embedding_hwnd
= NULL
;
224 IOleInPlaceSite_Release(This
->inplace
);
225 This
->inplace
= NULL
;
228 if(This
->doc_host
.hostui
)
229 IDocHostUIHandler_Release(This
->doc_host
.hostui
);
231 IOleClientSite_Release(This
->client
);
234 if(This
->doc_host
.document
)
235 deactivate_document(&This
->doc_host
);
240 This
->client
= pClientSite
;
241 IOleClientSite_AddRef(pClientSite
);
243 hres
= IOleClientSite_QueryInterface(This
->client
, &IID_IDocHostUIHandler
,
244 (void**)&This
->doc_host
.hostui
);
246 This
->doc_host
.hostui
= NULL
;
248 create_shell_embedding_hwnd(This
);
253 static HRESULT WINAPI
OleObject_GetClientSite(IOleObject
*iface
, LPOLECLIENTSITE
*ppClientSite
)
255 WebBrowser
*This
= OLEOBJ_THIS(iface
);
257 TRACE("(%p)->(%p)\n", This
, ppClientSite
);
263 IOleClientSite_AddRef(This
->client
);
264 *ppClientSite
= This
->client
;
269 static HRESULT WINAPI
OleObject_SetHostNames(IOleObject
*iface
, LPCOLESTR szContainerApp
,
270 LPCOLESTR szContainerObj
)
272 WebBrowser
*This
= OLEOBJ_THIS(iface
);
273 FIXME("(%p)->(%s, %s)\n", This
, debugstr_w(szContainerApp
), debugstr_w(szContainerObj
));
277 static HRESULT WINAPI
OleObject_Close(IOleObject
*iface
, DWORD dwSaveOption
)
279 WebBrowser
*This
= OLEOBJ_THIS(iface
);
280 FIXME("(%p)->(%ld)\n", This
, dwSaveOption
);
284 static HRESULT WINAPI
OleObject_SetMoniker(IOleObject
*iface
, DWORD dwWhichMoniker
, IMoniker
* pmk
)
286 WebBrowser
*This
= OLEOBJ_THIS(iface
);
287 FIXME("(%p)->(%ld, %p)\n", This
, dwWhichMoniker
, pmk
);
291 static HRESULT WINAPI
OleObject_GetMoniker(IOleObject
*iface
, DWORD dwAssign
,
292 DWORD dwWhichMoniker
, LPMONIKER
*ppmk
)
294 WebBrowser
*This
= OLEOBJ_THIS(iface
);
295 FIXME("(%p)->(%ld, %ld, %p)\n", This
, dwAssign
, dwWhichMoniker
, ppmk
);
299 static HRESULT WINAPI
OleObject_InitFromData(IOleObject
*iface
, LPDATAOBJECT pDataObject
,
300 BOOL fCreation
, DWORD dwReserved
)
302 WebBrowser
*This
= OLEOBJ_THIS(iface
);
303 FIXME("(%p)->(%p, %d, %ld)\n", This
, pDataObject
, fCreation
, dwReserved
);
307 static HRESULT WINAPI
OleObject_GetClipboardData(IOleObject
*iface
, DWORD dwReserved
,
308 LPDATAOBJECT
*ppDataObject
)
310 WebBrowser
*This
= OLEOBJ_THIS(iface
);
311 FIXME("(%p)->(%ld, %p)\n", This
, dwReserved
, ppDataObject
);
315 static HRESULT WINAPI
OleObject_DoVerb(IOleObject
*iface
, LONG iVerb
, struct tagMSG
* lpmsg
,
316 LPOLECLIENTSITE pActiveSite
, LONG lindex
, HWND hwndParent
, LPCRECT lprcPosRect
)
318 WebBrowser
*This
= OLEOBJ_THIS(iface
);
320 TRACE("(%p)->(%ld %p %p %ld %p %p)\n", This
, iVerb
, lpmsg
, pActiveSite
, lindex
, hwndParent
,
326 TRACE("OLEIVERB_SHOW\n");
327 return activate_ui(This
, pActiveSite
, hwndParent
);
328 case OLEIVERB_INPLACEACTIVATE
:
329 TRACE("OLEIVERB_INPLACEACTIVATE\n");
330 return activate_inplace(This
, pActiveSite
, hwndParent
);
332 FIXME("stub for %ld\n", iVerb
);
339 static HRESULT WINAPI
OleObject_EnumVerbs(IOleObject
*iface
, IEnumOLEVERB
**ppEnumOleVerb
)
341 WebBrowser
*This
= OLEOBJ_THIS(iface
);
342 TRACE("(%p)->(%p)\n", This
, ppEnumOleVerb
);
343 return OleRegEnumVerbs(&CLSID_WebBrowser
, ppEnumOleVerb
);
346 static HRESULT WINAPI
OleObject_Update(IOleObject
*iface
)
348 WebBrowser
*This
= OLEOBJ_THIS(iface
);
349 FIXME("(%p)\n", This
);
353 static HRESULT WINAPI
OleObject_IsUpToDate(IOleObject
*iface
)
355 WebBrowser
*This
= OLEOBJ_THIS(iface
);
356 FIXME("(%p)\n", This
);
360 static HRESULT WINAPI
OleObject_GetUserClassID(IOleObject
*iface
, CLSID
* pClsid
)
362 WebBrowser
*This
= OLEOBJ_THIS(iface
);
363 FIXME("(%p)->(%p)\n", This
, pClsid
);
367 static HRESULT WINAPI
OleObject_GetUserType(IOleObject
*iface
, DWORD dwFormOfType
,
368 LPOLESTR
* pszUserType
)
370 WebBrowser
*This
= OLEOBJ_THIS(iface
);
371 TRACE("(%p, %ld, %p)\n", This
, dwFormOfType
, pszUserType
);
372 return OleRegGetUserType(&CLSID_WebBrowser
, dwFormOfType
, pszUserType
);
375 static HRESULT WINAPI
OleObject_SetExtent(IOleObject
*iface
, DWORD dwDrawAspect
, SIZEL
*psizel
)
377 WebBrowser
*This
= OLEOBJ_THIS(iface
);
378 FIXME("(%p)->(%lx %p)\n", This
, dwDrawAspect
, psizel
);
382 static HRESULT WINAPI
OleObject_GetExtent(IOleObject
*iface
, DWORD dwDrawAspect
, SIZEL
*psizel
)
384 WebBrowser
*This
= OLEOBJ_THIS(iface
);
385 FIXME("(%p)->(%lx, %p)\n", This
, dwDrawAspect
, psizel
);
389 static HRESULT WINAPI
OleObject_Advise(IOleObject
*iface
, IAdviseSink
*pAdvSink
,
390 DWORD
* pdwConnection
)
392 WebBrowser
*This
= OLEOBJ_THIS(iface
);
393 FIXME("(%p)->(%p, %p)\n", This
, pAdvSink
, pdwConnection
);
397 static HRESULT WINAPI
OleObject_Unadvise(IOleObject
*iface
, DWORD dwConnection
)
399 WebBrowser
*This
= OLEOBJ_THIS(iface
);
400 FIXME("(%p)->(%ld)\n", This
, dwConnection
);
404 static HRESULT WINAPI
OleObject_EnumAdvise(IOleObject
*iface
, IEnumSTATDATA
**ppenumAdvise
)
406 WebBrowser
*This
= OLEOBJ_THIS(iface
);
407 FIXME("(%p)->(%p)\n", This
, ppenumAdvise
);
411 static HRESULT WINAPI
OleObject_GetMiscStatus(IOleObject
*iface
, DWORD dwAspect
, DWORD
*pdwStatus
)
413 WebBrowser
*This
= OLEOBJ_THIS(iface
);
415 TRACE("(%p)->(%lx, %p)\n", This
, dwAspect
, pdwStatus
);
417 *pdwStatus
= OLEMISC_SETCLIENTSITEFIRST
|OLEMISC_ACTIVATEWHENVISIBLE
|OLEMISC_INSIDEOUT
418 |OLEMISC_CANTLINKINSIDE
|OLEMISC_RECOMPOSEONRESIZE
;
423 static HRESULT WINAPI
OleObject_SetColorScheme(IOleObject
*iface
, LOGPALETTE
* pLogpal
)
425 WebBrowser
*This
= OLEOBJ_THIS(iface
);
426 FIXME("(%p)->(%p)\n", This
, pLogpal
);
432 static const IOleObjectVtbl OleObjectVtbl
=
434 OleObject_QueryInterface
,
437 OleObject_SetClientSite
,
438 OleObject_GetClientSite
,
439 OleObject_SetHostNames
,
441 OleObject_SetMoniker
,
442 OleObject_GetMoniker
,
443 OleObject_InitFromData
,
444 OleObject_GetClipboardData
,
448 OleObject_IsUpToDate
,
449 OleObject_GetUserClassID
,
450 OleObject_GetUserType
,
455 OleObject_EnumAdvise
,
456 OleObject_GetMiscStatus
,
457 OleObject_SetColorScheme
460 /**********************************************************************
461 * Implement the IOleInPlaceObject interface
464 #define INPLACEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceObject, iface)
466 static HRESULT WINAPI
OleInPlaceObject_QueryInterface(IOleInPlaceObject
*iface
,
467 REFIID riid
, LPVOID
*ppobj
)
469 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
470 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppobj
);
473 static ULONG WINAPI
OleInPlaceObject_AddRef(IOleInPlaceObject
*iface
)
475 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
476 return IWebBrowser_AddRef(WEBBROWSER(This
));
479 static ULONG WINAPI
OleInPlaceObject_Release(IOleInPlaceObject
*iface
)
481 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
482 return IWebBrowser_Release(WEBBROWSER(This
));
485 static HRESULT WINAPI
OleInPlaceObject_GetWindow(IOleInPlaceObject
*iface
, HWND
* phwnd
)
487 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
489 TRACE("(%p)->(%p)\n", This
, phwnd
);
491 *phwnd
= This
->shell_embedding_hwnd
;
495 static HRESULT WINAPI
OleInPlaceObject_ContextSensitiveHelp(IOleInPlaceObject
*iface
,
498 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
499 FIXME("(%p)->(%x)\n", This
, fEnterMode
);
503 static HRESULT WINAPI
OleInPlaceObject_InPlaceDeactivate(IOleInPlaceObject
*iface
)
505 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
506 FIXME("(%p)\n", This
);
510 static HRESULT WINAPI
OleInPlaceObject_UIDeactivate(IOleInPlaceObject
*iface
)
512 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
513 FIXME("(%p)\n", This
);
517 static HRESULT WINAPI
OleInPlaceObject_SetObjectRects(IOleInPlaceObject
*iface
,
518 LPCRECT lprcPosRect
, LPCRECT lprcClipRect
)
520 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
522 TRACE("(%p)->(%p %p)\n", This
, lprcPosRect
, lprcClipRect
);
524 memcpy(&This
->pos_rect
, lprcPosRect
, sizeof(RECT
));
527 memcpy(&This
->clip_rect
, lprcClipRect
, sizeof(RECT
));
529 if(This
->shell_embedding_hwnd
) {
530 SetWindowPos(This
->shell_embedding_hwnd
, NULL
,
531 lprcPosRect
->left
, lprcPosRect
->top
,
532 lprcPosRect
->right
-lprcPosRect
->left
,
533 lprcPosRect
->bottom
-lprcPosRect
->top
,
534 SWP_NOZORDER
| SWP_NOACTIVATE
);
540 static HRESULT WINAPI
OleInPlaceObject_ReactivateAndUndo(IOleInPlaceObject
*iface
)
542 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
543 FIXME("(%p)\n", This
);
547 #undef INPLACEOBJ_THIS
549 static const IOleInPlaceObjectVtbl OleInPlaceObjectVtbl
=
551 OleInPlaceObject_QueryInterface
,
552 OleInPlaceObject_AddRef
,
553 OleInPlaceObject_Release
,
554 OleInPlaceObject_GetWindow
,
555 OleInPlaceObject_ContextSensitiveHelp
,
556 OleInPlaceObject_InPlaceDeactivate
,
557 OleInPlaceObject_UIDeactivate
,
558 OleInPlaceObject_SetObjectRects
,
559 OleInPlaceObject_ReactivateAndUndo
562 /**********************************************************************
563 * Implement the IOleControl interface
566 #define CONTROL_THIS(iface) DEFINE_THIS(WebBrowser, OleControl, iface)
568 static HRESULT WINAPI
OleControl_QueryInterface(IOleControl
*iface
,
569 REFIID riid
, LPVOID
*ppobj
)
571 WebBrowser
*This
= CONTROL_THIS(iface
);
572 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppobj
);
575 static ULONG WINAPI
OleControl_AddRef(IOleControl
*iface
)
577 WebBrowser
*This
= CONTROL_THIS(iface
);
578 return IWebBrowser_AddRef(WEBBROWSER(This
));
581 static ULONG WINAPI
OleControl_Release(IOleControl
*iface
)
583 WebBrowser
*This
= CONTROL_THIS(iface
);
584 return IWebBrowser_Release(WEBBROWSER(This
));
587 static HRESULT WINAPI
OleControl_GetControlInfo(IOleControl
*iface
, LPCONTROLINFO pCI
)
589 WebBrowser
*This
= CONTROL_THIS(iface
);
590 FIXME("(%p)->(%p)\n", This
, pCI
);
594 static HRESULT WINAPI
OleControl_OnMnemonic(IOleControl
*iface
, struct tagMSG
*pMsg
)
596 WebBrowser
*This
= CONTROL_THIS(iface
);
597 FIXME("(%p)->(%p)\n", This
, pMsg
);
601 static HRESULT WINAPI
OleControl_OnAmbientPropertyChange(IOleControl
*iface
, DISPID dispID
)
603 WebBrowser
*This
= CONTROL_THIS(iface
);
604 FIXME("(%p)->(%ld)\n", This
, dispID
);
608 static HRESULT WINAPI
OleControl_FreezeEvents(IOleControl
*iface
, BOOL bFreeze
)
610 WebBrowser
*This
= CONTROL_THIS(iface
);
611 FIXME("(%p)->(%x)\n", This
, bFreeze
);
617 static const IOleControlVtbl OleControlVtbl
=
619 OleControl_QueryInterface
,
622 OleControl_GetControlInfo
,
623 OleControl_OnMnemonic
,
624 OleControl_OnAmbientPropertyChange
,
625 OleControl_FreezeEvents
628 #define ACTIVEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceActiveObject, iface)
630 static HRESULT WINAPI
InPlaceActiveObject_QueryInterface(IOleInPlaceActiveObject
*iface
,
631 REFIID riid
, void **ppv
)
633 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
634 return IWebBrowser2_QueryInterface(WEBBROWSER2(This
), riid
, ppv
);
637 static ULONG WINAPI
InPlaceActiveObject_AddRef(IOleInPlaceActiveObject
*iface
)
639 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
640 return IWebBrowser2_AddRef(WEBBROWSER2(This
));
643 static ULONG WINAPI
InPlaceActiveObject_Release(IOleInPlaceActiveObject
*iface
)
645 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
646 return IWebBrowser2_Release(WEBBROWSER2(This
));
649 static HRESULT WINAPI
InPlaceActiveObject_GetWindow(IOleInPlaceActiveObject
*iface
,
652 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
653 return IOleInPlaceObject_GetWindow(INPLACEOBJ(This
), phwnd
);
656 static HRESULT WINAPI
InPlaceActiveObject_ContextSensitiveHelp(IOleInPlaceActiveObject
*iface
,
659 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
660 return IOleInPlaceObject_ContextSensitiveHelp(INPLACEOBJ(This
), fEnterMode
);
663 static HRESULT WINAPI
InPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject
*iface
,
666 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
667 FIXME("(%p)->(%p)\n", This
, lpmsg
);
671 static HRESULT WINAPI
InPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject
*iface
,
674 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
675 FIXME("(%p)->(%x)\n", This
, fActivate
);
679 static HRESULT WINAPI
InPlaceActiveObject_OnDocWindowActivate(IOleInPlaceActiveObject
*iface
,
682 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
683 FIXME("(%p)->(%x)\n", This
, fActivate
);
687 static HRESULT WINAPI
InPlaceActiveObject_ResizeBorder(IOleInPlaceActiveObject
*iface
,
688 LPCRECT lprcBorder
, IOleInPlaceUIWindow
*pUIWindow
, BOOL fFrameWindow
)
690 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
691 FIXME("(%p)->(%p %p %x)\n", This
, lprcBorder
, pUIWindow
, fFrameWindow
);
695 static HRESULT WINAPI
InPlaceActiveObject_EnableModeless(IOleInPlaceActiveObject
*iface
,
698 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
699 FIXME("(%p)->(%x)\n", This
, fEnable
);
703 #undef ACTIVEOBJ_THIS
705 static const IOleInPlaceActiveObjectVtbl OleInPlaceActiveObjectVtbl
= {
706 InPlaceActiveObject_QueryInterface
,
707 InPlaceActiveObject_AddRef
,
708 InPlaceActiveObject_Release
,
709 InPlaceActiveObject_GetWindow
,
710 InPlaceActiveObject_ContextSensitiveHelp
,
711 InPlaceActiveObject_TranslateAccelerator
,
712 InPlaceActiveObject_OnFrameWindowActivate
,
713 InPlaceActiveObject_OnDocWindowActivate
,
714 InPlaceActiveObject_ResizeBorder
,
715 InPlaceActiveObject_EnableModeless
718 #define OLECMD_THIS(iface) DEFINE_THIS(WebBrowser, OleCommandTarget, iface)
720 static HRESULT WINAPI
WBOleCommandTarget_QueryInterface(IOleCommandTarget
*iface
,
721 REFIID riid
, void **ppv
)
723 WebBrowser
*This
= OLECMD_THIS(iface
);
724 return IWebBrowser2_QueryInterface(WEBBROWSER(This
), riid
, ppv
);
727 static ULONG WINAPI
WBOleCommandTarget_AddRef(IOleCommandTarget
*iface
)
729 WebBrowser
*This
= OLECMD_THIS(iface
);
730 return IWebBrowser2_AddRef(WEBBROWSER(This
));
733 static ULONG WINAPI
WBOleCommandTarget_Release(IOleCommandTarget
*iface
)
735 WebBrowser
*This
= OLECMD_THIS(iface
);
736 return IWebBrowser2_Release(WEBBROWSER(This
));
739 static HRESULT WINAPI
WBOleCommandTarget_QueryStatus(IOleCommandTarget
*iface
,
740 const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
742 WebBrowser
*This
= OLECMD_THIS(iface
);
743 FIXME("(%p)->(%s %lu %p %p)\n", This
, debugstr_guid(pguidCmdGroup
), cCmds
, prgCmds
,
748 static HRESULT WINAPI
WBOleCommandTarget_Exec(IOleCommandTarget
*iface
,
749 const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
,
752 WebBrowser
*This
= OLECMD_THIS(iface
);
753 FIXME("(%p)->(%s %ld %ld %p %p)\n", This
, debugstr_guid(pguidCmdGroup
), nCmdID
,
754 nCmdexecopt
, pvaIn
, pvaOut
);
760 static const IOleCommandTargetVtbl OleCommandTargetVtbl
= {
761 WBOleCommandTarget_QueryInterface
,
762 WBOleCommandTarget_AddRef
,
763 WBOleCommandTarget_Release
,
764 WBOleCommandTarget_QueryStatus
,
765 WBOleCommandTarget_Exec
768 void WebBrowser_OleObject_Init(WebBrowser
*This
)
770 This
->lpOleObjectVtbl
= &OleObjectVtbl
;
771 This
->lpOleInPlaceObjectVtbl
= &OleInPlaceObjectVtbl
;
772 This
->lpOleControlVtbl
= &OleControlVtbl
;
773 This
->lpOleInPlaceActiveObjectVtbl
= &OleInPlaceActiveObjectVtbl
;
774 This
->lpOleCommandTargetVtbl
= &OleCommandTargetVtbl
;
777 This
->inplace
= NULL
;
778 This
->container
= NULL
;
780 This
->frame_hwnd
= NULL
;
782 This
->uiwindow
= NULL
;
783 This
->shell_embedding_hwnd
= NULL
;
785 memset(&This
->pos_rect
, 0, sizeof(RECT
));
786 memset(&This
->clip_rect
, 0, sizeof(RECT
));
787 memset(&This
->frameinfo
, 0, sizeof(OLEINPLACEFRAMEINFO
));
790 void WebBrowser_OleObject_Destroy(WebBrowser
*This
)
793 IOleObject_SetClientSite(OLEOBJ(This
), NULL
);
795 IOleContainer_Release(This
->container
);
797 IOleInPlaceFrame_Release(This
->frame
);
799 IOleInPlaceUIWindow_Release(This
->uiwindow
);