diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index ee608de6aea..aece65948d1 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -47,6 +47,12 @@ typedef struct HTMLDOMNode HTMLDOMNode; typedef struct ConnectionPoint ConnectionPoint; typedef struct BSCallback BSCallback; +typedef enum { + UNKNOWN_USERMODE, + BROWSEMODE, + EDITMODE +} USERMODE; + typedef struct { const IHTMLDocument2Vtbl *lpHTMLDocument2Vtbl; const IHTMLDocument3Vtbl *lpHTMLDocument3Vtbl; @@ -78,6 +84,7 @@ typedef struct { HWND hwnd; HWND tooltips_hwnd; + USERMODE usermode; BOOL in_place_active; BOOL ui_active; BOOL window_active; diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c index 1881062be1a..95d86463ace 100644 --- a/dlls/mshtml/olecmd.c +++ b/dlls/mshtml/olecmd.c @@ -30,6 +30,7 @@ #include "shlguid.h" #include "mshtmdid.h" #include "idispids.h" +#include "mshtmcid.h" #include "wine/debug.h" @@ -237,6 +238,15 @@ static HRESULT exec_get_print_template(HTMLDocument *This, DWORD nCmdexecopt, VA return E_NOTIMPL; } +static HRESULT exec_browsemode(HTMLDocument *This) +{ + WARN("(%p)\n", This); + + This->usermode = BROWSEMODE; + + return S_OK; +} + static const struct { OLECMDF cmdf; HRESULT (*func)(HTMLDocument*,DWORD,VARIANT*,VARIANT*); @@ -374,8 +384,13 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID FIXME("unsupported nCmdID %ld of CGID_ShellDocView group\n", nCmdID); return OLECMDERR_E_NOTSUPPORTED; }else if(IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) { - FIXME("unsupported nCmdID %ld of CGID_MSHTML group\n", nCmdID); - return OLECMDERR_E_NOTSUPPORTED; + switch(nCmdID) { + case IDM_BROWSEMODE: + return exec_browsemode(This); + default: + FIXME("unsupported nCmdID %ld of CGID_MSHTML group\n", nCmdID); + return OLECMDERR_E_NOTSUPPORTED; + } } FIXME("Unsupported pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup)); diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c index c9d8ead84e9..981f65b5693 100644 --- a/dlls/mshtml/oleobj.c +++ b/dlls/mshtml/oleobj.c @@ -76,6 +76,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite if(This->client) { IOleClientSite_Release(This->client); This->client = NULL; + This->usermode = UNKNOWN_USERMODE; } if(This->hostui) { @@ -161,7 +162,9 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite This->client = pClientSite; This->hostui = pDocHostUIHandler; - IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_USERMODE); + if(This->usermode == UNKNOWN_USERMODE) + IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_USERMODE); + IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_OFFLINEIFNOTCONNECTED); IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_SILENT); IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_USERAGENT); @@ -571,9 +574,11 @@ static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DIS return S_OK; if(V_VT(&res) == VT_BOOL) { - if(!V_BOOL(&res)) { + if(V_BOOL(&res)) { + This->usermode = BROWSEMODE; + }else { FIXME("edit mode is not supported\n"); - hres = E_FAIL; + This->usermode = EDITMODE; } }else { FIXME("V_VT(res)=%d\n", V_VT(&res)); @@ -679,6 +684,8 @@ void HTMLDocument_OleObj_Init(HTMLDocument *This) This->lpOleDocumentVtbl = &OleDocumentVtbl; This->lpOleControlVtbl = &OleControlVtbl; + This->usermode = UNKNOWN_USERMODE; + This->client = NULL; This->hostui = NULL;