Ticket #13785: web2.patch

File web2.patch, 11.3 KB (added by Allonii, 8 years ago)

the new patch

  • include/wx/msw/webview_ie.h

     
    150150
    151151/* END OF URLMON.H implementation */
    152152
     153/* Same goes for the mshtmhst.h, these are also taken
     154 * from mingw-w64 headers.
     155 */
     156
     157typedef enum _tagwxDOCHOSTUIFLAG
     158{
     159    DOCHOSTUIFLAG_DIALOG = 0x1,DOCHOSTUIFLAG_DISABLE_HELP_MENU = 0x2,DOCHOSTUIFLAG_NO3DBORDER = 0x4,DOCHOSTUIFLAG_SCROLL_NO = 0x8,
     160    DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = 0x10,DOCHOSTUIFLAG_OPENNEWWIN = 0x20,DOCHOSTUIFLAG_DISABLE_OFFSCREEN = 0x40,
     161    DOCHOSTUIFLAG_FLAT_SCROLLBAR = 0x80,DOCHOSTUIFLAG_DIV_BLOCKDEFAULT = 0x100,DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY = 0x200,
     162    DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY = 0x400,DOCHOSTUIFLAG_CODEPAGELINKEDFONTS = 0x800,DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 = 0x1000,
     163    DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8 = 0x2000,DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE = 0x4000,DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION = 0x10000,
     164    DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION = 0x20000,DOCHOSTUIFLAG_THEME = 0x40000,DOCHOSTUIFLAG_NOTHEME = 0x80000,DOCHOSTUIFLAG_NOPICS = 0x100000,
     165    DOCHOSTUIFLAG_NO3DOUTERBORDER = 0x200000,DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP = 0x400000,DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK = 0x800000,
     166    DOCHOSTUIFLAG_DISABLE_UNTRUSTEDPROTOCOL = 0x1000000
     167} DOCHOSTUIFLAG;
     168
     169typedef struct _tagwxDOCHOSTUIINFO
     170{
     171    ULONG cbSize;
     172    DWORD dwFlags;
     173    DWORD dwDoubleClick;
     174    OLECHAR *pchHostCss;
     175    OLECHAR *pchHostNS;
     176} DOCHOSTUIINFO;
     177
     178//not required?
     179//DEFINE_GUID(IID_IDocHostUIHandler, 0xbd3f23c0, 0xd43e, 0x11cf, 0x89, 0x3b, 0x00, 0xaa, 0x00, 0xbd, 0xce, 0x1a);
     180
     181EXTERN_C const IID IID_IDocHostUIHandler;
     182
     183class wxIDocHostUIHandler : public IUnknown
     184{
     185public:
     186    virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(
     187        DWORD dwID,
     188        POINT *ppt,
     189        IUnknown *pcmdtReserved,
     190        IDispatch *pdispReserved) = 0;
     191
     192    virtual HRESULT STDMETHODCALLTYPE GetHostInfo(
     193        DOCHOSTUIINFO *pInfo) = 0;
     194
     195    virtual HRESULT STDMETHODCALLTYPE ShowUI(
     196        DWORD dwID,
     197        IOleInPlaceActiveObject *pActiveObject,
     198        IOleCommandTarget *pCommandTarget,
     199        IOleInPlaceFrame *pFrame,
     200        IOleInPlaceUIWindow *pDoc) = 0;
     201
     202    virtual HRESULT STDMETHODCALLTYPE HideUI(void) = 0;
     203
     204    virtual HRESULT STDMETHODCALLTYPE UpdateUI(void) = 0;
     205
     206    virtual HRESULT STDMETHODCALLTYPE EnableModeless(
     207        BOOL fEnable) = 0;
     208
     209    virtual HRESULT STDMETHODCALLTYPE OnDocWindowActivate(
     210        BOOL fActivate) = 0;
     211
     212    virtual HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(
     213        BOOL fActivate) = 0;
     214
     215    virtual HRESULT STDMETHODCALLTYPE ResizeBorder(
     216        LPCRECT prcBorder,
     217        IOleInPlaceUIWindow *pUIWindow,
     218        BOOL fRameWindow) = 0;
     219
     220    virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(
     221        LPMSG lpMsg,
     222        const GUID *pguidCmdGroup,
     223        DWORD nCmdID) = 0;
     224
     225    virtual HRESULT STDMETHODCALLTYPE GetOptionKeyPath(
     226        __out  LPOLESTR *pchKey,
     227        DWORD dw) = 0;
     228
     229    virtual HRESULT STDMETHODCALLTYPE GetDropTarget(
     230        IDropTarget *pDropTarget,
     231        IDropTarget **ppDropTarget) = 0;
     232
     233    virtual HRESULT STDMETHODCALLTYPE GetExternal(
     234        IDispatch **ppDispatch) = 0;
     235
     236    virtual HRESULT STDMETHODCALLTYPE TranslateUrl(
     237        DWORD dwTranslate,
     238        __in __nullterminated  OLECHAR *pchURLIn,
     239        __out  OLECHAR **ppchURLOut) = 0;
     240
     241    virtual HRESULT STDMETHODCALLTYPE FilterDataObject(
     242        IDataObject *pDO,
     243        IDataObject **ppDORet) = 0;
     244};
     245
     246/* END OF MSHTMHST.H implementation */
     247
    153248struct IHTMLDocument2;
    154249class wxFSFile;
    155250class ClassFactory;
     251class wxIEContainer;
     252class DocHostUIHandler;
    156253
    157254class WXDLLIMPEXP_WEBVIEW wxWebViewIE : public wxWebView
    158255{
     
    262359    DECLARE_EVENT_TABLE();
    263360
    264361private:
    265     wxActiveXContainer* m_container;
     362    wxIEContainer* m_container;
    266363    wxAutomationObject m_ie;
    267364    IWebBrowser2* m_webBrowser;
    268365    DWORD m_dwCookie;
     366    DocHostUIHandler* m_uiHandler;
    269367
    270368    //We store the current zoom type;
    271369    wxWebViewZoomType m_zoomType;
     
    353451    wxSharedPtr<wxWebViewHandler> m_handler;
    354452};
    355453
     454class wxIEContainer : public wxActiveXContainer
     455{
     456public:
     457    wxIEContainer(wxWindow *parent, REFIID iid, IUnknown *pUnk, DocHostUIHandler* uiHandler = NULL);
     458    virtual ~wxIEContainer();
     459    virtual bool QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc);
     460private:
     461    DocHostUIHandler* m_uiHandler;
     462};
     463
     464class DocHostUIHandler : public wxIDocHostUIHandler
     465{
     466public:
     467    DocHostUIHandler();
     468    ~DocHostUIHandler();
     469    virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(
     470        DWORD dwID,
     471        POINT *ppt,
     472        IUnknown *pcmdtReserved,
     473        IDispatch *pdispReserved);
     474
     475    virtual HRESULT STDMETHODCALLTYPE GetHostInfo(
     476        DOCHOSTUIINFO *pInfo);
     477
     478    virtual HRESULT STDMETHODCALLTYPE ShowUI(
     479        DWORD dwID,
     480        IOleInPlaceActiveObject *pActiveObject,
     481        IOleCommandTarget *pCommandTarget,
     482        IOleInPlaceFrame *pFrame,
     483        IOleInPlaceUIWindow *pDoc);
     484
     485    virtual HRESULT STDMETHODCALLTYPE HideUI(void);
     486
     487    virtual HRESULT STDMETHODCALLTYPE UpdateUI(void);
     488
     489    virtual HRESULT STDMETHODCALLTYPE EnableModeless(
     490        BOOL fEnable);
     491
     492    virtual HRESULT STDMETHODCALLTYPE OnDocWindowActivate(
     493        BOOL fActivate);
     494
     495    virtual HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(
     496        BOOL fActivate);
     497
     498    virtual HRESULT STDMETHODCALLTYPE ResizeBorder(
     499        LPCRECT prcBorder,
     500        IOleInPlaceUIWindow *pUIWindow,
     501        BOOL fRameWindow);
     502
     503    virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(
     504        LPMSG lpMsg,
     505        const GUID *pguidCmdGroup,
     506        DWORD nCmdID);
     507
     508    virtual HRESULT STDMETHODCALLTYPE GetOptionKeyPath(
     509        __out  LPOLESTR *pchKey,
     510        DWORD dw);
     511
     512    virtual HRESULT STDMETHODCALLTYPE GetDropTarget(
     513        IDropTarget *pDropTarget,
     514        IDropTarget **ppDropTarget);
     515
     516    virtual HRESULT STDMETHODCALLTYPE GetExternal(
     517        IDispatch **ppDispatch);
     518
     519    virtual HRESULT STDMETHODCALLTYPE TranslateUrl(
     520        DWORD dwTranslate,
     521        __in __nullterminated  OLECHAR *pchURLIn,
     522        __out  OLECHAR **ppchURLOut);
     523
     524    virtual HRESULT STDMETHODCALLTYPE FilterDataObject(
     525        IDataObject *pDO,
     526        IDataObject **ppDORet);
     527    //IUnknown
     528    DECLARE_IUNKNOWN_METHODS;
     529};
     530
    356531#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE && defined(__WXMSW__)
    357532
    358533#endif // wxWebViewIE_H
  • src/msw/webview_ie.cpp

     
    8181    m_webBrowser->put_RegisterAsBrowser(VARIANT_TRUE);
    8282    m_webBrowser->put_RegisterAsDropTarget(VARIANT_TRUE);
    8383
    84     m_container = new wxActiveXContainer(this, IID_IWebBrowser2, m_webBrowser);
     84    m_uiHandler = new DocHostUIHandler;
     85    m_uiHandler->AddRef();
    8586
     87    m_container = new wxIEContainer(this, IID_IWebBrowser2, m_webBrowser, m_uiHandler);
     88
    8689    LoadURL(url);
    8790    return true;
    8891}
     
    9396    {
    9497        m_factories[i]->Release();
    9598    }
     99
     100    m_uiHandler->Release();
    96101}
    97102
    98103void wxWebViewIE::LoadURL(const wxString& url)
     
    112117        param->bstrVal = bstr;
    113118
    114119        hr = SafeArrayUnaccessData(psaStrings);
    115        
     120
    116121        IHTMLDocument2* document = GetDocument();
    117122        document->write(psaStrings);
    118123        document->close();
     
    11551160    return S_OK;
    11561161}
    11571162
     1163wxIEContainer::wxIEContainer(wxWindow *parent, REFIID iid, IUnknown *pUnk, DocHostUIHandler* uiHandler) :
     1164    wxActiveXContainer(parent,iid,pUnk)
     1165{
     1166    m_uiHandler = uiHandler;
     1167}
     1168
     1169wxIEContainer::~wxIEContainer()
     1170{
     1171}
     1172
     1173bool wxIEContainer::QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc)
     1174{
     1175    if (m_uiHandler && IsEqualIID(iid, IID_IDocHostUIHandler))
     1176    {
     1177        *_interface = (IUnknown *) (wxIDocHostUIHandler *) m_uiHandler;
     1178        desc = "IDocHostUIHandler";
     1179        return true;
     1180    }
     1181    return false;
     1182}
     1183
     1184DocHostUIHandler::DocHostUIHandler()
     1185{
     1186}
     1187
     1188DocHostUIHandler::~DocHostUIHandler()
     1189{
     1190}
     1191
     1192HRESULT DocHostUIHandler::ShowContextMenu(DWORD dwID,POINT *ppt,IUnknown *pcmdtReserved,IDispatch *pdispReserved)
     1193{
     1194    wxUnusedVar(dwID);
     1195    wxUnusedVar(ppt);
     1196    wxUnusedVar(pcmdtReserved);
     1197    wxUnusedVar(pdispReserved);
     1198    return E_NOTIMPL;
     1199}
     1200
     1201HRESULT DocHostUIHandler::GetHostInfo(DOCHOSTUIINFO *pInfo)
     1202{
     1203    //don't show 3d border.
     1204    pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER;
     1205    return S_OK;
     1206}
     1207
     1208HRESULT DocHostUIHandler::ShowUI(DWORD dwID,IOleInPlaceActiveObject *pActiveObject,IOleCommandTarget *pCommandTarget,IOleInPlaceFrame *pFrame,IOleInPlaceUIWindow *pDoc)
     1209{
     1210    wxUnusedVar(dwID);
     1211    wxUnusedVar(pActiveObject);
     1212    wxUnusedVar(pCommandTarget);
     1213    wxUnusedVar(pFrame);
     1214    wxUnusedVar(pDoc);
     1215    return S_FALSE;
     1216}
     1217
     1218HRESULT DocHostUIHandler::HideUI(void)
     1219{
     1220    return E_NOTIMPL;
     1221}
     1222
     1223HRESULT DocHostUIHandler::UpdateUI(void)
     1224{
     1225    return E_NOTIMPL;
     1226}
     1227
     1228HRESULT DocHostUIHandler::EnableModeless(BOOL fEnable)
     1229{
     1230    wxUnusedVar(fEnable);
     1231    return E_NOTIMPL;
     1232}
     1233
     1234HRESULT DocHostUIHandler::OnDocWindowActivate(BOOL fActivate)
     1235{
     1236    wxUnusedVar(fActivate);
     1237    return E_NOTIMPL;
     1238}
     1239
     1240HRESULT DocHostUIHandler::OnFrameWindowActivate(BOOL fActivate)
     1241{
     1242    wxUnusedVar(fActivate);
     1243    return E_NOTIMPL;
     1244}
     1245
     1246HRESULT DocHostUIHandler::ResizeBorder(LPCRECT prcBorder,IOleInPlaceUIWindow *pUIWindow,BOOL fFrameWindow)
     1247{
     1248    wxUnusedVar(prcBorder);
     1249    wxUnusedVar(pUIWindow);
     1250    wxUnusedVar(fFrameWindow);
     1251    return E_NOTIMPL;
     1252}
     1253
     1254HRESULT DocHostUIHandler::TranslateAccelerator(LPMSG lpMsg,const GUID *pguidCmdGroup,DWORD nCmdID)
     1255{
     1256    if(lpMsg && lpMsg->message == WM_KEYDOWN)
     1257    {
     1258        //control is down?
     1259        if((GetKeyState(VK_CONTROL) & 0x8000 ))
     1260        {
     1261            //skip CTRL-N, CTRL-F and CTRL-P
     1262            if(lpMsg->wParam == 'N' || lpMsg->wParam == 'P' || lpMsg->wParam == 'F')
     1263            {
     1264                return S_OK;
     1265            }
     1266        }
     1267        //skip F5
     1268        if(lpMsg->wParam == VK_F5)
     1269        {
     1270            return S_OK;
     1271        }
     1272    }
     1273
     1274    wxUnusedVar(pguidCmdGroup);
     1275    wxUnusedVar(nCmdID);
     1276    return E_NOTIMPL;
     1277}
     1278
     1279HRESULT DocHostUIHandler::GetOptionKeyPath(LPOLESTR *pchKey,DWORD dw)
     1280{
     1281    wxUnusedVar(pchKey);
     1282    wxUnusedVar(dw);
     1283    return E_NOTIMPL;
     1284}
     1285
     1286HRESULT DocHostUIHandler::GetDropTarget(IDropTarget *pDropTarget,IDropTarget **ppDropTarget)
     1287{
     1288    wxUnusedVar(pDropTarget);
     1289    wxUnusedVar(ppDropTarget);
     1290    return E_NOTIMPL;
     1291}
     1292
     1293HRESULT DocHostUIHandler::GetExternal(IDispatch **ppDispatch)
     1294{
     1295    wxUnusedVar(ppDispatch);
     1296    return E_NOTIMPL;
     1297}
     1298
     1299HRESULT DocHostUIHandler::TranslateUrl(DWORD dwTranslate,OLECHAR *pchURLIn,OLECHAR **ppchURLOut)
     1300{
     1301    wxUnusedVar(dwTranslate);
     1302    wxUnusedVar(pchURLIn);
     1303    wxUnusedVar(ppchURLOut);
     1304    return E_NOTIMPL;
     1305}
     1306
     1307HRESULT DocHostUIHandler::FilterDataObject(IDataObject *pDO, IDataObject **ppDORet)
     1308{
     1309    wxUnusedVar(pDO);
     1310    wxUnusedVar(ppDORet);
     1311    return E_NOTIMPL;
     1312}
     1313
     1314BEGIN_IID_TABLE(DocHostUIHandler)
     1315    ADD_IID(Unknown)
     1316    ADD_IID(DocHostUIHandler)
     1317END_IID_TABLE;
     1318
     1319IMPLEMENT_IUNKNOWN_METHODS(DocHostUIHandler)
     1320
    11581321#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE