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"
31 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw
);
33 static ATOM shell_embedding_atom
= 0;
35 static LRESULT
resize_window(WebBrowser
*This
, LONG width
, LONG height
)
37 if(This
->doc_host
.hwnd
)
38 SetWindowPos(This
->doc_host
.hwnd
, NULL
, 0, 0, width
, height
,
39 SWP_NOZORDER
| SWP_NOACTIVATE
);
44 static LRESULT WINAPI
shell_embedding_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
48 static const WCHAR wszTHIS
[] = {'T','H','I','S',0};
50 if(msg
== WM_CREATE
) {
51 This
= *(WebBrowser
**)lParam
;
52 SetPropW(hwnd
, wszTHIS
, This
);
54 This
= GetPropW(hwnd
, wszTHIS
);
59 return resize_window(This
, LOWORD(lParam
), HIWORD(lParam
));
62 return DefWindowProcW(hwnd
, msg
, wParam
, lParam
);
65 static void create_shell_embedding_hwnd(WebBrowser
*This
)
67 IOleInPlaceSite
*inplace
;
71 static const WCHAR wszShellEmbedding
[] =
72 {'S','h','e','l','l',' ','E','m','b','e','d','d','i','n','g',0};
74 if(!shell_embedding_atom
) {
75 static WNDCLASSEXW wndclass
= {
79 0, 0 /* native uses 8 */, NULL
, NULL
, NULL
,
80 (HBRUSH
)COLOR_WINDOWFRAME
, NULL
,
84 wndclass
.hInstance
= shdocvw_hinstance
;
86 RegisterClassExW(&wndclass
);
89 hres
= IOleClientSite_QueryInterface(This
->client
, &IID_IOleInPlaceSite
, (void**)&inplace
);
91 IOleInPlaceSite_GetWindow(inplace
, &parent
);
92 IOleInPlaceSite_Release(inplace
);
95 This
->doc_host
.frame_hwnd
= This
->shell_embedding_hwnd
= CreateWindowExW(
97 wszShellEmbedding
, wszShellEmbedding
,
98 WS_CLIPSIBLINGS
| WS_CLIPCHILDREN
99 | (parent
? WS_CHILD
| WS_TABSTOP
: WS_POPUP
| WS_MAXIMIZEBOX
),
101 NULL
, shdocvw_hinstance
, This
);
103 TRACE("parent=%p hwnd=%p\n", parent
, This
->shell_embedding_hwnd
);
106 static HRESULT
activate_inplace(WebBrowser
*This
, IOleClientSite
*active_site
, HWND parent_hwnd
)
116 hres
= IOleClientSite_QueryInterface(active_site
, &IID_IOleInPlaceSite
,
117 (void**)&This
->inplace
);
119 WARN("Could not get IOleInPlaceSite\n");
123 hres
= IOleInPlaceSite_CanInPlaceActivate(This
->inplace
);
125 WARN("CanInPlaceActivate returned: %08x\n", hres
);
126 IOleInPlaceSite_Release(This
->inplace
);
130 hres
= IOleInPlaceSite_GetWindow(This
->inplace
, &This
->iphwnd
);
132 This
->iphwnd
= parent_hwnd
;
134 IOleInPlaceSite_OnInPlaceActivate(This
->inplace
);
136 IOleInPlaceSite_GetWindowContext(This
->inplace
, &This
->frame
, &This
->uiwindow
,
137 &This
->pos_rect
, &This
->clip_rect
,
140 SetWindowPos(This
->shell_embedding_hwnd
, NULL
,
141 This
->pos_rect
.left
, This
->pos_rect
.top
,
142 This
->pos_rect
.right
-This
->pos_rect
.left
,
143 This
->pos_rect
.bottom
-This
->pos_rect
.top
,
144 SWP_NOZORDER
| SWP_SHOWWINDOW
);
147 IOleClientSite_ShowObject(This
->client
);
148 IOleClientSite_GetContainer(This
->client
, &This
->container
);
152 IOleInPlaceFrame_GetWindow(This
->frame
, &This
->frame_hwnd
);
157 static HRESULT
activate_ui(WebBrowser
*This
, IOleClientSite
*active_site
, HWND parent_hwnd
)
161 static const WCHAR wszitem
[] = {'i','t','e','m',0};
166 hres
= activate_inplace(This
, active_site
, parent_hwnd
);
170 IOleInPlaceSite_OnUIActivate(This
->inplace
);
173 IOleInPlaceFrame_SetActiveObject(This
->frame
, ACTIVEOBJ(This
), wszitem
);
175 IOleInPlaceUIWindow_SetActiveObject(This
->uiwindow
, ACTIVEOBJ(This
), wszitem
);
178 IOleInPlaceFrame_SetMenu(This
->frame
, NULL
, NULL
, This
->shell_embedding_hwnd
);
180 SetFocus(This
->shell_embedding_hwnd
);
185 /**********************************************************************
186 * Implement the IOleObject interface for the WebBrowser control
189 #define OLEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleObject, iface)
191 static HRESULT WINAPI
OleObject_QueryInterface(IOleObject
*iface
, REFIID riid
, void **ppv
)
193 WebBrowser
*This
= OLEOBJ_THIS(iface
);
194 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppv
);
197 static ULONG WINAPI
OleObject_AddRef(IOleObject
*iface
)
199 WebBrowser
*This
= OLEOBJ_THIS(iface
);
200 return IWebBrowser_AddRef(WEBBROWSER(This
));
203 static ULONG WINAPI
OleObject_Release(IOleObject
*iface
)
205 WebBrowser
*This
= OLEOBJ_THIS(iface
);
206 return IWebBrowser_Release(WEBBROWSER(This
));
209 static HRESULT WINAPI
OleObject_SetClientSite(IOleObject
*iface
, LPOLECLIENTSITE pClientSite
)
211 WebBrowser
*This
= OLEOBJ_THIS(iface
);
212 IOleContainer
*container
;
215 TRACE("(%p)->(%p)\n", This
, pClientSite
);
217 if(This
->client
== pClientSite
)
220 if(This
->doc_host
.hwnd
) {
221 DestroyWindow(This
->doc_host
.hwnd
);
222 This
->doc_host
.hwnd
= NULL
;
224 if(This
->shell_embedding_hwnd
) {
225 DestroyWindow(This
->shell_embedding_hwnd
);
226 This
->shell_embedding_hwnd
= NULL
;
230 IOleInPlaceSite_Release(This
->inplace
);
231 This
->inplace
= NULL
;
234 if(This
->doc_host
.hostui
)
235 IDocHostUIHandler_Release(This
->doc_host
.hostui
);
237 IOleClientSite_Release(This
->client
);
240 if(This
->doc_host
.document
)
241 deactivate_document(&This
->doc_host
);
246 This
->client
= pClientSite
;
247 IOleClientSite_AddRef(pClientSite
);
249 hres
= IOleClientSite_QueryInterface(This
->client
, &IID_IDocHostUIHandler
,
250 (void**)&This
->doc_host
.hostui
);
252 This
->doc_host
.hostui
= NULL
;
254 hres
= IOleClientSite_GetContainer(This
->client
, &container
);
255 if(SUCCEEDED(hres
)) {
256 ITargetContainer
*target_container
;
258 hres
= IOleContainer_QueryInterface(container
, &IID_ITargetContainer
,
259 (void**)&target_container
);
260 if(SUCCEEDED(hres
)) {
261 FIXME("Unsupported ITargetContainer\n");
262 ITargetContainer_Release(target_container
);
265 IOleContainer_Release(container
);
268 create_shell_embedding_hwnd(This
);
273 static HRESULT WINAPI
OleObject_GetClientSite(IOleObject
*iface
, LPOLECLIENTSITE
*ppClientSite
)
275 WebBrowser
*This
= OLEOBJ_THIS(iface
);
277 TRACE("(%p)->(%p)\n", This
, ppClientSite
);
283 IOleClientSite_AddRef(This
->client
);
284 *ppClientSite
= This
->client
;
289 static HRESULT WINAPI
OleObject_SetHostNames(IOleObject
*iface
, LPCOLESTR szContainerApp
,
290 LPCOLESTR szContainerObj
)
292 WebBrowser
*This
= OLEOBJ_THIS(iface
);
293 FIXME("(%p)->(%s, %s)\n", This
, debugstr_w(szContainerApp
), debugstr_w(szContainerObj
));
297 static HRESULT WINAPI
OleObject_Close(IOleObject
*iface
, DWORD dwSaveOption
)
299 WebBrowser
*This
= OLEOBJ_THIS(iface
);
300 FIXME("(%p)->(%d)\n", This
, dwSaveOption
);
304 static HRESULT WINAPI
OleObject_SetMoniker(IOleObject
*iface
, DWORD dwWhichMoniker
, IMoniker
* pmk
)
306 WebBrowser
*This
= OLEOBJ_THIS(iface
);
307 FIXME("(%p)->(%d, %p)\n", This
, dwWhichMoniker
, pmk
);
311 static HRESULT WINAPI
OleObject_GetMoniker(IOleObject
*iface
, DWORD dwAssign
,
312 DWORD dwWhichMoniker
, LPMONIKER
*ppmk
)
314 WebBrowser
*This
= OLEOBJ_THIS(iface
);
315 FIXME("(%p)->(%d, %d, %p)\n", This
, dwAssign
, dwWhichMoniker
, ppmk
);
319 static HRESULT WINAPI
OleObject_InitFromData(IOleObject
*iface
, LPDATAOBJECT pDataObject
,
320 BOOL fCreation
, DWORD dwReserved
)
322 WebBrowser
*This
= OLEOBJ_THIS(iface
);
323 FIXME("(%p)->(%p, %d, %d)\n", This
, pDataObject
, fCreation
, dwReserved
);
327 static HRESULT WINAPI
OleObject_GetClipboardData(IOleObject
*iface
, DWORD dwReserved
,
328 LPDATAOBJECT
*ppDataObject
)
330 WebBrowser
*This
= OLEOBJ_THIS(iface
);
331 FIXME("(%p)->(%d, %p)\n", This
, dwReserved
, ppDataObject
);
335 static HRESULT WINAPI
OleObject_DoVerb(IOleObject
*iface
, LONG iVerb
, struct tagMSG
* lpmsg
,
336 LPOLECLIENTSITE pActiveSite
, LONG lindex
, HWND hwndParent
, LPCRECT lprcPosRect
)
338 WebBrowser
*This
= OLEOBJ_THIS(iface
);
340 TRACE("(%p)->(%d %p %p %d %p %p)\n", This
, iVerb
, lpmsg
, pActiveSite
, lindex
, hwndParent
,
346 TRACE("OLEIVERB_SHOW\n");
347 return activate_ui(This
, pActiveSite
, hwndParent
);
348 case OLEIVERB_UIACTIVATE
:
349 TRACE("OLEIVERB_UIACTIVATE\n");
350 return activate_ui(This
, pActiveSite
, hwndParent
);
351 case OLEIVERB_INPLACEACTIVATE
:
352 TRACE("OLEIVERB_INPLACEACTIVATE\n");
353 return activate_inplace(This
, pActiveSite
, hwndParent
);
355 FIXME("stub for %d\n", iVerb
);
362 static HRESULT WINAPI
OleObject_EnumVerbs(IOleObject
*iface
, IEnumOLEVERB
**ppEnumOleVerb
)
364 WebBrowser
*This
= OLEOBJ_THIS(iface
);
365 TRACE("(%p)->(%p)\n", This
, ppEnumOleVerb
);
366 return OleRegEnumVerbs(&CLSID_WebBrowser
, ppEnumOleVerb
);
369 static HRESULT WINAPI
OleObject_Update(IOleObject
*iface
)
371 WebBrowser
*This
= OLEOBJ_THIS(iface
);
372 FIXME("(%p)\n", This
);
376 static HRESULT WINAPI
OleObject_IsUpToDate(IOleObject
*iface
)
378 WebBrowser
*This
= OLEOBJ_THIS(iface
);
379 FIXME("(%p)\n", This
);
383 static HRESULT WINAPI
OleObject_GetUserClassID(IOleObject
*iface
, CLSID
* pClsid
)
385 WebBrowser
*This
= OLEOBJ_THIS(iface
);
386 FIXME("(%p)->(%p)\n", This
, pClsid
);
390 static HRESULT WINAPI
OleObject_GetUserType(IOleObject
*iface
, DWORD dwFormOfType
,
391 LPOLESTR
* pszUserType
)
393 WebBrowser
*This
= OLEOBJ_THIS(iface
);
394 TRACE("(%p, %d, %p)\n", This
, dwFormOfType
, pszUserType
);
395 return OleRegGetUserType(&CLSID_WebBrowser
, dwFormOfType
, pszUserType
);
398 static HRESULT WINAPI
OleObject_SetExtent(IOleObject
*iface
, DWORD dwDrawAspect
, SIZEL
*psizel
)
400 WebBrowser
*This
= OLEOBJ_THIS(iface
);
402 TRACE("(%p)->(%x %p)\n", This
, dwDrawAspect
, psizel
);
404 /* Tests show that dwDrawAspect is ignored */
405 memcpy(&This
->extent
, psizel
, sizeof(SIZEL
));
409 static HRESULT WINAPI
OleObject_GetExtent(IOleObject
*iface
, DWORD dwDrawAspect
, SIZEL
*psizel
)
411 WebBrowser
*This
= OLEOBJ_THIS(iface
);
413 TRACE("(%p)->(%x, %p)\n", This
, dwDrawAspect
, psizel
);
415 /* Tests show that dwDrawAspect is ignored */
416 memcpy(psizel
, &This
->extent
, sizeof(SIZEL
));
420 static HRESULT WINAPI
OleObject_Advise(IOleObject
*iface
, IAdviseSink
*pAdvSink
,
421 DWORD
* pdwConnection
)
423 WebBrowser
*This
= OLEOBJ_THIS(iface
);
424 FIXME("(%p)->(%p, %p)\n", This
, pAdvSink
, pdwConnection
);
428 static HRESULT WINAPI
OleObject_Unadvise(IOleObject
*iface
, DWORD dwConnection
)
430 WebBrowser
*This
= OLEOBJ_THIS(iface
);
431 FIXME("(%p)->(%d)\n", This
, dwConnection
);
435 static HRESULT WINAPI
OleObject_EnumAdvise(IOleObject
*iface
, IEnumSTATDATA
**ppenumAdvise
)
437 WebBrowser
*This
= OLEOBJ_THIS(iface
);
438 FIXME("(%p)->(%p)\n", This
, ppenumAdvise
);
442 static HRESULT WINAPI
OleObject_GetMiscStatus(IOleObject
*iface
, DWORD dwAspect
, DWORD
*pdwStatus
)
444 WebBrowser
*This
= OLEOBJ_THIS(iface
);
446 TRACE("(%p)->(%x, %p)\n", This
, dwAspect
, pdwStatus
);
448 *pdwStatus
= OLEMISC_SETCLIENTSITEFIRST
|OLEMISC_ACTIVATEWHENVISIBLE
|OLEMISC_INSIDEOUT
449 |OLEMISC_CANTLINKINSIDE
|OLEMISC_RECOMPOSEONRESIZE
;
454 static HRESULT WINAPI
OleObject_SetColorScheme(IOleObject
*iface
, LOGPALETTE
* pLogpal
)
456 WebBrowser
*This
= OLEOBJ_THIS(iface
);
457 FIXME("(%p)->(%p)\n", This
, pLogpal
);
463 static const IOleObjectVtbl OleObjectVtbl
=
465 OleObject_QueryInterface
,
468 OleObject_SetClientSite
,
469 OleObject_GetClientSite
,
470 OleObject_SetHostNames
,
472 OleObject_SetMoniker
,
473 OleObject_GetMoniker
,
474 OleObject_InitFromData
,
475 OleObject_GetClipboardData
,
479 OleObject_IsUpToDate
,
480 OleObject_GetUserClassID
,
481 OleObject_GetUserType
,
486 OleObject_EnumAdvise
,
487 OleObject_GetMiscStatus
,
488 OleObject_SetColorScheme
491 /**********************************************************************
492 * Implement the IOleInPlaceObject interface
495 #define INPLACEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceObject, iface)
497 static HRESULT WINAPI
OleInPlaceObject_QueryInterface(IOleInPlaceObject
*iface
,
498 REFIID riid
, LPVOID
*ppobj
)
500 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
501 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppobj
);
504 static ULONG WINAPI
OleInPlaceObject_AddRef(IOleInPlaceObject
*iface
)
506 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
507 return IWebBrowser_AddRef(WEBBROWSER(This
));
510 static ULONG WINAPI
OleInPlaceObject_Release(IOleInPlaceObject
*iface
)
512 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
513 return IWebBrowser_Release(WEBBROWSER(This
));
516 static HRESULT WINAPI
OleInPlaceObject_GetWindow(IOleInPlaceObject
*iface
, HWND
* phwnd
)
518 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
520 TRACE("(%p)->(%p)\n", This
, phwnd
);
522 *phwnd
= This
->shell_embedding_hwnd
;
526 static HRESULT WINAPI
OleInPlaceObject_ContextSensitiveHelp(IOleInPlaceObject
*iface
,
529 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
530 FIXME("(%p)->(%x)\n", This
, fEnterMode
);
534 static HRESULT WINAPI
OleInPlaceObject_InPlaceDeactivate(IOleInPlaceObject
*iface
)
536 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
537 FIXME("(%p)\n", This
);
541 static HRESULT WINAPI
OleInPlaceObject_UIDeactivate(IOleInPlaceObject
*iface
)
543 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
544 FIXME("(%p)\n", This
);
548 static HRESULT WINAPI
OleInPlaceObject_SetObjectRects(IOleInPlaceObject
*iface
,
549 LPCRECT lprcPosRect
, LPCRECT lprcClipRect
)
551 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
553 TRACE("(%p)->(%p %p)\n", This
, lprcPosRect
, lprcClipRect
);
555 memcpy(&This
->pos_rect
, lprcPosRect
, sizeof(RECT
));
558 memcpy(&This
->clip_rect
, lprcClipRect
, sizeof(RECT
));
560 if(This
->shell_embedding_hwnd
) {
561 SetWindowPos(This
->shell_embedding_hwnd
, NULL
,
562 lprcPosRect
->left
, lprcPosRect
->top
,
563 lprcPosRect
->right
-lprcPosRect
->left
,
564 lprcPosRect
->bottom
-lprcPosRect
->top
,
565 SWP_NOZORDER
| SWP_NOACTIVATE
);
571 static HRESULT WINAPI
OleInPlaceObject_ReactivateAndUndo(IOleInPlaceObject
*iface
)
573 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
574 FIXME("(%p)\n", This
);
578 #undef INPLACEOBJ_THIS
580 static const IOleInPlaceObjectVtbl OleInPlaceObjectVtbl
=
582 OleInPlaceObject_QueryInterface
,
583 OleInPlaceObject_AddRef
,
584 OleInPlaceObject_Release
,
585 OleInPlaceObject_GetWindow
,
586 OleInPlaceObject_ContextSensitiveHelp
,
587 OleInPlaceObject_InPlaceDeactivate
,
588 OleInPlaceObject_UIDeactivate
,
589 OleInPlaceObject_SetObjectRects
,
590 OleInPlaceObject_ReactivateAndUndo
593 /**********************************************************************
594 * Implement the IOleControl interface
597 #define CONTROL_THIS(iface) DEFINE_THIS(WebBrowser, OleControl, iface)
599 static HRESULT WINAPI
OleControl_QueryInterface(IOleControl
*iface
,
600 REFIID riid
, LPVOID
*ppobj
)
602 WebBrowser
*This
= CONTROL_THIS(iface
);
603 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppobj
);
606 static ULONG WINAPI
OleControl_AddRef(IOleControl
*iface
)
608 WebBrowser
*This
= CONTROL_THIS(iface
);
609 return IWebBrowser_AddRef(WEBBROWSER(This
));
612 static ULONG WINAPI
OleControl_Release(IOleControl
*iface
)
614 WebBrowser
*This
= CONTROL_THIS(iface
);
615 return IWebBrowser_Release(WEBBROWSER(This
));
618 static HRESULT WINAPI
OleControl_GetControlInfo(IOleControl
*iface
, LPCONTROLINFO pCI
)
620 WebBrowser
*This
= CONTROL_THIS(iface
);
622 TRACE("(%p)->(%p)\n", This
, pCI
);
624 /* Tests show that this function should be not implemented */
628 static HRESULT WINAPI
OleControl_OnMnemonic(IOleControl
*iface
, struct tagMSG
*pMsg
)
630 WebBrowser
*This
= CONTROL_THIS(iface
);
631 FIXME("(%p)->(%p)\n", This
, pMsg
);
635 static HRESULT WINAPI
OleControl_OnAmbientPropertyChange(IOleControl
*iface
, DISPID dispID
)
637 WebBrowser
*This
= CONTROL_THIS(iface
);
638 FIXME("(%p)->(%d)\n", This
, dispID
);
642 static HRESULT WINAPI
OleControl_FreezeEvents(IOleControl
*iface
, BOOL bFreeze
)
644 WebBrowser
*This
= CONTROL_THIS(iface
);
645 FIXME("(%p)->(%x)\n", This
, bFreeze
);
651 static const IOleControlVtbl OleControlVtbl
=
653 OleControl_QueryInterface
,
656 OleControl_GetControlInfo
,
657 OleControl_OnMnemonic
,
658 OleControl_OnAmbientPropertyChange
,
659 OleControl_FreezeEvents
662 #define ACTIVEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceActiveObject, iface)
664 static HRESULT WINAPI
InPlaceActiveObject_QueryInterface(IOleInPlaceActiveObject
*iface
,
665 REFIID riid
, void **ppv
)
667 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
668 return IWebBrowser2_QueryInterface(WEBBROWSER2(This
), riid
, ppv
);
671 static ULONG WINAPI
InPlaceActiveObject_AddRef(IOleInPlaceActiveObject
*iface
)
673 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
674 return IWebBrowser2_AddRef(WEBBROWSER2(This
));
677 static ULONG WINAPI
InPlaceActiveObject_Release(IOleInPlaceActiveObject
*iface
)
679 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
680 return IWebBrowser2_Release(WEBBROWSER2(This
));
683 static HRESULT WINAPI
InPlaceActiveObject_GetWindow(IOleInPlaceActiveObject
*iface
,
686 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
687 return IOleInPlaceObject_GetWindow(INPLACEOBJ(This
), phwnd
);
690 static HRESULT WINAPI
InPlaceActiveObject_ContextSensitiveHelp(IOleInPlaceActiveObject
*iface
,
693 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
694 return IOleInPlaceObject_ContextSensitiveHelp(INPLACEOBJ(This
), fEnterMode
);
697 static HRESULT WINAPI
InPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject
*iface
,
700 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
701 FIXME("(%p)->(%p)\n", This
, lpmsg
);
705 static HRESULT WINAPI
InPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject
*iface
,
708 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
709 FIXME("(%p)->(%x)\n", This
, fActivate
);
713 static HRESULT WINAPI
InPlaceActiveObject_OnDocWindowActivate(IOleInPlaceActiveObject
*iface
,
716 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
717 FIXME("(%p)->(%x)\n", This
, fActivate
);
721 static HRESULT WINAPI
InPlaceActiveObject_ResizeBorder(IOleInPlaceActiveObject
*iface
,
722 LPCRECT lprcBorder
, IOleInPlaceUIWindow
*pUIWindow
, BOOL fFrameWindow
)
724 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
725 FIXME("(%p)->(%p %p %x)\n", This
, lprcBorder
, pUIWindow
, fFrameWindow
);
729 static HRESULT WINAPI
InPlaceActiveObject_EnableModeless(IOleInPlaceActiveObject
*iface
,
732 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
733 FIXME("(%p)->(%x)\n", This
, fEnable
);
737 #undef ACTIVEOBJ_THIS
739 static const IOleInPlaceActiveObjectVtbl OleInPlaceActiveObjectVtbl
= {
740 InPlaceActiveObject_QueryInterface
,
741 InPlaceActiveObject_AddRef
,
742 InPlaceActiveObject_Release
,
743 InPlaceActiveObject_GetWindow
,
744 InPlaceActiveObject_ContextSensitiveHelp
,
745 InPlaceActiveObject_TranslateAccelerator
,
746 InPlaceActiveObject_OnFrameWindowActivate
,
747 InPlaceActiveObject_OnDocWindowActivate
,
748 InPlaceActiveObject_ResizeBorder
,
749 InPlaceActiveObject_EnableModeless
752 #define OLECMD_THIS(iface) DEFINE_THIS(WebBrowser, OleCommandTarget, iface)
754 static HRESULT WINAPI
WBOleCommandTarget_QueryInterface(IOleCommandTarget
*iface
,
755 REFIID riid
, void **ppv
)
757 WebBrowser
*This
= OLECMD_THIS(iface
);
758 return IWebBrowser2_QueryInterface(WEBBROWSER(This
), riid
, ppv
);
761 static ULONG WINAPI
WBOleCommandTarget_AddRef(IOleCommandTarget
*iface
)
763 WebBrowser
*This
= OLECMD_THIS(iface
);
764 return IWebBrowser2_AddRef(WEBBROWSER(This
));
767 static ULONG WINAPI
WBOleCommandTarget_Release(IOleCommandTarget
*iface
)
769 WebBrowser
*This
= OLECMD_THIS(iface
);
770 return IWebBrowser2_Release(WEBBROWSER(This
));
773 static HRESULT WINAPI
WBOleCommandTarget_QueryStatus(IOleCommandTarget
*iface
,
774 const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
776 WebBrowser
*This
= OLECMD_THIS(iface
);
777 FIXME("(%p)->(%s %u %p %p)\n", This
, debugstr_guid(pguidCmdGroup
), cCmds
, prgCmds
,
782 static HRESULT WINAPI
WBOleCommandTarget_Exec(IOleCommandTarget
*iface
,
783 const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
,
786 WebBrowser
*This
= OLECMD_THIS(iface
);
787 FIXME("(%p)->(%s %d %d %p %p)\n", This
, debugstr_guid(pguidCmdGroup
), nCmdID
,
788 nCmdexecopt
, pvaIn
, pvaOut
);
794 static const IOleCommandTargetVtbl OleCommandTargetVtbl
= {
795 WBOleCommandTarget_QueryInterface
,
796 WBOleCommandTarget_AddRef
,
797 WBOleCommandTarget_Release
,
798 WBOleCommandTarget_QueryStatus
,
799 WBOleCommandTarget_Exec
802 void WebBrowser_OleObject_Init(WebBrowser
*This
)
804 This
->lpOleObjectVtbl
= &OleObjectVtbl
;
805 This
->lpOleInPlaceObjectVtbl
= &OleInPlaceObjectVtbl
;
806 This
->lpOleControlVtbl
= &OleControlVtbl
;
807 This
->lpOleInPlaceActiveObjectVtbl
= &OleInPlaceActiveObjectVtbl
;
808 This
->lpOleCommandTargetVtbl
= &OleCommandTargetVtbl
;
811 This
->inplace
= NULL
;
812 This
->container
= NULL
;
814 This
->frame_hwnd
= NULL
;
816 This
->uiwindow
= NULL
;
817 This
->shell_embedding_hwnd
= NULL
;
819 memset(&This
->pos_rect
, 0, sizeof(RECT
));
820 memset(&This
->clip_rect
, 0, sizeof(RECT
));
821 memset(&This
->frameinfo
, 0, sizeof(OLEINPLACEFRAMEINFO
));
823 This
->extent
.cx
= 1323;
824 This
->extent
.cy
= 529;
827 void WebBrowser_OleObject_Destroy(WebBrowser
*This
)
830 IOleObject_SetClientSite(OLEOBJ(This
), NULL
);
832 IOleContainer_Release(This
->container
);
834 IOleInPlaceFrame_Release(This
->frame
);
836 IOleInPlaceUIWindow_Release(This
->uiwindow
);