Chandra
view release on metacpan or search on metacpan
include/webview-win32.c view on Meta::CPAN
lpFrameInfo->haccel = NULL;
lpFrameInfo->cAccelEntries = 0;
return S_OK;
}
static HRESULT STDMETHODCALLTYPE ips_Scroll(IOleInPlaceSite *This, SIZE s) {
(void)This; (void)s; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE ips_OnUIDeactivate(IOleInPlaceSite *This, BOOL f) {
(void)This; (void)f; return S_OK;
}
static HRESULT STDMETHODCALLTYPE ips_OnInPlaceDeactivate(IOleInPlaceSite *This) {
(void)This; return S_OK;
}
static HRESULT STDMETHODCALLTYPE ips_DiscardUndoState(IOleInPlaceSite *This) {
(void)This; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE ips_DeactivateAndUndo(IOleInPlaceSite *This) {
(void)This; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE ips_OnPosRectChange(IOleInPlaceSite *This, LPCRECT lprcPosRect) {
(void)This; (void)lprcPosRect; return S_OK;
}
static IOleInPlaceSiteVtbl inplace_site_vtbl = {
ips_QueryInterface, ips_AddRef, ips_Release,
(HRESULT(STDMETHODCALLTYPE *)(IOleInPlaceSite *, HWND *))ips_GetWindow,
ips_ContextSensitiveHelp,
ips_CanInPlaceActivate, ips_OnInPlaceActivate, ips_OnUIActivate,
ips_GetWindowContext, ips_Scroll, ips_OnUIDeactivate,
ips_OnInPlaceDeactivate, ips_DiscardUndoState, ips_DeactivateAndUndo,
ips_OnPosRectChange
};
/* ---- IOleInPlaceFrame (minimal) ---- */
static HRESULT STDMETHODCALLTYPE ipf_QueryInterface(IOleInPlaceFrame *This, REFIID riid, void **ppv) {
(void)This; (void)riid; *ppv = NULL; return E_NOINTERFACE;
}
static ULONG STDMETHODCALLTYPE ipf_AddRef(IOleInPlaceFrame *This) { (void)This; return 1; }
static ULONG STDMETHODCALLTYPE ipf_Release(IOleInPlaceFrame *This) { (void)This; return 1; }
static HRESULT STDMETHODCALLTYPE ipf_GetWindow(IOleInPlaceFrame *This, HWND *phwnd) {
WebviewSite *s = (WebviewSite *)((char *)This - offsetof(WebviewSite, inplace_frame));
*phwnd = s->hwnd;
return S_OK;
}
static HRESULT STDMETHODCALLTYPE ipf_ContextSensitiveHelp(IOleInPlaceFrame *This, BOOL f) {
(void)This; (void)f; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE ipf_GetBorder(IOleInPlaceFrame *This, LPRECT r) {
(void)This; (void)r; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE ipf_RequestBorderSpace(IOleInPlaceFrame *This, LPCBORDERWIDTHS b) {
(void)This; (void)b; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE ipf_SetBorderSpace(IOleInPlaceFrame *This, LPCBORDERWIDTHS b) {
(void)This; (void)b; return S_OK;
}
static HRESULT STDMETHODCALLTYPE ipf_SetActiveObject(IOleInPlaceFrame *This, IOleInPlaceActiveObject *a, LPCOLESTR s) {
(void)This; (void)a; (void)s; return S_OK;
}
static HRESULT STDMETHODCALLTYPE ipf_InsertMenus(IOleInPlaceFrame *This, HMENU h, LPOLEMENUGROUPWIDTHS m) {
(void)This; (void)h; (void)m; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE ipf_SetMenu(IOleInPlaceFrame *This, HMENU a, HOLEMENU b, HWND c) {
(void)This; (void)a; (void)b; (void)c; return S_OK;
}
static HRESULT STDMETHODCALLTYPE ipf_RemoveMenus(IOleInPlaceFrame *This, HMENU h) {
(void)This; (void)h; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE ipf_SetStatusText(IOleInPlaceFrame *This, LPCOLESTR s) {
(void)This; (void)s; return S_OK;
}
static HRESULT STDMETHODCALLTYPE ipf_EnableModeless(IOleInPlaceFrame *This, BOOL f) {
(void)This; (void)f; return S_OK;
}
static HRESULT STDMETHODCALLTYPE ipf_TranslateAccelerator(IOleInPlaceFrame *This, LPMSG m, WORD w) {
(void)This; (void)m; (void)w; return E_NOTIMPL;
}
static IOleInPlaceFrameVtbl inplace_frame_vtbl = {
ipf_QueryInterface, ipf_AddRef, ipf_Release,
(HRESULT(STDMETHODCALLTYPE *)(IOleInPlaceFrame *, HWND *))ipf_GetWindow,
ipf_ContextSensitiveHelp,
ipf_GetBorder, ipf_RequestBorderSpace, ipf_SetBorderSpace,
ipf_SetActiveObject, ipf_InsertMenus, ipf_SetMenu, ipf_RemoveMenus,
ipf_SetStatusText, ipf_EnableModeless, ipf_TranslateAccelerator
};
/* ---- IDocHostUIHandler ---- */
static HRESULT STDMETHODCALLTYPE uih_QueryInterface(IDocHostUIHandler *This, REFIID riid, void **ppv) {
WebviewSite *s = (WebviewSite *)((char *)This - offsetof(WebviewSite, ui_handler));
return site_QueryInterface(&s->client_site, riid, ppv);
}
static ULONG STDMETHODCALLTYPE uih_AddRef(IDocHostUIHandler *This) {
WebviewSite *s = (WebviewSite *)((char *)This - offsetof(WebviewSite, ui_handler));
return site_AddRef(&s->client_site);
}
static ULONG STDMETHODCALLTYPE uih_Release(IDocHostUIHandler *This) {
WebviewSite *s = (WebviewSite *)((char *)This - offsetof(WebviewSite, ui_handler));
return site_Release(&s->client_site);
}
static HRESULT STDMETHODCALLTYPE uih_ShowContextMenu(IDocHostUIHandler *This, DWORD id,
POINT *pt, IUnknown *pcmdtReserved, IDispatch *pdispReserved) {
(void)This; (void)id; (void)pt; (void)pcmdtReserved; (void)pdispReserved;
return S_OK; /* Suppress default context menu */
}
static HRESULT STDMETHODCALLTYPE uih_GetHostInfo(IDocHostUIHandler *This, DOCHOSTUIINFO *pInfo) {
(void)This;
pInfo->cbSize = sizeof(DOCHOSTUIINFO);
pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER;
pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
return S_OK;
}
static HRESULT STDMETHODCALLTYPE uih_ShowUI(IDocHostUIHandler *This, DWORD id,
IOleInPlaceActiveObject *a, IOleCommandTarget *b, IOleInPlaceFrame *c, IOleInPlaceUIWindow *d) {
(void)This; (void)id; (void)a; (void)b; (void)c; (void)d; return S_OK;
}
static HRESULT STDMETHODCALLTYPE uih_HideUI(IDocHostUIHandler *This) { (void)This; return S_OK; }
static HRESULT STDMETHODCALLTYPE uih_UpdateUI(IDocHostUIHandler *This) { (void)This; return S_OK; }
static HRESULT STDMETHODCALLTYPE uih_EnableModeless(IDocHostUIHandler *This, BOOL f) { (void)This; (void)f; return S_OK; }
static HRESULT STDMETHODCALLTYPE uih_OnDocWindowActivate(IDocHostUIHandler *This, BOOL f) { (void)This; (void)f; return S_OK; }
static HRESULT STDMETHODCALLTYPE uih_OnFrameWindowActivate(IDocHostUIHandler *This, BOOL f) { (void)This; (void)f; return S_OK; }
static HRESULT STDMETHODCALLTYPE uih_ResizeBorder(IDocHostUIHandler *This, LPCRECT r, IOleInPlaceUIWindow *w, BOOL f) {
(void)This; (void)r; (void)w; (void)f; return S_OK;
}
static HRESULT STDMETHODCALLTYPE uih_TranslateAccelerator(IDocHostUIHandler *This, LPMSG m, const GUID *g, DWORD d) {
(void)This; (void)m; (void)g; (void)d; return S_FALSE;
}
static HRESULT STDMETHODCALLTYPE uih_GetOptionKeyPath(IDocHostUIHandler *This, LPOLESTR *p, DWORD d) {
(void)This; (void)p; (void)d; return S_FALSE;
}
static HRESULT STDMETHODCALLTYPE uih_GetDropTarget(IDocHostUIHandler *This, IDropTarget *dt, IDropTarget **pdt) {
(void)This; (void)dt; (void)pdt; return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE uih_GetExternal(IDocHostUIHandler *This, IDispatch **ppDispatch) {
(void)This; *ppDispatch = NULL; return S_FALSE;
}
static HRESULT STDMETHODCALLTYPE uih_TranslateUrl(IDocHostUIHandler *This, DWORD f, OLECHAR *url, OLECHAR **purl) {
(void)This; (void)f; (void)url; (void)purl; return S_FALSE;
}
static HRESULT STDMETHODCALLTYPE uih_FilterDataObject(IDocHostUIHandler *This, IDataObject *d, IDataObject **pd) {
(void)This; (void)d; (void)pd; return S_FALSE;
}
static IDocHostUIHandlerVtbl ui_handler_vtbl = {
uih_QueryInterface, uih_AddRef, uih_Release,
uih_ShowContextMenu, uih_GetHostInfo, uih_ShowUI,
uih_HideUI, uih_UpdateUI, uih_EnableModeless,
uih_OnDocWindowActivate, uih_OnFrameWindowActivate,
uih_ResizeBorder, uih_TranslateAccelerator,
uih_GetOptionKeyPath, uih_GetDropTarget,
uih_GetExternal, uih_TranslateUrl, uih_FilterDataObject
};
/* ---- QueryInterface / AddRef / Release ---- */
static HRESULT STDMETHODCALLTYPE site_QueryInterface(IOleClientSite *This, REFIID riid, void **ppv) {
WebviewSite *s = (WebviewSite *)This;
*ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IOleClientSite)) {
*ppv = &s->client_site;
} else if (IsEqualIID(riid, &IID_IOleInPlaceSite)) {
*ppv = &s->inplace_site;
} else if (IsEqualIID(riid, &IID_IDocHostUIHandler)) {
*ppv = &s->ui_handler;
} else {
return E_NOINTERFACE;
}
site_AddRef(This);
return S_OK;
}
static ULONG STDMETHODCALLTYPE site_AddRef(IOleClientSite *This) {
WebviewSite *s = (WebviewSite *)This;
return InterlockedIncrement(&s->ref);
}
static ULONG STDMETHODCALLTYPE site_Release(IOleClientSite *This) {
WebviewSite *s = (WebviewSite *)This;
LONG ref = InterlockedDecrement(&s->ref);
if (ref == 0) {
GlobalFree(s);
}
return ref;
}
static WebviewSite *create_site(struct webview *w, HWND hwnd) {
WebviewSite *s = (WebviewSite *)GlobalAlloc(GPTR, sizeof(WebviewSite));
if (!s) return NULL;
s->client_site.lpVtbl = &client_site_vtbl;
s->inplace_site.lpVtbl = &inplace_site_vtbl;
s->inplace_frame.lpVtbl = &inplace_frame_vtbl;
s->ui_handler.lpVtbl = &ui_handler_vtbl;
s->ref = 1;
s->webview = w;
s->hwnd = hwnd;
return s;
}
/* ---- Navigate helper ---- */
static void navigate(IOleObject *browser, const char *url) {
IWebBrowser2 *wb = NULL;
browser->lpVtbl->QueryInterface(browser, &IID_IWebBrowser2, (void **)&wb);
if (wb) {
int len = MultiByteToWideChar(CP_UTF8, 0, url, -1, NULL, 0);
BSTR burl = SysAllocStringLen(NULL, len);
( run in 0.941 second using v1.01-cache-2.11-cpan-39bf76dae61 )