shdocvw: Set active document of both frame and doc window.
[wine/hacks.git] / dlls / shdocvw / oleobject.c
blob32d7452e95001c41b4eb57ee902fdba9d3c2a02e
1 /*
2 * Implementation of IOleObject interfaces for WebBrowser control
4 * - IOleObject
5 * - IOleInPlaceObject
6 * - IOleControl
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 #include <string.h>
27 #include "wine/debug.h"
28 #include "shdocvw.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_view_hwnd)
37 SetWindowPos(This->doc_view_hwnd, NULL, 0, 0, width, height,
38 SWP_NOZORDER | SWP_NOACTIVATE);
40 return 0;
43 static LRESULT WINAPI shell_embedding_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
45 WebBrowser *This;
47 static const WCHAR wszTHIS[] = {'T','H','I','S',0};
49 if(msg == WM_CREATE) {
50 This = *(WebBrowser**)lParam;
51 SetPropW(hwnd, wszTHIS, This);
52 }else {
53 This = GetPropW(hwnd, wszTHIS);
56 switch(msg) {
57 case WM_SIZE:
58 return resize_window(This, LOWORD(lParam), HIWORD(lParam));
61 return DefWindowProcA(hwnd, msg, wParam, lParam);
64 static void create_shell_embedding_hwnd(WebBrowser *This)
66 IOleInPlaceSite *inplace;
67 HWND parent = NULL;
68 HRESULT hres;
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 = {
75 sizeof(wndclass),
76 CS_DBLCLKS,
77 shell_embedding_proc,
78 0, 0 /* native uses 8 */, NULL, NULL, NULL,
79 (HBRUSH)COLOR_WINDOWFRAME, NULL,
80 wszShellEmbedding,
81 NULL
83 wndclass.hInstance = shdocvw_hinstance;
85 RegisterClassExW(&wndclass);
88 hres = IOleClientSite_QueryInterface(This->client, &IID_IOleInPlaceSite, (void**)&inplace);
89 if(SUCCEEDED(hres)) {
90 IOleInPlaceSite_GetWindow(inplace, &parent);
91 IOleInPlaceSite_Release(inplace);
94 This->shell_embedding_hwnd = CreateWindowExW(0, wszShellEmbedding, wszShellEmbedding,
95 WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_TABSTOP | WS_MAXIMIZEBOX,
96 0, 0, 0, 0, parent,
97 NULL, shdocvw_hinstance, This);
100 /**********************************************************************
101 * Implement the IOleObject interface for the WebBrowser control
104 #define OLEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleObject, iface)
106 static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, void **ppv)
108 WebBrowser *This = OLEOBJ_THIS(iface);
109 return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppv);
112 static ULONG WINAPI OleObject_AddRef(IOleObject *iface)
114 WebBrowser *This = OLEOBJ_THIS(iface);
115 return IWebBrowser_AddRef(WEBBROWSER(This));
118 static ULONG WINAPI OleObject_Release(IOleObject *iface)
120 WebBrowser *This = OLEOBJ_THIS(iface);
121 return IWebBrowser_Release(WEBBROWSER(This));
124 static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE pClientSite)
126 WebBrowser *This = OLEOBJ_THIS(iface);
127 HRESULT hres;
129 TRACE("(%p)->(%p)\n", This, pClientSite);
131 if(This->client == pClientSite)
132 return S_OK;
134 if(This->doc_view_hwnd) {
135 DestroyWindow(This->doc_view_hwnd);
136 This->doc_view_hwnd = NULL;
138 if(This->shell_embedding_hwnd) {
139 DestroyWindow(This->shell_embedding_hwnd);
140 This->shell_embedding_hwnd = NULL;
143 if(This->hostui)
144 IDocHostUIHandler_Release(This->hostui);
145 if(This->client)
146 IOleClientSite_Release(This->client);
148 if(!pClientSite) {
149 if(This->document)
150 deactivate_document(This);
151 This->client = NULL;
152 return S_OK;
155 This->client = pClientSite;
156 IOleClientSite_AddRef(pClientSite);
158 hres = IOleClientSite_QueryInterface(This->client, &IID_IDocHostUIHandler,
159 (void**)&This->hostui);
160 if(FAILED(hres))
161 This->hostui = NULL;
163 create_shell_embedding_hwnd(This);
165 return S_OK;
168 static HRESULT WINAPI OleObject_GetClientSite(IOleObject *iface, LPOLECLIENTSITE *ppClientSite)
170 WebBrowser *This = OLEOBJ_THIS(iface);
172 TRACE("(%p)->(%p)\n", This, ppClientSite);
174 if(!ppClientSite)
175 return E_INVALIDARG;
177 if(This->client)
178 IOleClientSite_AddRef(This->client);
179 *ppClientSite = This->client;
181 return S_OK;
184 static HRESULT WINAPI OleObject_SetHostNames(IOleObject *iface, LPCOLESTR szContainerApp,
185 LPCOLESTR szContainerObj)
187 WebBrowser *This = OLEOBJ_THIS(iface);
188 FIXME("(%p)->(%s, %s)\n", This, debugstr_w(szContainerApp), debugstr_w(szContainerObj));
189 return E_NOTIMPL;
192 static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD dwSaveOption)
194 WebBrowser *This = OLEOBJ_THIS(iface);
195 FIXME("(%p)->(%ld)\n", This, dwSaveOption);
196 return E_NOTIMPL;
199 static HRESULT WINAPI OleObject_SetMoniker(IOleObject *iface, DWORD dwWhichMoniker, IMoniker* pmk)
201 WebBrowser *This = OLEOBJ_THIS(iface);
202 FIXME("(%p)->(%ld, %p)\n", This, dwWhichMoniker, pmk);
203 return E_NOTIMPL;
206 static HRESULT WINAPI OleObject_GetMoniker(IOleObject *iface, DWORD dwAssign,
207 DWORD dwWhichMoniker, LPMONIKER *ppmk)
209 WebBrowser *This = OLEOBJ_THIS(iface);
210 FIXME("(%p)->(%ld, %ld, %p)\n", This, dwAssign, dwWhichMoniker, ppmk);
211 return E_NOTIMPL;
214 static HRESULT WINAPI OleObject_InitFromData(IOleObject *iface, LPDATAOBJECT pDataObject,
215 BOOL fCreation, DWORD dwReserved)
217 WebBrowser *This = OLEOBJ_THIS(iface);
218 FIXME("(%p)->(%p, %d, %ld)\n", This, pDataObject, fCreation, dwReserved);
219 return E_NOTIMPL;
222 static HRESULT WINAPI OleObject_GetClipboardData(IOleObject *iface, DWORD dwReserved,
223 LPDATAOBJECT *ppDataObject)
225 WebBrowser *This = OLEOBJ_THIS(iface);
226 FIXME("(%p)->(%ld, %p)\n", This, dwReserved, ppDataObject);
227 return E_NOTIMPL;
230 static HRESULT WINAPI OleObject_DoVerb(IOleObject *iface, LONG iVerb, struct tagMSG* lpmsg,
231 LPOLECLIENTSITE pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
233 WebBrowser *This = OLEOBJ_THIS(iface);
234 HRESULT hres;
236 static const WCHAR wszitem[] = {'i','t','e','m',0};
238 TRACE("(%p)->(%ld %p %p %ld %p %p)\n", This, iVerb, lpmsg, pActiveSite, lindex, hwndParent,
239 lprcPosRect);
241 switch (iVerb)
243 case OLEIVERB_SHOW:
244 case OLEIVERB_INPLACEACTIVATE: {
245 IOleInPlaceSite *inplace;
247 TRACE("OLEIVERB_INPLACEACTIVATE\n");
249 if(!pActiveSite)
250 return E_INVALIDARG;
252 hres = IOleClientSite_QueryInterface(pActiveSite, &IID_IOleInPlaceSite, (void**)&inplace);
253 if(FAILED(hres)) {
254 WARN("Could not get IOleInPlaceSite\n");
255 return hres;
258 hres = IOleInPlaceSite_CanInPlaceActivate(inplace);
259 if(hres != S_OK) {
260 WARN("CanInPlaceActivate returned: %08lx\n", hres);
261 IOleInPlaceSite_Release(inplace);
262 return E_FAIL;
265 hres = IOleInPlaceSite_GetWindow(inplace, &This->iphwnd);
266 if(FAILED(hres))
267 This->iphwnd = hwndParent;
269 IOleInPlaceSite_OnInPlaceActivate(inplace);
271 IOleInPlaceSite_GetWindowContext(inplace, &This->frame, &This->uiwindow,
272 &This->pos_rect, &This->clip_rect,
273 &This->frameinfo);
276 if(iVerb == OLEIVERB_INPLACEACTIVATE)
277 IOleInPlaceSite_Release(inplace);
279 SetWindowPos(This->shell_embedding_hwnd, NULL,
280 This->pos_rect.left, This->pos_rect.top,
281 This->pos_rect.right-This->pos_rect.left,
282 This->pos_rect.bottom-This->pos_rect.top,
283 SWP_NOZORDER | SWP_SHOWWINDOW);
285 if(This->client) {
286 IOleClientSite_ShowObject(This->client);
287 IOleClientSite_GetContainer(This->client, &This->container);
290 if(This->frame)
291 IOleInPlaceFrame_GetWindow(This->frame, &This->frame_hwnd);
293 if(iVerb == OLEIVERB_INPLACEACTIVATE)
294 return S_OK;
296 TRACE("OLEIVERB_SHOW\n");
298 IOleInPlaceSite_OnUIActivate(inplace);
299 IOleInPlaceSite_Release(inplace);
301 if(This->frame)
302 IOleInPlaceFrame_SetActiveObject(This->frame, ACTIVEOBJ(This), wszitem);
303 if(This->uiwindow)
304 IOleInPlaceUIWindow_SetActiveObject(This->uiwindow, ACTIVEOBJ(This), wszitem);
306 /* TODO:
307 * IOleInPlaceFrmae_SetMenu
310 return S_OK;
312 default:
313 FIXME("stub for %ld\n", iVerb);
314 break;
317 return E_NOTIMPL;
320 static HRESULT WINAPI OleObject_EnumVerbs(IOleObject *iface, IEnumOLEVERB **ppEnumOleVerb)
322 WebBrowser *This = OLEOBJ_THIS(iface);
323 TRACE("(%p)->(%p)\n", This, ppEnumOleVerb);
324 return OleRegEnumVerbs(&CLSID_WebBrowser, ppEnumOleVerb);
327 static HRESULT WINAPI OleObject_Update(IOleObject *iface)
329 WebBrowser *This = OLEOBJ_THIS(iface);
330 FIXME("(%p)\n", This);
331 return E_NOTIMPL;
334 static HRESULT WINAPI OleObject_IsUpToDate(IOleObject *iface)
336 WebBrowser *This = OLEOBJ_THIS(iface);
337 FIXME("(%p)\n", This);
338 return E_NOTIMPL;
341 static HRESULT WINAPI OleObject_GetUserClassID(IOleObject *iface, CLSID* pClsid)
343 WebBrowser *This = OLEOBJ_THIS(iface);
344 FIXME("(%p)->(%p)\n", This, pClsid);
345 return E_NOTIMPL;
348 static HRESULT WINAPI OleObject_GetUserType(IOleObject *iface, DWORD dwFormOfType,
349 LPOLESTR* pszUserType)
351 WebBrowser *This = OLEOBJ_THIS(iface);
352 TRACE("(%p, %ld, %p)\n", This, dwFormOfType, pszUserType);
353 return OleRegGetUserType(&CLSID_WebBrowser, dwFormOfType, pszUserType);
356 static HRESULT WINAPI OleObject_SetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
358 WebBrowser *This = OLEOBJ_THIS(iface);
359 FIXME("(%p)->(%lx %p)\n", This, dwDrawAspect, psizel);
360 return E_NOTIMPL;
363 static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
365 WebBrowser *This = OLEOBJ_THIS(iface);
366 FIXME("(%p)->(%lx, %p)\n", This, dwDrawAspect, psizel);
367 return E_NOTIMPL;
370 static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *pAdvSink,
371 DWORD* pdwConnection)
373 WebBrowser *This = OLEOBJ_THIS(iface);
374 FIXME("(%p)->(%p, %p)\n", This, pAdvSink, pdwConnection);
375 return E_NOTIMPL;
378 static HRESULT WINAPI OleObject_Unadvise(IOleObject *iface, DWORD dwConnection)
380 WebBrowser *This = OLEOBJ_THIS(iface);
381 FIXME("(%p)->(%ld)\n", This, dwConnection);
382 return E_NOTIMPL;
385 static HRESULT WINAPI OleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ppenumAdvise)
387 WebBrowser *This = OLEOBJ_THIS(iface);
388 FIXME("(%p)->(%p)\n", This, ppenumAdvise);
389 return S_OK;
392 static HRESULT WINAPI OleObject_GetMiscStatus(IOleObject *iface, DWORD dwAspect, DWORD *pdwStatus)
394 WebBrowser *This = OLEOBJ_THIS(iface);
395 HRESULT hres;
397 TRACE("(%p)->(%lx, %p)\n", This, dwAspect, pdwStatus);
399 hres = OleRegGetMiscStatus(&CLSID_WebBrowser, dwAspect, pdwStatus);
401 if (FAILED(hres))
402 *pdwStatus = 0;
404 return S_OK;
407 static HRESULT WINAPI OleObject_SetColorScheme(IOleObject *iface, LOGPALETTE* pLogpal)
409 WebBrowser *This = OLEOBJ_THIS(iface);
410 FIXME("(%p)->(%p)\n", This, pLogpal);
411 return E_NOTIMPL;
414 #undef OLEOBJ_THIS
416 static const IOleObjectVtbl OleObjectVtbl =
418 OleObject_QueryInterface,
419 OleObject_AddRef,
420 OleObject_Release,
421 OleObject_SetClientSite,
422 OleObject_GetClientSite,
423 OleObject_SetHostNames,
424 OleObject_Close,
425 OleObject_SetMoniker,
426 OleObject_GetMoniker,
427 OleObject_InitFromData,
428 OleObject_GetClipboardData,
429 OleObject_DoVerb,
430 OleObject_EnumVerbs,
431 OleObject_Update,
432 OleObject_IsUpToDate,
433 OleObject_GetUserClassID,
434 OleObject_GetUserType,
435 OleObject_SetExtent,
436 OleObject_GetExtent,
437 OleObject_Advise,
438 OleObject_Unadvise,
439 OleObject_EnumAdvise,
440 OleObject_GetMiscStatus,
441 OleObject_SetColorScheme
444 /**********************************************************************
445 * Implement the IOleInPlaceObject interface
448 #define INPLACEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceObject, iface)
450 static HRESULT WINAPI OleInPlaceObject_QueryInterface(IOleInPlaceObject *iface,
451 REFIID riid, LPVOID *ppobj)
453 WebBrowser *This = INPLACEOBJ_THIS(iface);
454 return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj);
457 static ULONG WINAPI OleInPlaceObject_AddRef(IOleInPlaceObject *iface)
459 WebBrowser *This = INPLACEOBJ_THIS(iface);
460 return IWebBrowser_AddRef(WEBBROWSER(This));
463 static ULONG WINAPI OleInPlaceObject_Release(IOleInPlaceObject *iface)
465 WebBrowser *This = INPLACEOBJ_THIS(iface);
466 return IWebBrowser_Release(WEBBROWSER(This));
469 static HRESULT WINAPI OleInPlaceObject_GetWindow(IOleInPlaceObject *iface, HWND* phwnd)
471 WebBrowser *This = INPLACEOBJ_THIS(iface);
473 TRACE("(%p)->(%p)\n", This, phwnd);
475 *phwnd = This->shell_embedding_hwnd;
476 return S_OK;
479 static HRESULT WINAPI OleInPlaceObject_ContextSensitiveHelp(IOleInPlaceObject *iface,
480 BOOL fEnterMode)
482 WebBrowser *This = INPLACEOBJ_THIS(iface);
483 FIXME("(%p)->(%x)\n", This, fEnterMode);
484 return E_NOTIMPL;
487 static HRESULT WINAPI OleInPlaceObject_InPlaceDeactivate(IOleInPlaceObject *iface)
489 WebBrowser *This = INPLACEOBJ_THIS(iface);
490 FIXME("(%p)\n", This);
491 return E_NOTIMPL;
494 static HRESULT WINAPI OleInPlaceObject_UIDeactivate(IOleInPlaceObject *iface)
496 WebBrowser *This = INPLACEOBJ_THIS(iface);
497 FIXME("(%p)\n", This);
498 return E_NOTIMPL;
501 static HRESULT WINAPI OleInPlaceObject_SetObjectRects(IOleInPlaceObject *iface,
502 LPCRECT lprcPosRect, LPCRECT lprcClipRect)
504 WebBrowser *This = INPLACEOBJ_THIS(iface);
506 TRACE("(%p)->(%p %p)\n", This, lprcPosRect, lprcClipRect);
508 if(This->shell_embedding_hwnd) {
509 SetWindowPos(This->shell_embedding_hwnd, NULL,
510 lprcPosRect->left, lprcPosRect->top,
511 lprcPosRect->right-lprcPosRect->left,
512 lprcPosRect->bottom-lprcPosRect->top,
513 SWP_NOZORDER | SWP_NOACTIVATE);
516 return S_OK;
519 static HRESULT WINAPI OleInPlaceObject_ReactivateAndUndo(IOleInPlaceObject *iface)
521 WebBrowser *This = INPLACEOBJ_THIS(iface);
522 FIXME("(%p)\n", This);
523 return E_NOTIMPL;
526 #undef INPLACEOBJ_THIS
528 static const IOleInPlaceObjectVtbl OleInPlaceObjectVtbl =
530 OleInPlaceObject_QueryInterface,
531 OleInPlaceObject_AddRef,
532 OleInPlaceObject_Release,
533 OleInPlaceObject_GetWindow,
534 OleInPlaceObject_ContextSensitiveHelp,
535 OleInPlaceObject_InPlaceDeactivate,
536 OleInPlaceObject_UIDeactivate,
537 OleInPlaceObject_SetObjectRects,
538 OleInPlaceObject_ReactivateAndUndo
541 /**********************************************************************
542 * Implement the IOleControl interface
545 #define CONTROL_THIS(iface) DEFINE_THIS(WebBrowser, OleControl, iface)
547 static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface,
548 REFIID riid, LPVOID *ppobj)
550 WebBrowser *This = CONTROL_THIS(iface);
551 return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj);
554 static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
556 WebBrowser *This = CONTROL_THIS(iface);
557 return IWebBrowser_AddRef(WEBBROWSER(This));
560 static ULONG WINAPI OleControl_Release(IOleControl *iface)
562 WebBrowser *This = CONTROL_THIS(iface);
563 return IWebBrowser_Release(WEBBROWSER(This));
566 static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, LPCONTROLINFO pCI)
568 WebBrowser *This = CONTROL_THIS(iface);
569 FIXME("(%p)->(%p)\n", This, pCI);
570 return E_NOTIMPL;
573 static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, struct tagMSG *pMsg)
575 WebBrowser *This = CONTROL_THIS(iface);
576 FIXME("(%p)->(%p)\n", This, pMsg);
577 return E_NOTIMPL;
580 static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
582 WebBrowser *This = CONTROL_THIS(iface);
583 FIXME("(%p)->(%ld)\n", This, dispID);
584 return E_NOTIMPL;
587 static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL bFreeze)
589 WebBrowser *This = CONTROL_THIS(iface);
590 FIXME("(%p)->(%x)\n", This, bFreeze);
591 return E_NOTIMPL;
594 #undef CONTROL_THIS
596 static const IOleControlVtbl OleControlVtbl =
598 OleControl_QueryInterface,
599 OleControl_AddRef,
600 OleControl_Release,
601 OleControl_GetControlInfo,
602 OleControl_OnMnemonic,
603 OleControl_OnAmbientPropertyChange,
604 OleControl_FreezeEvents
607 #define ACTIVEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceActiveObject, iface)
609 static HRESULT WINAPI InPlaceActiveObject_QueryInterface(IOleInPlaceActiveObject *iface,
610 REFIID riid, void **ppv)
612 WebBrowser *This = ACTIVEOBJ_THIS(iface);
613 return IWebBrowser2_QueryInterface(WEBBROWSER2(This), riid, ppv);
616 static ULONG WINAPI InPlaceActiveObject_AddRef(IOleInPlaceActiveObject *iface)
618 WebBrowser *This = ACTIVEOBJ_THIS(iface);
619 return IWebBrowser2_AddRef(WEBBROWSER2(This));
622 static ULONG WINAPI InPlaceActiveObject_Release(IOleInPlaceActiveObject *iface)
624 WebBrowser *This = ACTIVEOBJ_THIS(iface);
625 return IWebBrowser2_Release(WEBBROWSER2(This));
628 static HRESULT WINAPI InPlaceActiveObject_GetWindow(IOleInPlaceActiveObject *iface,
629 HWND *phwnd)
631 WebBrowser *This = ACTIVEOBJ_THIS(iface);
632 return IOleInPlaceObject_GetWindow(INPLACEOBJ(This), phwnd);
635 static HRESULT WINAPI InPlaceActiveObject_ContextSensitiveHelp(IOleInPlaceActiveObject *iface,
636 BOOL fEnterMode)
638 WebBrowser *This = ACTIVEOBJ_THIS(iface);
639 return IOleInPlaceObject_ContextSensitiveHelp(INPLACEOBJ(This), fEnterMode);
642 static HRESULT WINAPI InPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject *iface,
643 LPMSG lpmsg)
645 WebBrowser *This = ACTIVEOBJ_THIS(iface);
646 FIXME("(%p)->(%p)\n", This, lpmsg);
647 return E_NOTIMPL;
650 static HRESULT WINAPI InPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject *iface,
651 BOOL fActivate)
653 WebBrowser *This = ACTIVEOBJ_THIS(iface);
654 FIXME("(%p)->(%x)\n", This, fActivate);
655 return E_NOTIMPL;
658 static HRESULT WINAPI InPlaceActiveObject_OnDocWindowActivate(IOleInPlaceActiveObject *iface,
659 BOOL fActivate)
661 WebBrowser *This = ACTIVEOBJ_THIS(iface);
662 FIXME("(%p)->(%x)\n", This, fActivate);
663 return E_NOTIMPL;
666 static HRESULT WINAPI InPlaceActiveObject_ResizeBorder(IOleInPlaceActiveObject *iface,
667 LPCRECT lprcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow)
669 WebBrowser *This = ACTIVEOBJ_THIS(iface);
670 FIXME("(%p)->(%p %p %x)\n", This, lprcBorder, pUIWindow, fFrameWindow);
671 return E_NOTIMPL;
674 static HRESULT WINAPI InPlaceActiveObject_EnableModeless(IOleInPlaceActiveObject *iface,
675 BOOL fEnable)
677 WebBrowser *This = ACTIVEOBJ_THIS(iface);
678 FIXME("(%p)->(%x)\n", This, fEnable);
679 return E_NOTIMPL;
682 #undef ACTIVEOBJ_THIS
684 static const IOleInPlaceActiveObjectVtbl OleInPlaceActiveObjectVtbl = {
685 InPlaceActiveObject_QueryInterface,
686 InPlaceActiveObject_AddRef,
687 InPlaceActiveObject_Release,
688 InPlaceActiveObject_GetWindow,
689 InPlaceActiveObject_ContextSensitiveHelp,
690 InPlaceActiveObject_TranslateAccelerator,
691 InPlaceActiveObject_OnFrameWindowActivate,
692 InPlaceActiveObject_OnDocWindowActivate,
693 InPlaceActiveObject_ResizeBorder,
694 InPlaceActiveObject_EnableModeless
697 #define OLECMD_THIS(iface) DEFINE_THIS(WebBrowser, WBOleCommandTarget, iface)
699 static HRESULT WINAPI WBOleCommandTarget_QueryInterface(IOleCommandTarget *iface,
700 REFIID riid, void **ppv)
702 WebBrowser *This = OLECMD_THIS(iface);
703 return IWebBrowser2_QueryInterface(WEBBROWSER(This), riid, ppv);
706 static ULONG WINAPI WBOleCommandTarget_AddRef(IOleCommandTarget *iface)
708 WebBrowser *This = OLECMD_THIS(iface);
709 return IWebBrowser2_AddRef(WEBBROWSER(This));
712 static ULONG WINAPI WBOleCommandTarget_Release(IOleCommandTarget *iface)
714 WebBrowser *This = OLECMD_THIS(iface);
715 return IWebBrowser2_Release(WEBBROWSER(This));
718 static HRESULT WINAPI WBOleCommandTarget_QueryStatus(IOleCommandTarget *iface,
719 const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
721 WebBrowser *This = OLECMD_THIS(iface);
722 FIXME("(%p)->(%s %lu %p %p)\n", This, debugstr_guid(pguidCmdGroup), cCmds, prgCmds,
723 pCmdText);
724 return E_NOTIMPL;
727 static HRESULT WINAPI WBOleCommandTarget_Exec(IOleCommandTarget *iface,
728 const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn,
729 VARIANT *pvaOut)
731 WebBrowser *This = OLECMD_THIS(iface);
732 FIXME("(%p)->(%s %ld %ld %p %p)\n", This, debugstr_guid(pguidCmdGroup), nCmdID,
733 nCmdexecopt, pvaIn, pvaOut);
734 return E_NOTIMPL;
737 #undef OLECMD_THIS
739 static const IOleCommandTargetVtbl OleCommandTargetVtbl = {
740 WBOleCommandTarget_QueryInterface,
741 WBOleCommandTarget_AddRef,
742 WBOleCommandTarget_Release,
743 WBOleCommandTarget_QueryStatus,
744 WBOleCommandTarget_Exec
747 void WebBrowser_OleObject_Init(WebBrowser *This)
749 This->lpOleObjectVtbl = &OleObjectVtbl;
750 This->lpOleInPlaceObjectVtbl = &OleInPlaceObjectVtbl;
751 This->lpOleControlVtbl = &OleControlVtbl;
752 This->lpOleInPlaceActiveObjectVtbl = &OleInPlaceActiveObjectVtbl;
753 This->lpWBOleCommandTargetVtbl = &OleCommandTargetVtbl;
755 This->client = NULL;
756 This->container = NULL;
757 This->iphwnd = NULL;
758 This->frame_hwnd = NULL;
759 This->frame = NULL;
760 This->uiwindow = NULL;
761 This->shell_embedding_hwnd = NULL;
763 memset(&This->pos_rect, 0, sizeof(RECT));
764 memset(&This->clip_rect, 0, sizeof(RECT));
765 memset(&This->frameinfo, 0, sizeof(OLEINPLACEFRAMEINFO));
768 void WebBrowser_OleObject_Destroy(WebBrowser *This)
770 if(This->client)
771 IOleObject_SetClientSite(OLEOBJ(This), NULL);
772 if(This->container)
773 IOleContainer_Release(This->container);
774 if(This->frame)
775 IOleInPlaceFrame_Release(This->frame);
776 if(This->uiwindow)
777 IOleInPlaceUIWindow_Release(This->uiwindow);