ReactOS  0.4.14-dev-583-g2a1ba2c
dochost.c File Reference
#include "ieframe.h"
#include "exdispid.h"
#include "mshtml.h"
#include "perhist.h"
#include "initguid.h"
#include "wine/debug.h"
Include dependency graph for dochost.c:

Go to the source code of this file.

Classes

struct  ready_state_task_t
 

Macros

#define DOCHOST_DOCCANNAVIGATE   0
 
#define CMDID_EXPLORER_UPDATEHISTORY   38
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ieframe)
 
 DEFINE_OLEGUID (CGID_DocHostCmdPriv, 0x000214D4L, 0, 0)
 
void push_dochost_task (DocHost *This, task_header_t *task, task_proc_t proc, task_destr_t destr, BOOL send)
 
LRESULT process_dochost_tasks (DocHost *This)
 
void abort_dochost_tasks (DocHost *This, task_proc_t proc)
 
void on_commandstate_change (DocHost *doc_host, LONG command, BOOL enable)
 
void update_navigation_commands (DocHost *dochost)
 
static void notif_complete (DocHost *This, DISPID dispid)
 
static void object_available (DocHost *This)
 
static HRESULT get_doc_ready_state (DocHost *This, READYSTATE *ret)
 
static void advise_prop_notif (DocHost *This, BOOL set)
 
void set_doc_state (DocHost *This, READYSTATE doc_state)
 
static void update_ready_state (DocHost *This, READYSTATE ready_state)
 
static void ready_state_task_destr (task_header_t *_task)
 
static void ready_state_proc (DocHost *This, task_header_t *_task)
 
static void push_ready_state_task (DocHost *This, READYSTATE ready_state)
 
static void object_available_task_destr (task_header_t *task)
 
static void object_available_proc (DocHost *This, task_header_t *task)
 
HRESULT dochost_object_available (DocHost *This, IUnknown *doc)
 
static LRESULT resize_document (DocHost *This, LONG width, LONG height)
 
static LRESULT WINAPI doc_view_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
static void free_travellog_entry (travellog_entry_t *entry)
 
static IStreamget_travellog_stream (DocHost *This)
 
static void dump_travellog (DocHost *This)
 
static void update_travellog (DocHost *This)
 
void create_doc_view_hwnd (DocHost *This)
 
void deactivate_document (DocHost *This)
 
HRESULT refresh_document (DocHost *This, const VARIANT *level)
 
void release_dochost_client (DocHost *This)
 
static DocHostimpl_from_IOleCommandTarget (IOleCommandTarget *iface)
 
static HRESULT WINAPI ClOleCommandTarget_QueryInterface (IOleCommandTarget *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ClOleCommandTarget_AddRef (IOleCommandTarget *iface)
 
static ULONG WINAPI ClOleCommandTarget_Release (IOleCommandTarget *iface)
 
static HRESULT WINAPI ClOleCommandTarget_QueryStatus (IOleCommandTarget *iface, const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
 
static HRESULT WINAPI ClOleCommandTarget_Exec (IOleCommandTarget *iface, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
 
static DocHostimpl_from_IDocHostUIHandler2 (IDocHostUIHandler2 *iface)
 
static HRESULT WINAPI DocHostUIHandler_QueryInterface (IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI DocHostUIHandler_AddRef (IDocHostUIHandler2 *iface)
 
static ULONG WINAPI DocHostUIHandler_Release (IDocHostUIHandler2 *iface)
 
static HRESULT WINAPI DocHostUIHandler_ShowContextMenu (IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved)
 
static HRESULT WINAPI DocHostUIHandler_GetHostInfo (IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
 
static HRESULT WINAPI DocHostUIHandler_ShowUI (IDocHostUIHandler2 *iface, DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
 
static HRESULT WINAPI DocHostUIHandler_HideUI (IDocHostUIHandler2 *iface)
 
static HRESULT WINAPI DocHostUIHandler_UpdateUI (IDocHostUIHandler2 *iface)
 
static HRESULT WINAPI DocHostUIHandler_EnableModeless (IDocHostUIHandler2 *iface, BOOL fEnable)
 
static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate (IDocHostUIHandler2 *iface, BOOL fActivate)
 
static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate (IDocHostUIHandler2 *iface, BOOL fActivate)
 
static HRESULT WINAPI DocHostUIHandler_ResizeBorder (IDocHostUIHandler2 *iface, LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
 
static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator (IDocHostUIHandler2 *iface, LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID)
 
static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath (IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
 
static HRESULT WINAPI DocHostUIHandler_GetDropTarget (IDocHostUIHandler2 *iface, IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
 
static HRESULT WINAPI DocHostUIHandler_GetExternal (IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
 
static HRESULT WINAPI DocHostUIHandler_TranslateUrl (IDocHostUIHandler2 *iface, DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
 
static HRESULT WINAPI DocHostUIHandler_FilterDataObject (IDocHostUIHandler2 *iface, IDataObject *pDO, IDataObject **ppDORet)
 
static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath (IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
 
static DocHostimpl_from_IPropertyNotifySink (IPropertyNotifySink *iface)
 
static HRESULT WINAPI PropertyNotifySink_QueryInterface (IPropertyNotifySink *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI PropertyNotifySink_AddRef (IPropertyNotifySink *iface)
 
static ULONG WINAPI PropertyNotifySink_Release (IPropertyNotifySink *iface)
 
static HRESULT WINAPI PropertyNotifySink_OnChanged (IPropertyNotifySink *iface, DISPID dispID)
 
static HRESULT WINAPI PropertyNotifySink_OnRequestEdit (IPropertyNotifySink *iface, DISPID dispID)
 
void DocHost_Init (DocHost *This, IWebBrowser2 *wb, const IDocHostContainerVtbl *container)
 
void DocHost_Release (DocHost *This)
 

Variables

static ATOM doc_view_atom = 0
 
static const IOleCommandTargetVtbl OleCommandTargetVtbl
 
static const IDocHostUIHandler2Vtbl DocHostUIHandler2Vtbl
 
static const IPropertyNotifySinkVtbl PropertyNotifySinkVtbl
 

Macro Definition Documentation

◆ CMDID_EXPLORER_UPDATEHISTORY

#define CMDID_EXPLORER_UPDATEHISTORY   38

Definition at line 35 of file dochost.c.

◆ DOCHOST_DOCCANNAVIGATE

#define DOCHOST_DOCCANNAVIGATE   0

Definition at line 32 of file dochost.c.

Function Documentation

◆ abort_dochost_tasks()

void abort_dochost_tasks ( DocHost This,
task_proc_t  proc 
)

Definition at line 70 of file dochost.c.

71 {
72  task_header_t *task, *cursor;
73 
74  LIST_FOR_EACH_ENTRY_SAFE(task, cursor, &This->task_queue, task_header_t, entry) {
75  if(proc && proc != task->proc)
76  continue;
77 
78  list_remove(&task->entry);
79  task->destr(task);
80  }
81 }
static HANDLE proc()
Definition: pdb.c:32
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
uint32_t entry
Definition: isohybrid.c:63
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
const char cursor[]
Definition: icontest.c:13
async_task_proc_t proc
Definition: internet.h:390

Referenced by async_doc_navigate(), and DocHost_Release().

◆ advise_prop_notif()

static void advise_prop_notif ( DocHost This,
BOOL  set 
)
static

Definition at line 209 of file dochost.c.

210 {
211  IConnectionPointContainer *cp_container;
213  HRESULT hres;
214 
215  hres = IUnknown_QueryInterface(This->document, &IID_IConnectionPointContainer, (void**)&cp_container);
216  if(FAILED(hres))
217  return;
218 
219  hres = IConnectionPointContainer_FindConnectionPoint(cp_container, &IID_IPropertyNotifySink, &cp);
220  IConnectionPointContainer_Release(cp_container);
221  if(FAILED(hres))
222  return;
223 
224  if(set)
225  hres = IConnectionPoint_Advise(cp, (IUnknown*)&This->IPropertyNotifySink_iface, &This->prop_notif_cookie);
226  else
227  hres = IConnectionPoint_Unadvise(cp, This->prop_notif_cookie);
228  IConnectionPoint_Release(cp);
229 
230  if(SUCCEEDED(hres))
231  This->is_prop_notif = set;
232 }
const GUID IID_IConnectionPointContainer
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
static UINT set(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, struct ctab_constant *constant, const void **indata, D3DXPARAMETER_TYPE intype, UINT *size, UINT incol, D3DXPARAMETER_CLASS inclass, UINT index, BOOL is_pointer)
Definition: shader.c:1095
const GUID IID_IPropertyNotifySink
POINT cp
Definition: magnifier.c:59
Definition: _set.h:46
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by deactivate_document(), dochost_object_available(), and PropertyNotifySink_OnChanged().

◆ ClOleCommandTarget_AddRef()

static ULONG WINAPI ClOleCommandTarget_AddRef ( IOleCommandTarget iface)
static

Definition at line 641 of file dochost.c.

642 {
644  return IOleClientSite_AddRef(&This->IOleClientSite_iface);
645 }
static DocHost * impl_from_IOleCommandTarget(IOleCommandTarget *iface)
Definition: dochost.c:629

◆ ClOleCommandTarget_Exec()

static HRESULT WINAPI ClOleCommandTarget_Exec ( IOleCommandTarget iface,
const GUID pguidCmdGroup,
DWORD  nCmdID,
DWORD  nCmdexecopt,
VARIANT pvaIn,
VARIANT pvaOut 
)
static

Definition at line 667 of file dochost.c.

670 {
672 
673  TRACE("(%p)->(%s %d %d %s %s)\n", This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt,
674  debugstr_variant(pvaIn), debugstr_variant(pvaOut));
675 
676  if(!pguidCmdGroup) {
677  switch(nCmdID) {
678  case OLECMDID_UPDATECOMMANDS:
679  if(!This->olecmd)
680  return E_NOTIMPL;
681  return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
682  case OLECMDID_SETDOWNLOADSTATE:
683  if(pvaIn && V_VT(pvaIn) == VT_I4)
684  This->busy = V_I4(pvaIn) ? VARIANT_TRUE : VARIANT_FALSE;
685  if(This->olecmd)
686  return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
687 
688  if(!pvaIn || V_VT(pvaIn) != VT_I4)
689  return E_INVALIDARG;
690 
692  return S_OK;
693  default:
694  TRACE("Unimplemented cmdid %d\n", nCmdID);
695  return E_NOTIMPL;
696  }
697  }
698 
699  if(IsEqualGUID(pguidCmdGroup, &CGID_DocHostCmdPriv)) {
700  switch(nCmdID) {
702  if(!pvaIn || V_VT(pvaIn) != VT_UNKNOWN)
703  return E_INVALIDARG;
704 
705  if(This->doc_navigate)
706  IUnknown_Release(This->doc_navigate);
707  IUnknown_AddRef(V_UNKNOWN(pvaIn));
708  This->doc_navigate = V_UNKNOWN(pvaIn);
709  return S_OK;
710 
711  case 1: {
712  IHTMLWindow2 *win2;
713  SAFEARRAY *sa = V_ARRAY(pvaIn);
714  VARIANT status_code, url, htmlwindow;
715  LONG ind;
716  HRESULT hres;
717 
718  if(V_VT(pvaIn) != VT_ARRAY || !sa || (SafeArrayGetDim(sa) != 1))
719  return E_INVALIDARG;
720 
721  ind = 0;
723  if(FAILED(hres) || V_VT(&status_code)!=VT_I4)
724  return E_INVALIDARG;
725 
726  ind = 1;
727  hres = SafeArrayGetElement(sa, &ind, &url);
728  if(FAILED(hres) || V_VT(&url)!=VT_BSTR)
729  return E_INVALIDARG;
730 
731  ind = 3;
732  hres = SafeArrayGetElement(sa, &ind, &htmlwindow);
733  if(FAILED(hres) || V_VT(&htmlwindow)!=VT_UNKNOWN || !V_UNKNOWN(&htmlwindow))
734  return E_INVALIDARG;
735 
736  hres = IUnknown_QueryInterface(V_UNKNOWN(&htmlwindow), &IID_IHTMLWindow2, (void**)&win2);
737  if(FAILED(hres))
738  return E_INVALIDARG;
739 
741  IHTMLWindow2_Release(win2);
742  return S_OK;
743  }
744 
745  default:
746  TRACE("unsupported command %d of CGID_DocHostCmdPriv\n", nCmdID);
747  return E_NOTIMPL;
748  }
749  }
750 
751  if(IsEqualGUID(pguidCmdGroup, &CGID_Explorer)) {
752  switch(nCmdID) {
756  return S_OK;
757 
758  default:
759  TRACE("Unimplemented cmdid %d of CGID_Explorer\n", nCmdID);
760  return E_NOTIMPL;
761  }
762  }
763 
764  if(IsEqualGUID(pguidCmdGroup, &CGID_ShellDocView)) {
765  switch(nCmdID) {
766  default:
767  TRACE("Unimplemented cmdid %d of CGID_ShellDocView\n", nCmdID);
768  return E_NOTIMPL;
769  }
770  }
771 
772  if(IsEqualGUID(&CGID_DocHostCommandHandler, pguidCmdGroup)) {
773  if(!This->olecmd)
774  return E_NOTIMPL;
775  return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
776  }
777 
778  TRACE("Unimplemented cmdid %d of group %s\n", nCmdID, debugstr_guid(pguidCmdGroup));
779  return E_NOTIMPL;
780 }
UINT WINAPI SafeArrayGetDim(SAFEARRAY *psa)
Definition: safearray.c:1094
Definition: compat.h:1947
#define V_ARRAY(A)
Definition: oleauto.h:222
static void update_travellog(DocHost *This)
Definition: dochost.c:424
HRESULT WINAPI SafeArrayGetElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
Definition: safearray.c:947
__IHTMLWindow2_FWD_DEFINED__ typedef interface IHTMLWindow2 IHTMLWindow2
Definition: mshtmhst.idl:64
static DocHost * impl_from_IOleCommandTarget(IOleCommandTarget *iface)
Definition: dochost.c:629
void update_navigation_commands(DocHost *dochost)
Definition: dochost.c:106
#define V_I4(A)
Definition: oleauto.h:247
struct status_code status_code
void handle_navigation_error(DocHost *, HRESULT, BSTR, IHTMLWindow2 *) DECLSPEC_HIDDEN
Definition: navigate.c:315
long LONG
Definition: pedump.c:60
#define CMDID_EXPLORER_UPDATEHISTORY
Definition: dochost.c:35
#define E_INVALIDARG
Definition: ddrawi.h:101
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
static const WCHAR url[]
Definition: encode.c:1432
#define V_VT(A)
Definition: oleauto.h:211
#define DOCHOST_DOCCANNAVIGATE
Definition: dochost.c:32
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_BSTR(A)
Definition: oleauto.h:226
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
#define S_OK
Definition: intsafe.h:59
void notify_download_state(DocHost *, BOOL) DECLSPEC_HIDDEN
Definition: navigate.c:153
#define E_NOTIMPL
Definition: ddrawi.h:99
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
static struct sockaddr_in sa
Definition: adnsresfilter.c:69

◆ ClOleCommandTarget_QueryInterface()

static HRESULT WINAPI ClOleCommandTarget_QueryInterface ( IOleCommandTarget iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 634 of file dochost.c.

636 {
638  return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
639 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static DocHost * impl_from_IOleCommandTarget(IOleCommandTarget *iface)
Definition: dochost.c:629

◆ ClOleCommandTarget_QueryStatus()

static HRESULT WINAPI ClOleCommandTarget_QueryStatus ( IOleCommandTarget iface,
const GUID pguidCmdGroup,
ULONG  cCmds,
OLECMD  prgCmds[],
OLECMDTEXT *  pCmdText 
)
static

Definition at line 653 of file dochost.c.

655 {
657  ULONG i;
658 
659  TRACE("(%p)->(%s %u %p %p)\n", This, debugstr_guid(pguidCmdGroup), cCmds, prgCmds,
660  pCmdText);
661  for(i=0; prgCmds && i < cCmds; i++)
662  TRACE("unsupported command %u (%x)\n", prgCmds[i].cmdID, prgCmds[i].cmdf);
663 
664  return E_NOTIMPL;
665 }
static DocHost * impl_from_IOleCommandTarget(IOleCommandTarget *iface)
Definition: dochost.c:629
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
OLECMDF cmdf
Definition: olecmd.c:709
#define E_NOTIMPL
Definition: ddrawi.h:99
unsigned int ULONG
Definition: retypes.h:1

◆ ClOleCommandTarget_Release()

static ULONG WINAPI ClOleCommandTarget_Release ( IOleCommandTarget iface)
static

Definition at line 647 of file dochost.c.

648 {
650  return IOleClientSite_Release(&This->IOleClientSite_iface);
651 }
static DocHost * impl_from_IOleCommandTarget(IOleCommandTarget *iface)
Definition: dochost.c:629

◆ create_doc_view_hwnd()

void create_doc_view_hwnd ( DocHost This)

Definition at line 479 of file dochost.c.

480 {
481  RECT rect;
482 
483  static const WCHAR wszShell_DocObject_View[] =
484  {'S','h','e','l','l',' ','D','o','c','O','b','j','e','c','t',' ','V','i','e','w',0};
485 
486  if(!doc_view_atom) {
487  static WNDCLASSEXW wndclass = {
488  sizeof(wndclass),
489  CS_PARENTDC,
491  0, 0 /* native uses 4*/, NULL, NULL, NULL,
492  (HBRUSH)(COLOR_WINDOW + 1), NULL,
493  wszShell_DocObject_View,
494  NULL
495  };
496 
497  wndclass.hInstance = ieframe_instance;
498 
499  doc_view_atom = RegisterClassExW(&wndclass);
500  }
501 
502  This->container_vtbl->get_docobj_rect(This, &rect);
503  This->hwnd = CreateWindowExW(0, wszShell_DocObject_View,
504  wszShell_DocObject_View,
506  rect.left, rect.top, rect.right, rect.bottom, This->frame_hwnd,
508 }
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
HINSTANCE ieframe_instance
Definition: ieframe_main.c:32
#define WS_CHILD
Definition: pedump.c:617
#define WS_CLIPCHILDREN
Definition: pedump.c:619
#define COLOR_WINDOW
Definition: winuser.h:908
& rect
Definition: startmenu.cpp:1413
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
static ATOM doc_view_atom
Definition: dochost.c:37
smooth NULL
Definition: ftsmooth.c:416
static LRESULT WINAPI doc_view_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: dochost.c:364
__wchar_t WCHAR
Definition: xmlstorage.h:180
HINSTANCE hInstance
Definition: winuser.h:3196
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define WS_TABSTOP
Definition: pedump.c:634
#define WS_VISIBLE
Definition: pedump.c:620
#define CS_PARENTDC
Definition: winuser.h:651

Referenced by create_frame_hwnd(), and navigate_bsc_proc().

◆ deactivate_document()

void deactivate_document ( DocHost This)

Definition at line 510 of file dochost.c.

511 {
513  IOleObject *oleobj = NULL;
514  IHlinkTarget *hlink = NULL;
515  HRESULT hres;
516 
517  if(!This->document) return;
518 
519  if(This->doc_navigate) {
520  IUnknown_Release(This->doc_navigate);
521  This->doc_navigate = NULL;
522  }
523 
524  if(This->is_prop_notif)
526 
527  if(This->view)
528  IOleDocumentView_UIActivate(This->view, FALSE);
529 
530  hres = IUnknown_QueryInterface(This->document, &IID_IOleInPlaceObjectWindowless,
531  (void**)&winobj);
532  if(SUCCEEDED(hres)) {
533  IOleInPlaceObjectWindowless_InPlaceDeactivate(winobj);
534  IOleInPlaceObjectWindowless_Release(winobj);
535  }
536 
537  if(This->view) {
538  IOleDocumentView_Show(This->view, FALSE);
539  IOleDocumentView_CloseView(This->view, 0);
540  IOleDocumentView_SetInPlaceSite(This->view, NULL);
541  IOleDocumentView_Release(This->view);
542  This->view = NULL;
543  }
544 
545  hres = IUnknown_QueryInterface(This->document, &IID_IOleObject, (void**)&oleobj);
546  if(SUCCEEDED(hres))
547  IOleObject_Close(oleobj, OLECLOSE_NOSAVE);
548 
549  hres = IUnknown_QueryInterface(This->document, &IID_IHlinkTarget, (void**)&hlink);
550  if(SUCCEEDED(hres)) {
551  IHlinkTarget_SetBrowseContext(hlink, NULL);
552  IHlinkTarget_Release(hlink);
553  }
554 
555  if(oleobj) {
557 
558  IOleObject_GetClientSite(oleobj, &client_site);
559  if(client_site) {
560  if(client_site == &This->IOleClientSite_iface)
561  IOleObject_SetClientSite(oleobj, NULL);
562  IOleClientSite_Release(client_site);
563  }
564 
565  IOleObject_Release(oleobj);
566  }
567 
568  IUnknown_Release(This->document);
569  This->document = NULL;
570 }
static IOleClientSite * client_site
Definition: activex.c:198
static void advise_prop_notif(DocHost *This, BOOL set)
Definition: dochost.c:209
smooth NULL
Definition: ftsmooth.c:416
const GUID IID_IOleObject
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by InternetExplorer_Release(), navigate_bsc(), OleObject_SetClientSite(), and release_extern_ref().

◆ DEFINE_OLEGUID()

DEFINE_OLEGUID ( CGID_DocHostCmdPriv  ,
0x000214D4L  ,
,
 
)

◆ doc_view_proc()

static LRESULT WINAPI doc_view_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 364 of file dochost.c.

365 {
366  DocHost *This;
367 
368  static const WCHAR wszTHIS[] = {'T','H','I','S',0};
369 
370  if(msg == WM_CREATE) {
371  This = *(DocHost**)lParam;
372  SetPropW(hwnd, wszTHIS, This);
373  }else {
374  This = GetPropW(hwnd, wszTHIS);
375  }
376 
377  switch(msg) {
378  case WM_SIZE:
380  }
381 
382  return DefWindowProcW(hwnd, msg, wParam, lParam);
383 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static LRESULT resize_document(DocHost *This, LONG width, LONG height)
Definition: dochost.c:352
WPARAM wParam
Definition: combotst.c:138
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define WM_SIZE
Definition: winuser.h:1593
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define msg(x)
Definition: auth_time.c:54
#define WM_CREATE
Definition: winuser.h:1590
#define HIWORD(l)
Definition: typedefs.h:246
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82

Referenced by create_doc_view_hwnd().

◆ DocHost_Init()

void DocHost_Init ( DocHost This,
IWebBrowser2 *  wb,
const IDocHostContainerVtbl container 
)

Definition at line 1106 of file dochost.c.

1107 {
1108  This->IDocHostUIHandler2_iface.lpVtbl = &DocHostUIHandler2Vtbl;
1109  This->IOleCommandTarget_iface.lpVtbl = &OleCommandTargetVtbl;
1110  This->IPropertyNotifySink_iface.lpVtbl = &PropertyNotifySinkVtbl;
1111 
1112  This->wb = wb;
1113  This->container_vtbl = container;
1114 
1115  This->ready_state = READYSTATE_UNINITIALIZED;
1116  list_init(&This->task_queue);
1117 
1118  This->travellog.loading_pos = -1;
1119 
1122 
1126 }
void DocHost_ClientSite_Init(DocHost *This)
Definition: client.c:712
struct container container
static const IDocHostUIHandler2Vtbl DocHostUIHandler2Vtbl
Definition: dochost.c:1016
void ConnectionPointContainer_Init(ConnectionPointContainer *This, IUnknown *impl)
Definition: events.c:431
static const IPropertyNotifySinkVtbl PropertyNotifySinkVtbl
Definition: dochost.c:1098
void DocHost_Frame_Init(DocHost *This)
Definition: frame.c:182
void NewWindowManager_Init(DocHost *) DECLSPEC_HIDDEN
void IEHTMLWindow_Init(DocHost *) DECLSPEC_HIDDEN
Definition: iehtmlwnd.c:692
static const IOleCommandTargetVtbl OleCommandTargetVtbl
Definition: dochost.c:782
__WINE_SERVER_LIST_INLINE void list_init(struct list *list)
Definition: list.h:149

Referenced by create_ie(), and create_webbrowser().

◆ dochost_object_available()

HRESULT dochost_object_available ( DocHost This,
IUnknown doc 
)

Definition at line 304 of file dochost.c.

305 {
306  READYSTATE ready_state;
307  task_header_t *task;
308  IOleObject *oleobj;
309  HRESULT hres;
310 
311  IUnknown_AddRef(doc);
312  This->document = doc;
313 
314  hres = IUnknown_QueryInterface(doc, &IID_IOleObject, (void**)&oleobj);
315  if(SUCCEEDED(hres)) {
316  CLSID clsid;
317 
318  hres = IOleObject_GetUserClassID(oleobj, &clsid);
319  if(SUCCEEDED(hres))
320  TRACE("Got clsid %s\n",
321  IsEqualGUID(&clsid, &CLSID_HTMLDocument) ? "CLSID_HTMLDocument" : debugstr_guid(&clsid));
322 
323  hres = IOleObject_SetClientSite(oleobj, &This->IOleClientSite_iface);
324  if(FAILED(hres))
325  FIXME("SetClientSite failed: %08x\n", hres);
326 
327  IOleObject_Release(oleobj);
328  }else {
329  FIXME("Could not get IOleObject iface: %08x\n", hres);
330  }
331 
332  /* FIXME: Call SetAdvise */
333 
334  task = heap_alloc(sizeof(*task));
336 
337  hres = get_doc_ready_state(This, &ready_state);
338  if(SUCCEEDED(hres)) {
339  if(ready_state == READYSTATE_COMPLETE)
340  push_ready_state_task(This, READYSTATE_COMPLETE);
341  if(ready_state != READYSTATE_COMPLETE || This->doc_navigate)
343  }else if(!This->doc_navigate) {
344  /* If we can't get document's ready state, there is not much we can do.
345  * Assume that document is complete at this point. */
346  push_ready_state_task(This, READYSTATE_COMPLETE);
347  }
348 
349  return S_OK;
350 }
#define TRUE
Definition: types.h:120
static void object_available_proc(DocHost *This, task_header_t *task)
Definition: dochost.c:299
static void advise_prop_notif(DocHost *This, BOOL set)
Definition: dochost.c:209
static void object_available_task_destr(task_header_t *task)
Definition: dochost.c:294
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
#define FIXME(fmt,...)
Definition: debug.h:110
static void push_ready_state_task(DocHost *This, READYSTATE ready_state)
Definition: dochost.c:283
#define debugstr_guid
Definition: kernel32.h:35
const GUID IID_IOleObject
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
REFCLSID clsid
Definition: msctf.c:82
void push_dochost_task(DocHost *This, task_header_t *task, task_proc_t proc, task_destr_t destr, BOOL send)
Definition: dochost.c:39
static HRESULT get_doc_ready_state(DocHost *This, READYSTATE *ret)
Definition: dochost.c:179
#define S_OK
Definition: intsafe.h:59
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by BindStatusCallback_OnObjectAvailable().

◆ DocHost_Release()

void DocHost_Release ( DocHost This)

Definition at line 1128 of file dochost.c.

1129 {
1130  if(This->shell_ui_helper)
1131  IShellUIHelper2_Release(This->shell_ui_helper);
1132 
1136 
1138 
1139  while(This->travellog.length)
1140  free_travellog_entry(This->travellog.log + --This->travellog.length);
1141  heap_free(This->travellog.log);
1142 
1143  heap_free(This->url);
1144 }
void release_dochost_client(DocHost *This)
Definition: dochost.c:601
static void free_travellog_entry(travellog_entry_t *entry)
Definition: dochost.c:385
smooth NULL
Definition: ftsmooth.c:416
void abort_dochost_tasks(DocHost *This, task_proc_t proc)
Definition: dochost.c:70
void ConnectionPointContainer_Destroy(ConnectionPointContainer *This)
Definition: events.c:442
void DocHost_ClientSite_Release(DocHost *This)
Definition: client.c:722
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by InternetExplorer_Release(), and WebBrowser_Release().

◆ DocHostUIHandler_AddRef()

static ULONG WINAPI DocHostUIHandler_AddRef ( IDocHostUIHandler2 iface)
static

Definition at line 802 of file dochost.c.

803 {
805  return IOleClientSite_AddRef(&This->IOleClientSite_iface);
806 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790

◆ DocHostUIHandler_EnableModeless()

static HRESULT WINAPI DocHostUIHandler_EnableModeless ( IDocHostUIHandler2 iface,
BOOL  fEnable 
)
static

Definition at line 882 of file dochost.c.

884 {
886  FIXME("(%p)->(%x)\n", This, fEnable);
887  return E_NOTIMPL;
888 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_FilterDataObject()

static HRESULT WINAPI DocHostUIHandler_FilterDataObject ( IDocHostUIHandler2 iface,
IDataObject pDO,
IDataObject **  ppDORet 
)
static

Definition at line 985 of file dochost.c.

987 {
989  FIXME("(%p)->(%p %p)\n", This, pDO, ppDORet);
990  return E_NOTIMPL;
991 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_GetDropTarget()

static HRESULT WINAPI DocHostUIHandler_GetDropTarget ( IDocHostUIHandler2 iface,
IDropTarget pDropTarget,
IDropTarget **  ppDropTarget 
)
static

Definition at line 940 of file dochost.c.

942 {
944  FIXME("(%p)\n", This);
945  return E_NOTIMPL;
946 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_GetExternal()

static HRESULT WINAPI DocHostUIHandler_GetExternal ( IDocHostUIHandler2 iface,
IDispatch **  ppDispatch 
)
static

Definition at line 948 of file dochost.c.

950 {
952 
953  TRACE("(%p)->(%p)\n", This, ppDispatch);
954 
955  if(This->hostui)
956  return IDocHostUIHandler_GetExternal(This->hostui, ppDispatch);
957 
958  if(!This->shell_ui_helper) {
959  HRESULT hres;
960 
961  hres = create_shell_ui_helper(&This->shell_ui_helper);
962  if(FAILED(hres))
963  return hres;
964  }
965 
966  *ppDispatch = (IDispatch*)This->shell_ui_helper;
967  IDispatch_AddRef(*ppDispatch);
968  return S_OK;
969 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
HRESULT create_shell_ui_helper(IShellUIHelper2 **) DECLSPEC_HIDDEN
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
#define S_OK
Definition: intsafe.h:59

◆ DocHostUIHandler_GetHostInfo()

static HRESULT WINAPI DocHostUIHandler_GetHostInfo ( IDocHostUIHandler2 iface,
DOCHOSTUIINFO *  pInfo 
)
static

Definition at line 833 of file dochost.c.

835 {
837  HRESULT hres;
838 
839  TRACE("(%p)->(%p)\n", This, pInfo);
840 
841  if(This->hostui) {
842  hres = IDocHostUIHandler_GetHostInfo(This->hostui, pInfo);
843  if(SUCCEEDED(hres))
844  return hres;
845  }
846 
850  return S_OK;
851 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
#define S_OK
Definition: intsafe.h:59
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ DocHostUIHandler_GetOptionKeyPath()

static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath ( IDocHostUIHandler2 iface,
LPOLESTR pchKey,
DWORD  dw 
)
static

Definition at line 927 of file dochost.c.

929 {
931 
932  TRACE("(%p)->(%p %d)\n", This, pchKey, dw);
933 
934  if(This->hostui)
935  return IDocHostUIHandler_GetOptionKeyPath(This->hostui, pchKey, dw);
936 
937  return S_OK;
938 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define TRACE(s)
Definition: solgame.cpp:4
REFIID LPVOID DWORD dw
Definition: atlbase.h:40
#define S_OK
Definition: intsafe.h:59

◆ DocHostUIHandler_GetOverrideKeyPath()

static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath ( IDocHostUIHandler2 iface,
LPOLESTR pchKey,
DWORD  dw 
)
static

Definition at line 993 of file dochost.c.

995 {
998  HRESULT hres;
999 
1000  TRACE("(%p)->(%p %d)\n", This, pchKey, dw);
1001 
1002  if(!This->hostui)
1003  return S_OK;
1004 
1005  hres = IDocHostUIHandler_QueryInterface(This->hostui, &IID_IDocHostUIHandler2,
1006  (void**)&handler);
1007  if(SUCCEEDED(hres)) {
1008  hres = IDocHostUIHandler2_GetOverrideKeyPath(handler, pchKey, dw);
1009  IDocHostUIHandler2_Release(handler);
1010  return hres;
1011  }
1012 
1013  return S_OK;
1014 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
REFIID LPVOID DWORD dw
Definition: atlbase.h:40
#define S_OK
Definition: intsafe.h:59
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7786
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ DocHostUIHandler_HideUI()

static HRESULT WINAPI DocHostUIHandler_HideUI ( IDocHostUIHandler2 iface)
static

Definition at line 863 of file dochost.c.

864 {
866  FIXME("(%p)\n", This);
867  return E_NOTIMPL;
868 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_OnDocWindowActivate()

static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate ( IDocHostUIHandler2 iface,
BOOL  fActivate 
)
static

Definition at line 890 of file dochost.c.

892 {
894  FIXME("(%p)->(%x)\n", This, fActivate);
895  return E_NOTIMPL;
896 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_OnFrameWindowActivate()

static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate ( IDocHostUIHandler2 iface,
BOOL  fActivate 
)
static

Definition at line 898 of file dochost.c.

900 {
902  FIXME("(%p)->(%x)\n", This, fActivate);
903  return E_NOTIMPL;
904 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_QueryInterface()

static HRESULT WINAPI DocHostUIHandler_QueryInterface ( IDocHostUIHandler2 iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 795 of file dochost.c.

797 {
799  return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
800 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39

◆ DocHostUIHandler_Release()

static ULONG WINAPI DocHostUIHandler_Release ( IDocHostUIHandler2 iface)
static

Definition at line 808 of file dochost.c.

809 {
811  return IOleClientSite_Release(&This->IOleClientSite_iface);
812 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790

◆ DocHostUIHandler_ResizeBorder()

static HRESULT WINAPI DocHostUIHandler_ResizeBorder ( IDocHostUIHandler2 iface,
LPCRECT  prcBorder,
IOleInPlaceUIWindow pUIWindow,
BOOL  fRameWindow 
)
static

Definition at line 906 of file dochost.c.

908 {
910  FIXME("(%p)->(%p %p %X)\n", This, prcBorder, pUIWindow, fRameWindow);
911  return E_NOTIMPL;
912 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_ShowContextMenu()

static HRESULT WINAPI DocHostUIHandler_ShowContextMenu ( IDocHostUIHandler2 iface,
DWORD  dwID,
POINT ppt,
IUnknown pcmdtReserved,
IDispatch pdispReserved 
)
static

Definition at line 814 of file dochost.c.

816 {
818  HRESULT hres;
819 
820  TRACE("(%p)->(%d %p %p %p)\n", This, dwID, ppt, pcmdtReserved, pdispReserved);
821 
822  if(This->hostui) {
823  hres = IDocHostUIHandler_ShowContextMenu(This->hostui, dwID, ppt, pcmdtReserved,
824  pdispReserved);
825  if(hres == S_OK)
826  return S_OK;
827  }
828 
829  FIXME("default action not implemented\n");
830  return E_NOTIMPL;
831 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
#define S_OK
Definition: intsafe.h:59
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_ShowUI()

static HRESULT WINAPI DocHostUIHandler_ShowUI ( IDocHostUIHandler2 iface,
DWORD  dwID,
IOleInPlaceActiveObject pActiveObject,
IOleCommandTarget pCommandTarget,
IOleInPlaceFrame pFrame,
IOleInPlaceUIWindow pDoc 
)
static

Definition at line 853 of file dochost.c.

856 {
858  FIXME("(%p)->(%d %p %p %p %p)\n", This, dwID, pActiveObject, pCommandTarget,
859  pFrame, pDoc);
860  return E_NOTIMPL;
861 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DocHostUIHandler_TranslateAccelerator()

static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator ( IDocHostUIHandler2 iface,
LPMSG  lpMsg,
const GUID pguidCmdGroup,
DWORD  nCmdID 
)
static

Definition at line 914 of file dochost.c.

916 {
918  HRESULT hr = S_FALSE;
919  TRACE("(%p)->(%p %p %d)\n", This, lpMsg, pguidCmdGroup, nCmdID);
920 
921  if(This->hostui)
922  hr = IDocHostUIHandler_TranslateAccelerator(This->hostui, lpMsg, pguidCmdGroup, nCmdID);
923 
924  return hr;
925 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
HRESULT hr
Definition: shlfolder.c:183
#define S_FALSE
Definition: winerror.h:2357
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77

◆ DocHostUIHandler_TranslateUrl()

static HRESULT WINAPI DocHostUIHandler_TranslateUrl ( IDocHostUIHandler2 iface,
DWORD  dwTranslate,
OLECHAR pchURLIn,
OLECHAR **  ppchURLOut 
)
static

Definition at line 971 of file dochost.c.

973 {
975 
976  TRACE("(%p)->(%d %s %p)\n", This, dwTranslate, debugstr_w(pchURLIn), ppchURLOut);
977 
978  if(This->hostui)
979  return IDocHostUIHandler_TranslateUrl(This->hostui, dwTranslate,
980  pchURLIn, ppchURLOut);
981 
982  return S_FALSE;
983 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define debugstr_w
Definition: kernel32.h:32
#define S_FALSE
Definition: winerror.h:2357
#define TRACE(s)
Definition: solgame.cpp:4

◆ DocHostUIHandler_UpdateUI()

static HRESULT WINAPI DocHostUIHandler_UpdateUI ( IDocHostUIHandler2 iface)
static

Definition at line 870 of file dochost.c.

871 {
873 
874  TRACE("(%p)\n", This);
875 
876  if(!This->hostui)
877  return S_FALSE;
878 
879  return IDocHostUIHandler_UpdateUI(This->hostui);
880 }
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790
#define S_FALSE
Definition: winerror.h:2357
#define TRACE(s)
Definition: solgame.cpp:4

◆ dump_travellog()

static void dump_travellog ( DocHost This)
static

Definition at line 414 of file dochost.c.

415 {
416  unsigned i;
417 
418  for(i=0; i < This->travellog.length; i++)
419  TRACE("%d: %s %s\n", i, i == This->travellog.position ? "=>" : " ", debugstr_w(This->travellog.log[i].url));
420  if(i == This->travellog.position)
421  TRACE("%d: =>\n", i);
422 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by update_travellog().

◆ free_travellog_entry()

static void free_travellog_entry ( travellog_entry_t entry)
static

Definition at line 385 of file dochost.c.

386 {
387  if(entry->stream)
388  IStream_Release(entry->stream);
389  heap_free(entry->url);
390 }
uint32_t entry
Definition: isohybrid.c:63
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by DocHost_Release(), and update_travellog().

◆ get_doc_ready_state()

static HRESULT get_doc_ready_state ( DocHost This,
READYSTATE *  ret 
)
static

Definition at line 179 of file dochost.c.

180 {
181  DISPPARAMS dp = {NULL,NULL,0,0};
182  IDispatch *disp;
183  EXCEPINFO ei;
184  VARIANT var;
185  HRESULT hres;
186 
187  hres = IUnknown_QueryInterface(This->document, &IID_IDispatch, (void**)&disp);
188  if(FAILED(hres))
189  return hres;
190 
192  &dp, &var, &ei, NULL);
193  IDispatch_Release(disp);
194  if(FAILED(hres)) {
195  WARN("Invoke(DISPID_READYSTATE failed: %08x\n", hres);
196  return hres;
197  }
198 
199  if(V_VT(&var) != VT_I4) {
200  WARN("V_VT(var) = %d\n", V_VT(&var));
201  VariantClear(&var);
202  return E_FAIL;
203  }
204 
205  *ret = V_I4(&var);
206  return S_OK;
207 }
disp
Definition: i386-dis.c:3181
Definition: compat.h:1947
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
#define WARN(fmt,...)
Definition: debug.h:111
#define E_FAIL
Definition: ddrawi.h:102
#define V_I4(A)
Definition: oleauto.h:247
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
#define LOCALE_SYSTEM_DEFAULT
const GUID IID_IDispatch
int ret
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
#define IID_NULL
Definition: guiddef.h:98
#define V_VT(A)
Definition: oleauto.h:211
struct stdole::EXCEPINFO EXCEPINFO
#define S_OK
Definition: intsafe.h:59
#define DISPID_READYSTATE
Definition: idispids.h:22
struct stdole::DISPPARAMS DISPPARAMS

Referenced by dochost_object_available(), and PropertyNotifySink_OnChanged().

◆ get_travellog_stream()

static IStream* get_travellog_stream ( DocHost This)
static

Definition at line 392 of file dochost.c.

393 {
394  IPersistHistory *persist_history;
395  IStream *stream;
396  HRESULT hres;
397 
398  hres = IUnknown_QueryInterface(This->document, &IID_IPersistHistory, (void**)&persist_history);
399  if(FAILED(hres))
400  return NULL;
401 
403  if(SUCCEEDED(hres))
404  hres = IPersistHistory_SaveHistory(persist_history, stream);
405  IPersistHistory_Release(persist_history);
406  if(FAILED(hres)) {
407  IStream_Release(stream);
408  return NULL;
409  }
410 
411  return stream;
412 }
#define TRUE
Definition: types.h:120
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
Definition: parse.h:22
GLuint GLuint stream
Definition: glext.h:7522
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by update_travellog().

◆ impl_from_IDocHostUIHandler2()

◆ impl_from_IOleCommandTarget()

static DocHost* impl_from_IOleCommandTarget ( IOleCommandTarget iface)
inlinestatic

Definition at line 629 of file dochost.c.

630 {
631  return CONTAINING_RECORD(iface, DocHost, IOleCommandTarget_iface);
632 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by ClOleCommandTarget_AddRef(), ClOleCommandTarget_Exec(), ClOleCommandTarget_QueryInterface(), ClOleCommandTarget_QueryStatus(), and ClOleCommandTarget_Release().

◆ impl_from_IPropertyNotifySink()

static DocHost* impl_from_IPropertyNotifySink ( IPropertyNotifySink iface)
inlinestatic

Definition at line 1038 of file dochost.c.

1039 {
1040  return CONTAINING_RECORD(iface, DocHost, IPropertyNotifySink_iface);
1041 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by PropertyNotifySink_AddRef(), PropertyNotifySink_OnChanged(), PropertyNotifySink_OnRequestEdit(), PropertyNotifySink_QueryInterface(), and PropertyNotifySink_Release().

◆ notif_complete()

static void notif_complete ( DocHost This,
DISPID  dispid 
)
static

Definition at line 114 of file dochost.c.

115 {
116  DISPPARAMS dispparams;
117  VARIANTARG params[2];
118  VARIANT url;
119 
120  dispparams.cArgs = 2;
121  dispparams.cNamedArgs = 0;
122  dispparams.rgdispidNamedArgs = NULL;
123  dispparams.rgvarg = params;
124 
126  V_BYREF(params) = &url;
127 
128  V_VT(params+1) = VT_DISPATCH;
129  V_DISPATCH(params+1) = (IDispatch*)This->wb;
130 
131  V_VT(&url) = VT_BSTR;
132  V_BSTR(&url) = SysAllocString(This->url);
133 
134  TRACE("%d >>>\n", dispid);
135  call_sink(This->cps.wbe2, dispid, &dispparams);
136  TRACE("%d <<<\n", dispid);
137 
139 }
#define V_DISPATCH(A)
Definition: oleauto.h:239
GLenum const GLfloat * params
Definition: glext.h:5645
void call_sink(ConnectionPoint *This, DISPID dispid, DISPPARAMS *dispparams)
Definition: events.c:391
#define V_BYREF(A)
Definition: oleauto.h:228
smooth NULL
Definition: ftsmooth.c:416
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
#define TRACE(s)
Definition: solgame.cpp:4
static const WCHAR url[]
Definition: encode.c:1432
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
struct stdole::DISPPARAMS DISPPARAMS

Referenced by update_ready_state().

◆ object_available()

static void object_available ( DocHost This)
static

Definition at line 141 of file dochost.c.

142 {
143  IHlinkTarget *hlink;
144  HRESULT hres;
145 
146  TRACE("(%p)\n", This);
147 
148  if(!This->document) {
149  WARN("document == NULL\n");
150  return;
151  }
152 
153  hres = IUnknown_QueryInterface(This->document, &IID_IHlinkTarget, (void**)&hlink);
154  if(SUCCEEDED(hres)) {
155  hres = IHlinkTarget_Navigate(hlink, 0, NULL);
156  IHlinkTarget_Release(hlink);
157  if(FAILED(hres))
158  FIXME("Navigate failed\n");
159  }else {
160  IOleObject *ole_object;
161  RECT rect;
162 
163  TRACE("No IHlink iface\n");
164 
165  hres = IUnknown_QueryInterface(This->document, &IID_IOleObject, (void**)&ole_object);
166  if(FAILED(hres)) {
167  FIXME("Could not get IOleObject iface: %08x\n", hres);
168  return;
169  }
170 
171  GetClientRect(This->hwnd, &rect);
172  hres = IOleObject_DoVerb(ole_object, OLEIVERB_SHOW, NULL, &This->IOleClientSite_iface, -1, This->hwnd, &rect);
173  IOleObject_Release(ole_object);
174  if(FAILED(hres))
175  FIXME("DoVerb failed: %08x\n", hres);
176  }
177 }
#define WARN(fmt,...)
Definition: debug.h:111
& rect
Definition: startmenu.cpp:1413
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
const GUID IID_IOleObject
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define OLEIVERB_SHOW
Definition: ole2.h:39
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by object_available_proc().

◆ object_available_proc()

static void object_available_proc ( DocHost This,
task_header_t task 
)
static

Definition at line 299 of file dochost.c.

300 {
302 }
static void object_available(DocHost *This)
Definition: dochost.c:141

Referenced by dochost_object_available().

◆ object_available_task_destr()

static void object_available_task_destr ( task_header_t task)
static

Definition at line 294 of file dochost.c.

295 {
296  heap_free(task);
297 }
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by dochost_object_available().

◆ on_commandstate_change()

void on_commandstate_change ( DocHost doc_host,
LONG  command,
BOOL  enable 
)

Definition at line 83 of file dochost.c.

84 {
85  DISPPARAMS dispparams;
86  VARIANTARG params[2];
87 
88  TRACE("command=%d enable=%d\n", command, enable);
89 
90  dispparams.cArgs = 2;
91  dispparams.cNamedArgs = 0;
92  dispparams.rgdispidNamedArgs = NULL;
93  dispparams.rgvarg = params;
94 
95  V_VT(params) = VT_BOOL;
96  V_BOOL(params) = enable ? VARIANT_TRUE : VARIANT_FALSE;
97 
98  V_VT(params+1) = VT_I4;
99  V_I4(params+1) = command;
100 
101  call_sink(doc_host->cps.wbe2, DISPID_COMMANDSTATECHANGE, &dispparams);
102 
103  doc_host->container_vtbl->on_command_state_change(doc_host, command, enable);
104 }
#define DISPID_COMMANDSTATECHANGE
Definition: webchild.h:40
Definition: compat.h:1947
void(* on_command_state_change)(DocHost *, LONG, BOOL)
Definition: ieframe.h:115
const IDocHostContainerVtbl * container_vtbl
Definition: ieframe.h:144
#define V_I4(A)
Definition: oleauto.h:247
ConnectionPointContainer cps
Definition: ieframe.h:173
GLenum const GLfloat * params
Definition: glext.h:5645
void call_sink(ConnectionPoint *This, DISPID dispid, DISPPARAMS *dispparams)
Definition: events.c:391
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_VT(A)
Definition: oleauto.h:211
ConnectionPoint * wbe2
Definition: ieframe.h:55
GLboolean enable
Definition: glext.h:11120
int command(const char *fmt,...)
Definition: ftp.c:266
struct stdole::DISPPARAMS DISPPARAMS

Referenced by navigate_bsc(), OleObject_SetClientSite(), and update_navigation_commands().

◆ process_dochost_tasks()

LRESULT process_dochost_tasks ( DocHost This)

Definition at line 55 of file dochost.c.

56 {
57  task_header_t *task;
58 
59  while(!list_empty(&This->task_queue)) {
60  task = LIST_ENTRY(This->task_queue.next, task_header_t, entry);
61  list_remove(&task->entry);
62 
63  task->proc(This, task);
64  task->destr(task);
65  }
66 
67  return 0;
68 }
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
uint32_t entry
Definition: isohybrid.c:63
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
Definition: list.h:143
async_task_proc_t proc
Definition: internet.h:390
#define LIST_ENTRY(type)
Definition: queue.h:175

Referenced by ie_window_proc(), and shell_embedding_proc().

◆ PropertyNotifySink_AddRef()

static ULONG WINAPI PropertyNotifySink_AddRef ( IPropertyNotifySink iface)
static

Definition at line 1050 of file dochost.c.

1051 {
1053  return IOleClientSite_AddRef(&This->IOleClientSite_iface);
1054 }
static DocHost * impl_from_IPropertyNotifySink(IPropertyNotifySink *iface)
Definition: dochost.c:1038

◆ PropertyNotifySink_OnChanged()

static HRESULT WINAPI PropertyNotifySink_OnChanged ( IPropertyNotifySink iface,
DISPID  dispID 
)
static

Definition at line 1062 of file dochost.c.

1063 {
1065 
1066  TRACE("(%p)->(%d)\n", This, dispID);
1067 
1068  switch(dispID) {
1069  case DISPID_READYSTATE: {
1070  READYSTATE ready_state;
1071  HRESULT hres;
1072 
1073  hres = get_doc_ready_state(This, &ready_state);
1074  if(FAILED(hres))
1075  return hres;
1076 
1077  if(ready_state == READYSTATE_COMPLETE && !This->doc_navigate)
1079 
1080  update_ready_state(This, ready_state);
1081  break;
1082  }
1083  default:
1084  FIXME("unimplemented dispid %d\n", dispID);
1085  return E_NOTIMPL;
1086  }
1087 
1088  return S_OK;
1089 }
static void advise_prop_notif(DocHost *This, BOOL set)
Definition: dochost.c:209
static void update_ready_state(DocHost *This, READYSTATE ready_state)
Definition: dochost.c:241
#define FIXME(fmt,...)
Definition: debug.h:110
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
static DocHost * impl_from_IPropertyNotifySink(IPropertyNotifySink *iface)
Definition: dochost.c:1038
static HRESULT get_doc_ready_state(DocHost *This, READYSTATE *ret)
Definition: dochost.c:179
#define S_OK
Definition: intsafe.h:59
#define E_NOTIMPL
Definition: ddrawi.h:99
#define DISPID_READYSTATE
Definition: idispids.h:22

◆ PropertyNotifySink_OnRequestEdit()

static HRESULT WINAPI PropertyNotifySink_OnRequestEdit ( IPropertyNotifySink iface,
DISPID  dispID 
)
static

Definition at line 1091 of file dochost.c.

1092 {
1094  FIXME("(%p)->(%d)\n", This, dispID);
1095  return E_NOTIMPL;
1096 }
#define FIXME(fmt,...)
Definition: debug.h:110
static DocHost * impl_from_IPropertyNotifySink(IPropertyNotifySink *iface)
Definition: dochost.c:1038
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ PropertyNotifySink_QueryInterface()

static HRESULT WINAPI PropertyNotifySink_QueryInterface ( IPropertyNotifySink iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1043 of file dochost.c.

1045 {
1047  return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
1048 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static DocHost * impl_from_IPropertyNotifySink(IPropertyNotifySink *iface)
Definition: dochost.c:1038

◆ PropertyNotifySink_Release()

static ULONG WINAPI PropertyNotifySink_Release ( IPropertyNotifySink iface)
static

Definition at line 1056 of file dochost.c.

1057 {
1059  return IOleClientSite_Release(&This->IOleClientSite_iface);
1060 }
static DocHost * impl_from_IPropertyNotifySink(IPropertyNotifySink *iface)
Definition: dochost.c:1038

◆ push_dochost_task()

void push_dochost_task ( DocHost This,
task_header_t task,
task_proc_t  proc,
task_destr_t  destr,
BOOL  send 
)

Definition at line 39 of file dochost.c.

40 {
41  BOOL is_empty;
42 
43  task->proc = proc;
44  task->destr = destr;
45 
46  is_empty = list_empty(&This->task_queue);
47  list_add_tail(&This->task_queue, &task->entry);
48 
49  if(send)
50  SendMessageW(This->frame_hwnd, WM_DOCHOSTTASK, 0, 0);
51  else if(is_empty)
52  PostMessageW(This->frame_hwnd, WM_DOCHOSTTASK, 0, 0);
53 }
static HANDLE proc()
Definition: pdb.c:32
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
Definition: list.h:102
unsigned int BOOL
Definition: ntddk_ex.h:94
#define WM_DOCHOSTTASK
Definition: ieframe.h:293
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
Definition: send.c:23
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
Definition: list.h:143
async_task_proc_t proc
Definition: internet.h:390
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by async_doc_navigate(), dochost_object_available(), navigate_url(), and push_ready_state_task().

◆ push_ready_state_task()

static void push_ready_state_task ( DocHost This,
READYSTATE  ready_state 
)
static

Definition at line 283 of file dochost.c.

284 {
286 
287  IUnknown_AddRef(This->document);
288  task->doc = This->document;
289  task->ready_state = ready_state;
290 
292 }
IUnknown * doc
Definition: dochost.c:263
static void ready_state_task_destr(task_header_t *_task)
Definition: dochost.c:267
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
static void ready_state_proc(DocHost *This, task_header_t *_task)
Definition: dochost.c:275
void push_dochost_task(DocHost *This, task_header_t *task, task_proc_t proc, task_destr_t destr, BOOL send)
Definition: dochost.c:39
task_header_t header
Definition: dochost.c:262
READYSTATE ready_state
Definition: dochost.c:264

Referenced by dochost_object_available().

◆ ready_state_proc()

static void ready_state_proc ( DocHost This,
task_header_t _task 
)
static

Definition at line 275 of file dochost.c.

276 {
277  ready_state_task_t *task = (ready_state_task_t*)_task;
278 
279  if(task->doc == This->document)
281 }
IUnknown * doc
Definition: dochost.c:263
static void update_ready_state(DocHost *This, READYSTATE ready_state)
Definition: dochost.c:241
READYSTATE ready_state
Definition: dochost.c:264

Referenced by push_ready_state_task().

◆ ready_state_task_destr()

static void ready_state_task_destr ( task_header_t _task)
static

Definition at line 267 of file dochost.c.

268 {
269  ready_state_task_t *task = (ready_state_task_t*)_task;
270 
271  IUnknown_Release(task->doc);
272  heap_free(task);
273 }
IUnknown * doc
Definition: dochost.c:263
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by push_ready_state_task().

◆ refresh_document()

HRESULT refresh_document ( DocHost This,
const VARIANT level 
)

Definition at line 572 of file dochost.c.

573 {
574  IOleCommandTarget *cmdtrg;
575  VARIANT vin, vout;
576  HRESULT hres;
577 
578  if(level && (V_VT(level) != VT_I4 || V_I4(level) != REFRESH_NORMAL))
579  FIXME("Unsupported refresh level %s\n", debugstr_variant(level));
580 
581  if(!This->document) {
582  FIXME("no document\n");
583  return E_FAIL;
584  }
585 
586  hres = IUnknown_QueryInterface(This->document, &IID_IOleCommandTarget, (void**)&cmdtrg);
587  if(FAILED(hres))
588  return hres;
589 
590  V_VT(&vin) = VT_EMPTY;
591  V_VT(&vout) = VT_EMPTY;
592  hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_REFRESH, OLECMDEXECOPT_PROMPTUSER, &vin, &vout);
593  IOleCommandTarget_Release(cmdtrg);
594  if(FAILED(hres))
595  return hres;
596 
597  VariantClear(&vout);
598  return S_OK;
599 }
GLint level
Definition: gl.h:1546
Definition: compat.h:1947
#define E_FAIL
Definition: ddrawi.h:102
#define V_I4(A)
Definition: oleauto.h:247
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
#define V_VT(A)
Definition: oleauto.h:211
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
#define S_OK
Definition: intsafe.h:59

Referenced by InternetExplorer_Refresh(), InternetExplorer_Refresh2(), WebBrowser_Refresh(), and WebBrowser_Refresh2().

◆ release_dochost_client()

void release_dochost_client ( DocHost This)

Definition at line 601 of file dochost.c.

602 {
603  if(This->hwnd) {
604  DestroyWindow(This->hwnd);
605  This->hwnd = NULL;
606  }
607 
608  if(This->hostui) {
609  IDocHostUIHandler_Release(This->hostui);
610  This->hostui = NULL;
611  }
612 
613  if(This->client_disp) {
614  IDispatch_Release(This->client_disp);
615  This->client_disp = NULL;
616  }
617 
618  if(This->frame) {
619  IOleInPlaceFrame_Release(This->frame);
620  This->frame = NULL;
621  }
622 
623  if(This->olecmd) {
624  IOleCommandTarget_Release(This->olecmd);
625  This->olecmd = NULL;
626  }
627 }
BOOL WINAPI DestroyWindow(_In_ HWND)
smooth NULL
Definition: ftsmooth.c:416

Referenced by DocHost_Release(), and release_client_site().

◆ resize_document()

static LRESULT resize_document ( DocHost This,
LONG  width,
LONG  height 
)
static

Definition at line 352 of file dochost.c.

353 {
354  RECT rect = {0, 0, width, height};
355 
356  TRACE("(%p)->(%d %d)\n", This, width, height);
357 
358  if(This->view)
359  IOleDocumentView_SetRect(This->view, &rect);
360 
361  return 0;
362 }
GLint GLint GLsizei width
Definition: gl.h:1546
& rect
Definition: startmenu.cpp:1413
#define TRACE(s)
Definition: solgame.cpp:4
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546

Referenced by doc_view_proc().

◆ set_doc_state()

void set_doc_state ( DocHost This,
READYSTATE  doc_state 
)

Definition at line 234 of file dochost.c.

235 {
236  This->doc_state = doc_state;
237  if(doc_state > This->ready_state)
238  This->ready_state = doc_state;
239 }

Referenced by html_window_navigate(), navigate_bsc(), navigate_url(), and update_ready_state().

◆ update_navigation_commands()

void update_navigation_commands ( DocHost dochost)

Definition at line 106 of file dochost.c.

107 {
108  unsigned pos = dochost->travellog.loading_pos == -1 ? dochost->travellog.position : dochost->travellog.loading_pos;
109 
111  on_commandstate_change(dochost, CSC_NAVIGATEFORWARD, pos < dochost->travellog.length);
112 }
void on_commandstate_change(DocHost *doc_host, LONG command, BOOL enable)
Definition: dochost.c:83
struct DocHost::@413 travellog
SHDocVw::uuid CSC_NAVIGATEBACK
SHDocVw::uuid CSC_NAVIGATEFORWARD

Referenced by ClOleCommandTarget_Exec(), DocObjectService_FireNavigateComplete2(), and navigate_history().

◆ update_ready_state()

static void update_ready_state ( DocHost This,
READYSTATE  ready_state 
)
static

Definition at line 241 of file dochost.c.

242 {
243  if(ready_state > READYSTATE_LOADING && This->travellog.loading_pos != -1) {
244  WARN("histupdate not notified\n");
245  This->travellog.position = This->travellog.loading_pos;
246  This->travellog.loading_pos = -1;
247  }
248 
249  if(ready_state > READYSTATE_LOADING && This->doc_state <= READYSTATE_LOADING && !This->browser_service /* FIXME */)
251 
252  if(ready_state == READYSTATE_COMPLETE && This->doc_state < READYSTATE_COMPLETE) {
253  set_doc_state(This, READYSTATE_COMPLETE);
254  if(!This->browser_service) /* FIXME: Not fully correct */
256  }else {
257  set_doc_state(This, ready_state);
258  }
259 }
#define WARN(fmt,...)
Definition: debug.h:111
#define DISPID_DOCUMENTCOMPLETE
Definition: webchild.h:61
#define DISPID_NAVIGATECOMPLETE2
Definition: webchild.h:54
void set_doc_state(DocHost *This, READYSTATE doc_state)
Definition: dochost.c:234
static void notif_complete(DocHost *This, DISPID dispid)
Definition: dochost.c:114

Referenced by PropertyNotifySink_OnChanged(), and ready_state_proc().

◆ update_travellog()

static void update_travellog ( DocHost This)
static

Definition at line 424 of file dochost.c.

425 {
426  travellog_entry_t *new_entry;
427 
428  static const WCHAR about_schemeW[] = {'a','b','o','u','t',':'};
429 
430  if(This->url && !_wcsnicmp(This->url, about_schemeW, ARRAY_SIZE(about_schemeW))) {
431  TRACE("Skipping about URL\n");
432  return;
433  }
434 
435  if(!This->travellog.log) {
436  This->travellog.log = heap_alloc(4 * sizeof(*This->travellog.log));
437  if(!This->travellog.log)
438  return;
439 
440  This->travellog.size = 4;
441  }else if(This->travellog.size < This->travellog.position+1) {
442  travellog_entry_t *new_travellog;
443 
444  new_travellog = heap_realloc(This->travellog.log, This->travellog.size*2*sizeof(*This->travellog.log));
445  if(!new_travellog)
446  return;
447 
448  This->travellog.log = new_travellog;
449  This->travellog.size *= 2;
450  }
451 
452  if(This->travellog.loading_pos == -1) {
453  /* Clear forward history. */
454  while(This->travellog.length > This->travellog.position)
455  free_travellog_entry(This->travellog.log + --This->travellog.length);
456  }
457 
458  new_entry = This->travellog.log + This->travellog.position;
459 
460  new_entry->url = heap_strdupW(This->url);
461  TRACE("Adding %s at %d\n", debugstr_w(This->url), This->travellog.position);
462  if(!new_entry->url)
463  return;
464 
465  new_entry->stream = get_travellog_stream(This);
466 
467  if(This->travellog.loading_pos == -1) {
468  This->travellog.position++;
469  }else {
470  This->travellog.position = This->travellog.loading_pos;
471  This->travellog.loading_pos = -1;
472  }
473  if(This->travellog.position > This->travellog.length)
474  This->travellog.length = This->travellog.position;
475 
477 }
static IStream * get_travellog_stream(DocHost *This)
Definition: dochost.c:392
IStream * stream
Definition: ieframe.h:106
WCHAR * url
Definition: ieframe.h:105
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
static void free_travellog_entry(travellog_entry_t *entry)
Definition: dochost.c:385
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:70
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
static WCHAR * heap_strdupW(const WCHAR *str)
Definition: propsheet.c:178
#define debugstr_w
Definition: kernel32.h:32
Definition: ieframe.h:104
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
static void dump_travellog(DocHost *This)
Definition: dochost.c:414
#define ARRAY_SIZE(a)
Definition: main.h:24

Referenced by ClOleCommandTarget_Exec().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ieframe  )

Variable Documentation

◆ doc_view_atom

ATOM doc_view_atom = 0
static

Definition at line 37 of file dochost.c.

Referenced by create_doc_view_hwnd().

◆ DocHostUIHandler2Vtbl

const IDocHostUIHandler2Vtbl DocHostUIHandler2Vtbl
static
Initial value:
= {
}
static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
Definition: dochost.c:853
static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface)
Definition: dochost.c:802
static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
Definition: dochost.c:993
static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
Definition: dochost.c:971
static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
Definition: dochost.c:948
static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
Definition: dochost.c:898
static HRESULT WINAPI DocHostUIHandler_HideUI(IDocHostUIHandler2 *iface)
Definition: dochost.c:863
static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
Definition: dochost.c:870
static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *iface, LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID)
Definition: dochost.c:914
static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
Definition: dochost.c:795
static ULONG WINAPI DocHostUIHandler_Release(IDocHostUIHandler2 *iface)
Definition: dochost.c:808
static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
Definition: dochost.c:882
static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
Definition: dochost.c:833
static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved)
Definition: dochost.c:814
static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO, IDataObject **ppDORet)
Definition: dochost.c:985
static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
Definition: dochost.c:890
static HRESULT WINAPI DocHostUIHandler_ResizeBorder(IDocHostUIHandler2 *iface, LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
Definition: dochost.c:906
static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
Definition: dochost.c:927
static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface, IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
Definition: dochost.c:940

Definition at line 1016 of file dochost.c.

Referenced by DocHost_Init().

◆ OleCommandTargetVtbl

const IOleCommandTargetVtbl OleCommandTargetVtbl
static
Initial value:
= {
}
static HRESULT WINAPI ClOleCommandTarget_QueryInterface(IOleCommandTarget *iface, REFIID riid, void **ppv)
Definition: dochost.c:634
static ULONG WINAPI ClOleCommandTarget_AddRef(IOleCommandTarget *iface)
Definition: dochost.c:641
static HRESULT WINAPI ClOleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: dochost.c:667
static HRESULT WINAPI ClOleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
Definition: dochost.c:653
static ULONG WINAPI ClOleCommandTarget_Release(IOleCommandTarget *iface)
Definition: dochost.c:647

Definition at line 782 of file dochost.c.

Referenced by DocHost_Init().

◆ PropertyNotifySinkVtbl

const IPropertyNotifySinkVtbl PropertyNotifySinkVtbl
static
Initial value:
= {
}
static ULONG WINAPI PropertyNotifySink_Release(IPropertyNotifySink *iface)
Definition: dochost.c:1056
static ULONG WINAPI PropertyNotifySink_AddRef(IPropertyNotifySink *iface)
Definition: dochost.c:1050
static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, DISPID dispID)
Definition: dochost.c:1062
static HRESULT WINAPI PropertyNotifySink_OnRequestEdit(IPropertyNotifySink *iface, DISPID dispID)
Definition: dochost.c:1091
static HRESULT WINAPI PropertyNotifySink_QueryInterface(IPropertyNotifySink *iface, REFIID riid, void **ppv)
Definition: dochost.c:1043

Definition at line 1098 of file dochost.c.

Referenced by DocHost_Init().