diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-02-28 08:12:55 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-08 10:52:27 +0200 |
commit | c43083af043a28ca9188a30602043abdf5a5fb3f (patch) | |
tree | 3d1c22728a6951437bd20eb484b776ee10e34349 | |
parent | global: replace class names (diff) | |
download | wireguard-windows-c43083af043a28ca9188a30602043abdf5a5fb3f.tar.xz wireguard-windows-c43083af043a28ca9188a30602043abdf5a5fb3f.zip |
webview: remove
We don't want anything resembling a browser engine near this app.
-rw-r--r-- | form.go | 24 | ||||
-rw-r--r-- | webview.go | 513 | ||||
-rw-r--r-- | webview_dwebbrowserevents2.go | 314 | ||||
-rw-r--r-- | webview_events.go | 393 | ||||
-rw-r--r-- | webview_idochostuihandler.go | 151 | ||||
-rw-r--r-- | webview_ioleclientsite.go | 92 | ||||
-rw-r--r-- | webview_ioleinplaceframe.go | 104 | ||||
-rw-r--r-- | webview_ioleinplacesite.go | 128 |
8 files changed, 0 insertions, 1719 deletions
@@ -405,13 +405,6 @@ func (fb *FormBase) Run() int { return -1 } - switch msg.Message { - case win.WM_KEYDOWN: - if fb.webViewTranslateAccelerator(msg) { - // handled accelerator key of webview and its childen (ie IE) - } - } - if !win.IsDialogMessage(fb.hWnd, msg) { win.TranslateMessage(msg) win.DispatchMessage(msg) @@ -423,23 +416,6 @@ func (fb *FormBase) Run() int { return 0 } -func (fb *FormBase) webViewTranslateAccelerator(msg *win.MSG) bool { - ret := false - walkDescendants(fb.window, func(w Window) bool { - if webView, ok := w.(*WebView); ok { - webViewHWnd := webView.Handle() - if webViewHWnd == msg.HWnd || win.IsChild(webViewHWnd, msg.HWnd) { - _ret := webView.translateAccelerator(msg) - if _ret { - ret = _ret - } - } - } - return true - }) - return ret -} - func (fb *FormBase) Starting() *Event { return fb.startingPublisher.Event() } diff --git a/webview.go b/webview.go deleted file mode 100644 index 2adeb5b8..00000000 --- a/webview.go +++ /dev/null @@ -1,513 +0,0 @@ -// Copyright 2010 The Walk Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package walk - -import ( - "fmt" - "syscall" - "unsafe" -) - -import ( - "github.com/lxn/win" -) - -const webViewWindowClass = "WireGuard UI - WebView" - -func init() { - MustRegisterWindowClass(webViewWindowClass) -} - -type WebView struct { - WidgetBase - clientSite webViewIOleClientSite // IMPORTANT: Must remain first member after WidgetBase - browserObject *win.IOleObject - urlChangedPublisher EventPublisher - shortcutsEnabled bool - shortcutsEnabledChangedPublisher EventPublisher - nativeContextMenuEnabled bool - nativeContextMenuEnabledChangedPublisher EventPublisher - navigatingPublisher WebViewNavigatingEventPublisher - navigatedPublisher StringEventPublisher - downloadingPublisher EventPublisher - downloadedPublisher EventPublisher - documentCompletedPublisher StringEventPublisher - navigatedErrorPublisher WebViewNavigatedErrorEventPublisher - newWindowPublisher WebViewNewWindowEventPublisher - quittingPublisher EventPublisher - windowClosingPublisher WebViewWindowClosingEventPublisher - statusBarVisible bool - statusBarVisibleChangedPublisher EventPublisher - isTheaterMode bool - theaterModeChangedPublisher EventPublisher - toolBarVisible bool - toolBarVisibleChangedPublisher EventPublisher - browserVisible bool - browserVisibleChangedPublisher EventPublisher - toolBarEnabled bool - toolBarEnabledChangedPublisher EventPublisher - canGoBack bool - canGoBackChangedPublisher EventPublisher - canGoForward bool - canGoForwardChangedPublisher EventPublisher - progressValue int32 - progressMax int32 - progressChangedPublisher EventPublisher - statusText string - statusTextChangedPublisher EventPublisher - documentTitle string - documentTitleChangedPublisher EventPublisher -} - -func NewWebView(parent Container) (*WebView, error) { - if hr := win.OleInitialize(); hr != win.S_OK && hr != win.S_FALSE { - return nil, newError(fmt.Sprint("OleInitialize Error: ", hr)) - } - - wv := &WebView{ - clientSite: webViewIOleClientSite{ - IOleClientSite: win.IOleClientSite{ - LpVtbl: webViewIOleClientSiteVtbl, - }, - inPlaceSite: webViewIOleInPlaceSite{ - IOleInPlaceSite: win.IOleInPlaceSite{ - LpVtbl: webViewIOleInPlaceSiteVtbl, - }, - inPlaceFrame: webViewIOleInPlaceFrame{ - IOleInPlaceFrame: win.IOleInPlaceFrame{ - LpVtbl: webViewIOleInPlaceFrameVtbl, - }, - }, - }, - docHostUIHandler: webViewIDocHostUIHandler{ - IDocHostUIHandler: win.IDocHostUIHandler{ - LpVtbl: webViewIDocHostUIHandlerVtbl, - }, - }, - webBrowserEvents2: webViewDWebBrowserEvents2{ - DWebBrowserEvents2: win.DWebBrowserEvents2{ - LpVtbl: webViewDWebBrowserEvents2Vtbl, - }, - }, - }, - shortcutsEnabled: false, - nativeContextMenuEnabled: false, - } - - if err := InitWidget( - wv, - parent, - webViewWindowClass, - win.WS_CLIPCHILDREN|win.WS_VISIBLE, - 0); err != nil { - return nil, err - } - - wv.clientSite.inPlaceSite.inPlaceFrame.webView = wv - - succeeded := false - - defer func() { - if !succeeded { - wv.Dispose() - } - }() - - var classFactoryPtr unsafe.Pointer - if hr := win.CoGetClassObject(&win.CLSID_WebBrowser, win.CLSCTX_INPROC_HANDLER|win.CLSCTX_INPROC_SERVER, nil, &win.IID_IClassFactory, &classFactoryPtr); win.FAILED(hr) { - return nil, errorFromHRESULT("CoGetClassObject", hr) - } - classFactory := (*win.IClassFactory)(classFactoryPtr) - defer classFactory.Release() - - var browserObjectPtr unsafe.Pointer - if hr := classFactory.CreateInstance(nil, &win.IID_IOleObject, &browserObjectPtr); win.FAILED(hr) { - return nil, errorFromHRESULT("IClassFactory.CreateInstance", hr) - } - browserObject := (*win.IOleObject)(browserObjectPtr) - - wv.browserObject = browserObject - - if hr := browserObject.SetClientSite((*win.IOleClientSite)(unsafe.Pointer(&wv.clientSite))); win.FAILED(hr) { - return nil, errorFromHRESULT("IOleObject.SetClientSite", hr) - } - - if hr := browserObject.SetHostNames(syscall.StringToUTF16Ptr("Walk.WebView"), nil); win.FAILED(hr) { - return nil, errorFromHRESULT("IOleObject.SetHostNames", hr) - } - - if hr := win.OleSetContainedObject((*win.IUnknown)(unsafe.Pointer(browserObject)), true); win.FAILED(hr) { - return nil, errorFromHRESULT("OleSetContainedObject", hr) - } - - var rect win.RECT - win.GetClientRect(wv.hWnd, &rect) - - if hr := browserObject.DoVerb(win.OLEIVERB_SHOW, nil, (*win.IOleClientSite)(unsafe.Pointer(&wv.clientSite)), 0, wv.hWnd, &rect); win.FAILED(hr) { - return nil, errorFromHRESULT("IOleObject.DoVerb", hr) - } - - var cpcPtr unsafe.Pointer - if hr := browserObject.QueryInterface(&win.IID_IConnectionPointContainer, &cpcPtr); win.FAILED(hr) { - return nil, errorFromHRESULT("IOleObject.QueryInterface(IID_IConnectionPointContainer)", hr) - } - cpc := (*win.IConnectionPointContainer)(cpcPtr) - defer cpc.Release() - - var cp *win.IConnectionPoint - if hr := cpc.FindConnectionPoint(&win.DIID_DWebBrowserEvents2, &cp); win.FAILED(hr) { - return nil, errorFromHRESULT("IConnectionPointContainer.FindConnectionPoint(DIID_DWebBrowserEvents2)", hr) - } - defer cp.Release() - - var cookie uint32 - if hr := cp.Advise(unsafe.Pointer(&wv.clientSite.webBrowserEvents2), &cookie); win.FAILED(hr) { - return nil, errorFromHRESULT("IConnectionPoint.Advise", hr) - } - - wv.onResize() - - wv.MustRegisterProperty("URL", NewProperty( - func() interface{} { - url, _ := wv.URL() - return url - }, - func(v interface{}) error { - return wv.SetURL(assertStringOr(v, "")) - }, - wv.urlChangedPublisher.Event())) - - wv.MustRegisterProperty("ShortcutsEnabled", NewProperty( - func() interface{} { - return wv.ShortcutsEnabled() - }, - func(v interface{}) error { - wv.SetShortcutsEnabled(v.(bool)) - return nil - }, - wv.shortcutsEnabledChangedPublisher.Event())) - - wv.MustRegisterProperty("NativeContextMenuEnabled", NewProperty( - func() interface{} { - return wv.NativeContextMenuEnabled() - }, - func(v interface{}) error { - wv.SetNativeContextMenuEnabled(v.(bool)) - return nil - }, - wv.nativeContextMenuEnabledChangedPublisher.Event())) - - succeeded = true - - return wv, nil -} - -func (wv *WebView) Dispose() { - if wv.browserObject != nil { - wv.browserObject.Close(win.OLECLOSE_NOSAVE) - wv.browserObject.Release() - - wv.browserObject = nil - - win.OleUninitialize() - } - - wv.WidgetBase.Dispose() -} - -func (*WebView) LayoutFlags() LayoutFlags { - return ShrinkableHorz | ShrinkableVert | GrowableHorz | GrowableVert | GreedyHorz | GreedyVert -} - -func (*WebView) SizeHint() Size { - return Size{100, 100} -} - -func (wv *WebView) URL() (url string, err error) { - err = wv.withWebBrowser2(func(webBrowser2 *win.IWebBrowser2) error { - var urlBstr *uint16 /*BSTR*/ - if hr := webBrowser2.Get_LocationURL(&urlBstr); win.FAILED(hr) { - return errorFromHRESULT("IWebBrowser2.Get_LocationURL", hr) - } - defer win.SysFreeString(urlBstr) - - url = win.BSTRToString(urlBstr) - - return nil - }) - - return -} - -func (wv *WebView) SetURL(url string) error { - return wv.withWebBrowser2(func(webBrowser2 *win.IWebBrowser2) error { - urlBstr := win.StringToVariantBSTR(url) - flags := win.IntToVariantI4(0) - targetFrameName := win.StringToVariantBSTR("_self") - - if hr := webBrowser2.Navigate2(urlBstr, flags, targetFrameName, nil, nil); win.FAILED(hr) { - return errorFromHRESULT("IWebBrowser2.Navigate2", hr) - } - - return nil - }) -} - -func (wv *WebView) URLChanged() *Event { - return wv.urlChangedPublisher.Event() -} - -func (wv *WebView) ShortcutsEnabled() bool { - return wv.shortcutsEnabled -} - -func (wv *WebView) SetShortcutsEnabled(value bool) { - wv.shortcutsEnabled = value - wv.shortcutsEnabledChangedPublisher.Publish() -} - -func (wv *WebView) ShortcutsEnabledChanged() *Event { - return wv.shortcutsEnabledChangedPublisher.Event() -} - -func (wv *WebView) NativeContextMenuEnabled() bool { - return wv.nativeContextMenuEnabled -} - -func (wv *WebView) SetNativeContextMenuEnabled(value bool) { - wv.nativeContextMenuEnabled = value - wv.nativeContextMenuEnabledChangedPublisher.Publish() -} - -func (wv *WebView) NativeContextMenuEnabledChanged() *Event { - return wv.nativeContextMenuEnabledChangedPublisher.Event() -} - -func (wv *WebView) Navigating() *WebViewNavigatingEvent { - return wv.navigatingPublisher.Event() -} - -func (wv *WebView) Navigated() *StringEvent { - return wv.navigatedPublisher.Event() -} - -func (wv *WebView) Downloading() *Event { - return wv.downloadingPublisher.Event() -} - -func (wv *WebView) Downloaded() *Event { - return wv.downloadedPublisher.Event() -} - -func (wv *WebView) DocumentCompleted() *StringEvent { - return wv.documentCompletedPublisher.Event() -} - -func (wv *WebView) NavigatedError() *WebViewNavigatedErrorEvent { - return wv.navigatedErrorPublisher.Event() -} - -func (wv *WebView) NewWindow() *WebViewNewWindowEvent { - return wv.newWindowPublisher.Event() -} - -func (wv *WebView) Quitting() *Event { - return wv.quittingPublisher.Event() -} - -func (wv *WebView) WindowClosing() *WebViewWindowClosingEvent { - return wv.windowClosingPublisher.Event() -} - -func (wv *WebView) StatusBarVisible() bool { - return wv.statusBarVisible -} - -func (wv *WebView) StatusBarVisibleChanged() *Event { - return wv.statusBarVisibleChangedPublisher.Event() -} - -func (wv *WebView) IsTheaterMode() bool { - return wv.isTheaterMode -} - -func (wv *WebView) TheaterModeChanged() *Event { - return wv.theaterModeChangedPublisher.Event() -} - -func (wv *WebView) ToolBarVisible() bool { - return wv.toolBarVisible -} - -func (wv *WebView) ToolBarVisibleChanged() *Event { - return wv.toolBarVisibleChangedPublisher.Event() -} - -func (wv *WebView) BrowserVisible() bool { - return wv.browserVisible -} - -func (wv *WebView) BrowserVisibleChanged() *Event { - return wv.browserVisibleChangedPublisher.Event() -} - -func (wv *WebView) ToolBarEnabled() bool { - return wv.toolBarEnabled -} - -func (wv *WebView) ToolBarEnabledChanged() *Event { - return wv.toolBarEnabledChangedPublisher.Event() -} - -func (wv *WebView) CanGoBack() bool { - return wv.canGoBack -} - -func (wv *WebView) CanGoBackChanged() *Event { - return wv.canGoBackChangedPublisher.Event() -} - -func (wv *WebView) CanGoForward() bool { - return wv.canGoForward -} - -func (wv *WebView) CanGoForwardChanged() *Event { - return wv.canGoForwardChangedPublisher.Event() -} - -func (wv *WebView) ProgressValue() int32 { - return wv.progressValue -} - -func (wv *WebView) ProgressMax() int32 { - return wv.progressMax -} - -func (wv *WebView) ProgressChanged() *Event { - return wv.progressChangedPublisher.Event() -} - -func (wv *WebView) StatusText() string { - return wv.statusText -} - -func (wv *WebView) StatusTextChanged() *Event { - return wv.statusTextChangedPublisher.Event() -} - -func (wv *WebView) DocumentTitle() string { - return wv.documentTitle -} - -func (wv *WebView) DocumentTitleChanged() *Event { - return wv.documentTitleChangedPublisher.Event() -} - -func (wv *WebView) Refresh() error { - return wv.withWebBrowser2(func(webBrowser2 *win.IWebBrowser2) error { - if hr := webBrowser2.Refresh(); win.FAILED(hr) { - return errorFromHRESULT("IWebBrowser2.Refresh", hr) - } - - return nil - }) -} - -func (wv *WebView) withWebBrowser2(f func(webBrowser2 *win.IWebBrowser2) error) error { - var webBrowser2Ptr unsafe.Pointer - if hr := wv.browserObject.QueryInterface(&win.IID_IWebBrowser2, &webBrowser2Ptr); win.FAILED(hr) { - return errorFromHRESULT("IOleObject.QueryInterface", hr) - } - webBrowser2 := (*win.IWebBrowser2)(webBrowser2Ptr) - defer webBrowser2.Release() - - return f(webBrowser2) -} - -func (wv *WebView) onResize() { - // FIXME: handle error? - wv.withWebBrowser2(func(webBrowser2 *win.IWebBrowser2) error { - bounds := wv.ClientBoundsPixels() - - webBrowser2.Put_Left(0) - webBrowser2.Put_Top(0) - webBrowser2.Put_Width(int32(bounds.Width)) - webBrowser2.Put_Height(int32(bounds.Height)) - - return nil - }) -} - -func (wv *WebView) withInPlaceActiveObject(f func(activeObject *win.IOleInPlaceActiveObject) error) error { - if wv.browserObject == nil { - return nil - } - wv.withWebBrowser2(func(webBrowser2 *win.IWebBrowser2) error { - var activeObjectPtr unsafe.Pointer - if hr := webBrowser2.QueryInterface(&win.IID_IOleInPlaceActiveObject, &activeObjectPtr); win.FAILED(hr) { - return errorFromHRESULT("WebBowser2.QueryInterface", hr) - } - activeObject := (*win.IOleInPlaceActiveObject)(activeObjectPtr) - defer activeObject.Release() - return f(activeObject) - }) - return nil -} - -func (wv *WebView) translateAccelerator(msg *win.MSG) bool { - if wv.shortcutsEnabled { - hr := wv.inPlaceActiveObjectTranslateAccelerator(msg) - return hr == win.S_OK - } - return false -} - -func (wv *WebView) inPlaceActiveObjectTranslateAccelerator(msg *win.MSG) win.HRESULT { - var ret win.HRESULT - ret = win.S_FALSE - wv.withInPlaceActiveObject(func(activeObject *win.IOleInPlaceActiveObject) error { - hr := activeObject.TranslateAccelerator(msg) - if hr == win.S_OK { - ret = win.S_OK - } - return nil - }) - return ret -} - -func (wv *WebView) inPlaceActiveObjectSetFocus() win.HRESULT { - var ret win.HRESULT - ret = win.S_FALSE - wv.withInPlaceActiveObject(func(activeObject *win.IOleInPlaceActiveObject) error { - var hWndActive win.HWND - hr := activeObject.GetWindow(&hWndActive) - if hr != win.S_OK { - return nil - } - win.SetFocus(hWndActive) - ret = win.S_OK - - return nil - }) - return ret -} - -func (wv *WebView) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr { - switch msg { - case win.WM_SIZE, win.WM_SIZING: - if wv.clientSite.inPlaceSite.inPlaceFrame.webView == nil { - break - } - - wv.onResize() - - case win.WM_MOUSEACTIVATE: - wv.invalidateBorderInParent() - } - - return wv.WidgetBase.WndProc(hwnd, msg, wParam, lParam) -} diff --git a/webview_dwebbrowserevents2.go b/webview_dwebbrowserevents2.go deleted file mode 100644 index ec2b448e..00000000 --- a/webview_dwebbrowserevents2.go +++ /dev/null @@ -1,314 +0,0 @@ -// Copyright 2010 The Walk Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package walk - -import ( - "syscall" - "unsafe" -) - -import ( - "time" - - "github.com/lxn/win" -) - -var webViewDWebBrowserEvents2Vtbl *win.DWebBrowserEvents2Vtbl - -func init() { - webViewDWebBrowserEvents2Vtbl = &win.DWebBrowserEvents2Vtbl{ - syscall.NewCallback(webView_DWebBrowserEvents2_QueryInterface), - syscall.NewCallback(webView_DWebBrowserEvents2_AddRef), - syscall.NewCallback(webView_DWebBrowserEvents2_Release), - syscall.NewCallback(webView_DWebBrowserEvents2_GetTypeInfoCount), - syscall.NewCallback(webView_DWebBrowserEvents2_GetTypeInfo), - syscall.NewCallback(webView_DWebBrowserEvents2_GetIDsOfNames), - syscall.NewCallback(webView_DWebBrowserEvents2_Invoke), - } -} - -type webViewDWebBrowserEvents2 struct { - win.DWebBrowserEvents2 -} - -func webView_DWebBrowserEvents2_QueryInterface(wbe2 *webViewDWebBrowserEvents2, riid win.REFIID, ppvObject *unsafe.Pointer) uintptr { - // Just reuse the QueryInterface implementation we have for IOleClientSite. - // We need to adjust object, which initially points at our - // webViewDWebBrowserEvents2, so it refers to the containing - // webViewIOleClientSite for the call. - var clientSite win.IOleClientSite - var webViewInPlaceSite webViewIOleInPlaceSite - var docHostUIHandler webViewIDocHostUIHandler - - ptr := uintptr(unsafe.Pointer(wbe2)) - - uintptr(unsafe.Sizeof(clientSite)) - - uintptr(unsafe.Sizeof(webViewInPlaceSite)) - - uintptr(unsafe.Sizeof(docHostUIHandler)) - - return webView_IOleClientSite_QueryInterface((*webViewIOleClientSite)(unsafe.Pointer(ptr)), riid, ppvObject) -} - -func webView_DWebBrowserEvents2_AddRef(args *uintptr) uintptr { - return 1 -} - -func webView_DWebBrowserEvents2_Release(args *uintptr) uintptr { - return 1 -} - -func webView_DWebBrowserEvents2_GetTypeInfoCount(args *uintptr) uintptr { - /* p := (*struct { - wbe2 *webViewDWebBrowserEvents2 - pctinfo *uint - })(unsafe.Pointer(args)) - - *p.pctinfo = 0 - - return S_OK*/ - - return win.E_NOTIMPL -} - -func webView_DWebBrowserEvents2_GetTypeInfo(args *uintptr) uintptr { - /* p := (*struct { - wbe2 *webViewDWebBrowserEvents2 - })(unsafe.Pointer(args)) - - unsigned int iTInfo, - LCID lcid, - ITypeInfo FAR* FAR* ppTInfo*/ - - return win.E_NOTIMPL -} - -func webView_DWebBrowserEvents2_GetIDsOfNames(args *uintptr) uintptr { - /* p := (*struct { - wbe2 *webViewDWebBrowserEvents2 - riid REFIID - rgszNames **uint16 - cNames uint32 - lcid LCID - rgDispId *DISPID - })(unsafe.Pointer(args))*/ - - return win.E_NOTIMPL -} - -/* -func webView_DWebBrowserEvents2_Invoke( - wbe2 *webViewDWebBrowserEvents2, - dispIdMember win.DISPID, - riid win.REFIID, - lcid uint32, // LCID - wFlags uint16, - pDispParams *win.DISPPARAMS, - pVarResult *win.VARIANT, - pExcepInfo unsafe.Pointer, // *EXCEPINFO - puArgErr *uint32) uintptr { -*/ -func webView_DWebBrowserEvents2_Invoke( - arg0 uintptr, - arg1 uintptr, - arg2 uintptr, - arg3 uintptr, - arg4 uintptr, - arg5 uintptr, - arg6 uintptr, - arg7 uintptr, - arg8 uintptr) uintptr { - - wbe2 := (*webViewDWebBrowserEvents2)(unsafe.Pointer(arg0)) - dispIdMember := *(*win.DISPID)(unsafe.Pointer(&arg1)) - //riid := *(*win.REFIID)(unsafe.Pointer(&arg2)) - //lcid := *(*uint32)(unsafe.Pointer(&arg3)) - //wFlags := *(*uint16)(unsafe.Pointer(&arg4)) - pDispParams := (*win.DISPPARAMS)(unsafe.Pointer(arg5)) - //pVarResult := (*win.VARIANT)(unsafe.Pointer(arg6)) - //pExcepInfo := unsafe.Pointer(arg7) - //puArgErr := (*uint32)(unsafe.Pointer(arg8)) - - var wb WidgetBase - var wvcs webViewIOleClientSite - - wv := (*WebView)(unsafe.Pointer(uintptr(unsafe.Pointer(wbe2)) + - uintptr(unsafe.Sizeof(*wbe2)) - - uintptr(unsafe.Sizeof(wvcs)) - - uintptr(unsafe.Sizeof(wb)))) - - switch dispIdMember { - case win.DISPID_BEFORENAVIGATE2: - rgvargPtr := (*[7]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - eventData := &WebViewNavigatingEventData{ - pDisp: (*rgvargPtr)[6].MustPDispatch(), - url: (*rgvargPtr)[5].MustPVariant(), - flags: (*rgvargPtr)[4].MustPVariant(), - targetFrameName: (*rgvargPtr)[3].MustPVariant(), - postData: (*rgvargPtr)[2].MustPVariant(), - headers: (*rgvargPtr)[1].MustPVariant(), - cancel: (*rgvargPtr)[0].MustPBool(), - } - wv.navigatingPublisher.Publish(eventData) - - case win.DISPID_NAVIGATECOMPLETE2: - rgvargPtr := (*[2]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - url := (*rgvargPtr)[0].MustPVariant() - urlStr := "" - if url != nil && url.MustBSTR() != nil { - urlStr = win.BSTRToString(url.MustBSTR()) - } - wv.navigatedPublisher.Publish(urlStr) - - wv.urlChangedPublisher.Publish() - - case win.DISPID_DOWNLOADBEGIN: - wv.downloadingPublisher.Publish() - - case win.DISPID_DOWNLOADCOMPLETE: - wv.downloadedPublisher.Publish() - - case win.DISPID_DOCUMENTCOMPLETE: - rgvargPtr := (*[2]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - url := (*rgvargPtr)[0].MustPVariant() - urlStr := "" - if url != nil && url.MustBSTR() != nil { - urlStr = win.BSTRToString(url.MustBSTR()) - } - - // FIXME: Horrible hack to avoid glitch where the document is not displayed. - time.AfterFunc(time.Millisecond*100, func() { - wv.Synchronize(func() { - b := wv.BoundsPixels() - b.Width++ - wv.SetBoundsPixels(b) - b.Width-- - wv.SetBoundsPixels(b) - }) - }) - - wv.documentCompletedPublisher.Publish(urlStr) - - case win.DISPID_NAVIGATEERROR: - rgvargPtr := (*[5]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - eventData := &WebViewNavigatedErrorEventData{ - pDisp: (*rgvargPtr)[4].MustPDispatch(), - url: (*rgvargPtr)[3].MustPVariant(), - targetFrameName: (*rgvargPtr)[2].MustPVariant(), - statusCode: (*rgvargPtr)[1].MustPVariant(), - cancel: (*rgvargPtr)[0].MustPBool(), - } - wv.navigatedErrorPublisher.Publish(eventData) - - case win.DISPID_NEWWINDOW3: - rgvargPtr := (*[5]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - eventData := &WebViewNewWindowEventData{ - ppDisp: (*rgvargPtr)[4].MustPPDispatch(), - cancel: (*rgvargPtr)[3].MustPBool(), - dwFlags: (*rgvargPtr)[2].MustULong(), - bstrUrlContext: (*rgvargPtr)[1].MustBSTR(), - bstrUrl: (*rgvargPtr)[0].MustBSTR(), - } - wv.newWindowPublisher.Publish(eventData) - - case win.DISPID_ONQUIT: - wv.quittingPublisher.Publish() - - case win.DISPID_WINDOWCLOSING: - rgvargPtr := (*[2]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - eventData := &WebViewWindowClosingEventData{ - bIsChildWindow: (*rgvargPtr)[1].MustBool(), - cancel: (*rgvargPtr)[0].MustPBool(), - } - wv.windowClosingPublisher.Publish(eventData) - - case win.DISPID_ONSTATUSBAR: - rgvargPtr := (*[1]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - statusBar := (*rgvargPtr)[0].MustBool() - if statusBar != win.VARIANT_FALSE { - wv.statusBarVisible = true - } else { - wv.statusBarVisible = false - } - wv.statusBarVisibleChangedPublisher.Publish() - - case win.DISPID_ONTHEATERMODE: - rgvargPtr := (*[1]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - theaterMode := (*rgvargPtr)[0].MustBool() - if theaterMode != win.VARIANT_FALSE { - wv.isTheaterMode = true - } else { - wv.isTheaterMode = false - } - wv.theaterModeChangedPublisher.Publish() - - case win.DISPID_ONTOOLBAR: - rgvargPtr := (*[1]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - toolBar := (*rgvargPtr)[0].MustBool() - if toolBar != win.VARIANT_FALSE { - wv.toolBarVisible = true - } else { - wv.toolBarVisible = false - } - wv.toolBarVisibleChangedPublisher.Publish() - - case win.DISPID_ONVISIBLE: - rgvargPtr := (*[1]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - vVisible := (*rgvargPtr)[0].MustBool() - if vVisible != win.VARIANT_FALSE { - wv.browserVisible = true - } else { - wv.browserVisible = false - } - wv.browserVisibleChangedPublisher.Publish() - - case win.DISPID_COMMANDSTATECHANGE: - rgvargPtr := (*[2]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - command := (*rgvargPtr)[1].MustLong() - enable := (*rgvargPtr)[0].MustBool() - enableBool := (enable != win.VARIANT_FALSE) - switch command { - case win.CSC_UPDATECOMMANDS: - wv.toolBarEnabled = enableBool - wv.toolBarEnabledChangedPublisher.Publish() - - case win.CSC_NAVIGATEFORWARD: - wv.canGoForward = enableBool - wv.canGoForwardChangedPublisher.Publish() - - case win.CSC_NAVIGATEBACK: - wv.canGoBack = enableBool - wv.canGoBackChangedPublisher.Publish() - } - - case win.DISPID_PROGRESSCHANGE: - rgvargPtr := (*[2]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - wv.progressValue = (*rgvargPtr)[1].MustLong() - wv.progressMax = (*rgvargPtr)[0].MustLong() - wv.progressChangedPublisher.Publish() - - case win.DISPID_STATUSTEXTCHANGE: - rgvargPtr := (*[1]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - sText := (*rgvargPtr)[0].MustBSTR() - if sText != nil { - wv.statusText = win.BSTRToString(sText) - } else { - wv.statusText = "" - } - wv.statusTextChangedPublisher.Publish() - - case win.DISPID_TITLECHANGE: - rgvargPtr := (*[1]win.VARIANTARG)(unsafe.Pointer(pDispParams.Rgvarg)) - sText := (*rgvargPtr)[0].MustBSTR() - if sText != nil { - wv.documentTitle = win.BSTRToString(sText) - } else { - wv.documentTitle = "" - } - wv.documentTitleChangedPublisher.Publish() - } - - return win.DISP_E_MEMBERNOTFOUND -} diff --git a/webview_events.go b/webview_events.go deleted file mode 100644 index 697ae5d3..00000000 --- a/webview_events.go +++ /dev/null @@ -1,393 +0,0 @@ -// Copyright 2011 The Walk Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package walk - -import ( - "unsafe" -) - -import ( - "github.com/lxn/win" -) - -type WebViewNavigatingEventData struct { - pDisp *win.IDispatch - url *win.VARIANT - flags *win.VARIANT - targetFrameName *win.VARIANT - postData *win.VARIANT - headers *win.VARIANT - cancel *win.VARIANT_BOOL -} - -func (eventData *WebViewNavigatingEventData) Url() string { - url := eventData.url - if url != nil && url.MustBSTR() != nil { - return win.BSTRToString(url.MustBSTR()) - } - return "" -} - -func (eventData *WebViewNavigatingEventData) Flags() int32 { - flags := eventData.flags - if flags != nil { - return flags.MustLong() - } - return 0 -} - -func (eventData *WebViewNavigatingEventData) PostData() string { - postData := eventData.postData - if postData != nil { - pvar := postData.MustPVariant() - if pvar != nil && pvar.Vt == win.VT_ARRAY|win.VT_UI1 { - psa := pvar.MustPSafeArray() - if psa != nil && psa.CDims == 1 && psa.CbElements == 1 { - postDataSize := psa.Rgsabound[0].CElements * psa.CbElements - byteAryPtr := (*[200000000]byte)(unsafe.Pointer(psa.PvData)) - byteArySlice := (*byteAryPtr)[0 : postDataSize-1] - return string(byteArySlice) - } - } - } - return "" -} - -func (eventData *WebViewNavigatingEventData) Headers() string { - headers := eventData.headers - if headers != nil && headers.MustBSTR() != nil { - return win.BSTRToString(headers.MustBSTR()) - } - return "" -} - -func (eventData *WebViewNavigatingEventData) TargetFrameName() string { - targetFrameName := eventData.targetFrameName - if targetFrameName != nil && targetFrameName.MustBSTR() != nil { - return win.BSTRToString(targetFrameName.MustBSTR()) - } - return "" -} - -func (eventData *WebViewNavigatingEventData) Canceled() bool { - cancel := eventData.cancel - if cancel != nil { - if *cancel != win.VARIANT_FALSE { - return true - } else { - return false - } - } - return false -} - -func (eventData *WebViewNavigatingEventData) SetCanceled(value bool) { - cancel := eventData.cancel - if cancel != nil { - if value { - *cancel = win.VARIANT_TRUE - } else { - *cancel = win.VARIANT_FALSE - } - } -} - -type WebViewNavigatingEventHandler func(eventData *WebViewNavigatingEventData) - -type WebViewNavigatingEvent struct { - handlers []WebViewNavigatingEventHandler -} - -func (e *WebViewNavigatingEvent) Attach(handler WebViewNavigatingEventHandler) int { - for i, h := range e.handlers { - if h == nil { - e.handlers[i] = handler - return i - } - } - - e.handlers = append(e.handlers, handler) - return len(e.handlers) - 1 -} - -func (e *WebViewNavigatingEvent) Detach(handle int) { - e.handlers[handle] = nil -} - -type WebViewNavigatingEventPublisher struct { - event WebViewNavigatingEvent -} - -func (p *WebViewNavigatingEventPublisher) Event() *WebViewNavigatingEvent { - return &p.event -} - -func (p *WebViewNavigatingEventPublisher) Publish(eventData *WebViewNavigatingEventData) { - for _, handler := range p.event.handlers { - if handler != nil { - handler(eventData) - } - } -} - -type WebViewNavigatedErrorEventData struct { - pDisp *win.IDispatch - url *win.VARIANT - targetFrameName *win.VARIANT - statusCode *win.VARIANT - cancel *win.VARIANT_BOOL -} - -func (eventData *WebViewNavigatedErrorEventData) Url() string { - url := eventData.url - if url != nil && url.MustBSTR() != nil { - return win.BSTRToString(url.MustBSTR()) - } - return "" -} - -func (eventData *WebViewNavigatedErrorEventData) TargetFrameName() string { - targetFrameName := eventData.targetFrameName - if targetFrameName != nil && targetFrameName.MustBSTR() != nil { - return win.BSTRToString(targetFrameName.MustBSTR()) - } - return "" -} - -func (eventData *WebViewNavigatedErrorEventData) StatusCode() int32 { - statusCode := eventData.statusCode - if statusCode != nil { - return statusCode.MustLong() - } - return 0 -} - -func (eventData *WebViewNavigatedErrorEventData) Canceled() bool { - cancel := eventData.cancel - if cancel != nil { - if *cancel != win.VARIANT_FALSE { - return true - } else { - return false - } - } - return false -} - -func (eventData *WebViewNavigatedErrorEventData) SetCanceled(value bool) { - cancel := eventData.cancel - if cancel != nil { - if value { - *cancel = win.VARIANT_TRUE - } else { - *cancel = win.VARIANT_FALSE - } - } -} - -type WebViewNavigatedErrorEventHandler func(eventData *WebViewNavigatedErrorEventData) - -type WebViewNavigatedErrorEvent struct { - handlers []WebViewNavigatedErrorEventHandler -} - -func (e *WebViewNavigatedErrorEvent) Attach(handler WebViewNavigatedErrorEventHandler) int { - for i, h := range e.handlers { - if h == nil { - e.handlers[i] = handler - return i - } - } - - e.handlers = append(e.handlers, handler) - return len(e.handlers) - 1 -} - -func (e *WebViewNavigatedErrorEvent) Detach(handle int) { - e.handlers[handle] = nil -} - -type WebViewNavigatedErrorEventPublisher struct { - event WebViewNavigatedErrorEvent -} - -func (p *WebViewNavigatedErrorEventPublisher) Event() *WebViewNavigatedErrorEvent { - return &p.event -} - -func (p *WebViewNavigatedErrorEventPublisher) Publish(eventData *WebViewNavigatedErrorEventData) { - for _, handler := range p.event.handlers { - if handler != nil { - handler(eventData) - } - } -} - -type WebViewNewWindowEventData struct { - ppDisp **win.IDispatch - cancel *win.VARIANT_BOOL - dwFlags uint32 - bstrUrlContext *uint16 - bstrUrl *uint16 -} - -func (eventData *WebViewNewWindowEventData) Canceled() bool { - cancel := eventData.cancel - if cancel != nil { - if *cancel != win.VARIANT_FALSE { - return true - } else { - return false - } - } - return false -} - -func (eventData *WebViewNewWindowEventData) SetCanceled(value bool) { - cancel := eventData.cancel - if cancel != nil { - if value { - *cancel = win.VARIANT_TRUE - } else { - *cancel = win.VARIANT_FALSE - } - } -} - -func (eventData *WebViewNewWindowEventData) Flags() uint32 { - return eventData.dwFlags -} - -func (eventData *WebViewNewWindowEventData) UrlContext() string { - bstrUrlContext := eventData.bstrUrlContext - if bstrUrlContext != nil { - return win.BSTRToString(bstrUrlContext) - } - return "" -} - -func (eventData *WebViewNewWindowEventData) Url() string { - bstrUrl := eventData.bstrUrl - if bstrUrl != nil { - return win.BSTRToString(bstrUrl) - } - return "" -} - -type WebViewNewWindowEventHandler func(eventData *WebViewNewWindowEventData) - -type WebViewNewWindowEvent struct { - handlers []WebViewNewWindowEventHandler -} - -func (e *WebViewNewWindowEvent) Attach(handler WebViewNewWindowEventHandler) int { - for i, h := range e.handlers { - if h == nil { - e.handlers[i] = handler - return i - } - } - - e.handlers = append(e.handlers, handler) - return len(e.handlers) - 1 -} - -func (e *WebViewNewWindowEvent) Detach(handle int) { - e.handlers[handle] = nil -} - -type WebViewNewWindowEventPublisher struct { - event WebViewNewWindowEvent -} - -func (p *WebViewNewWindowEventPublisher) Event() *WebViewNewWindowEvent { - return &p.event -} - -func (p *WebViewNewWindowEventPublisher) Publish(eventData *WebViewNewWindowEventData) { - for _, handler := range p.event.handlers { - if handler != nil { - handler(eventData) - } - } -} - -type WebViewWindowClosingEventData struct { - bIsChildWindow win.VARIANT_BOOL - cancel *win.VARIANT_BOOL -} - -func (eventData *WebViewWindowClosingEventData) IsChildWindow() bool { - bIsChildWindow := eventData.bIsChildWindow - if bIsChildWindow != win.VARIANT_FALSE { - return true - } else { - return false - } - return false -} - -func (eventData *WebViewWindowClosingEventData) Canceled() bool { - cancel := eventData.cancel - if cancel != nil { - if *cancel != win.VARIANT_FALSE { - return true - } else { - return false - } - } - return false -} - -func (eventData *WebViewWindowClosingEventData) SetCanceled(value bool) { - cancel := eventData.cancel - if cancel != nil { - if value { - *cancel = win.VARIANT_TRUE - } else { - *cancel = win.VARIANT_FALSE - } - } -} - -type WebViewWindowClosingEventHandler func(eventData *WebViewWindowClosingEventData) - -type WebViewWindowClosingEvent struct { - handlers []WebViewWindowClosingEventHandler -} - -func (e *WebViewWindowClosingEvent) Attach(handler WebViewWindowClosingEventHandler) int { - for i, h := range e.handlers { - if h == nil { - e.handlers[i] = handler - return i - } - } - - e.handlers = append(e.handlers, handler) - return len(e.handlers) - 1 -} - -func (e *WebViewWindowClosingEvent) Detach(handle int) { - e.handlers[handle] = nil -} - -type WebViewWindowClosingEventPublisher struct { - event WebViewWindowClosingEvent -} - -func (p *WebViewWindowClosingEventPublisher) Event() *WebViewWindowClosingEvent { - return &p.event -} - -func (p *WebViewWindowClosingEventPublisher) Publish(eventData *WebViewWindowClosingEventData) { - for _, handler := range p.event.handlers { - if handler != nil { - handler(eventData) - } - } -} diff --git a/webview_idochostuihandler.go b/webview_idochostuihandler.go deleted file mode 100644 index 15253824..00000000 --- a/webview_idochostuihandler.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2010 The Walk Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package walk - -import ( - "syscall" - "unsafe" -) - -import ( - "github.com/lxn/win" -) - -var webViewIDocHostUIHandlerVtbl *win.IDocHostUIHandlerVtbl - -func init() { - webViewIDocHostUIHandlerVtbl = &win.IDocHostUIHandlerVtbl{ - syscall.NewCallback(webView_IDocHostUIHandler_QueryInterface), - syscall.NewCallback(webView_IDocHostUIHandler_AddRef), - syscall.NewCallback(webView_IDocHostUIHandler_Release), - syscall.NewCallback(webView_IDocHostUIHandler_ShowContextMenu), - syscall.NewCallback(webView_IDocHostUIHandler_GetHostInfo), - syscall.NewCallback(webView_IDocHostUIHandler_ShowUI), - syscall.NewCallback(webView_IDocHostUIHandler_HideUI), - syscall.NewCallback(webView_IDocHostUIHandler_UpdateUI), - syscall.NewCallback(webView_IDocHostUIHandler_EnableModeless), - syscall.NewCallback(webView_IDocHostUIHandler_OnDocWindowActivate), - syscall.NewCallback(webView_IDocHostUIHandler_OnFrameWindowActivate), - syscall.NewCallback(webView_IDocHostUIHandler_ResizeBorder), - syscall.NewCallback(webView_IDocHostUIHandler_TranslateAccelerator), - syscall.NewCallback(webView_IDocHostUIHandler_GetOptionKeyPath), - syscall.NewCallback(webView_IDocHostUIHandler_GetDropTarget), - syscall.NewCallback(webView_IDocHostUIHandler_GetExternal), - syscall.NewCallback(webView_IDocHostUIHandler_TranslateUrl), - syscall.NewCallback(webView_IDocHostUIHandler_FilterDataObject), - } -} - -type webViewIDocHostUIHandler struct { - win.IDocHostUIHandler -} - -func webView_IDocHostUIHandler_QueryInterface(docHostUIHandler *webViewIDocHostUIHandler, riid win.REFIID, ppvObject *unsafe.Pointer) uintptr { - // Just reuse the QueryInterface implementation we have for IOleClientSite. - // We need to adjust object, which initially points at our - // webViewIDocHostUIHandler, so it refers to the containing - // webViewIOleClientSite for the call. - var clientSite win.IOleClientSite - var webViewInPlaceSite webViewIOleInPlaceSite - - ptr := uintptr(unsafe.Pointer(docHostUIHandler)) - uintptr(unsafe.Sizeof(clientSite)) - - uintptr(unsafe.Sizeof(webViewInPlaceSite)) - - return webView_IOleClientSite_QueryInterface((*webViewIOleClientSite)(unsafe.Pointer(ptr)), riid, ppvObject) -} - -func webView_IDocHostUIHandler_AddRef(docHostUIHandler *webViewIDocHostUIHandler) uintptr { - return 1 -} - -func webView_IDocHostUIHandler_Release(docHostUIHandler *webViewIDocHostUIHandler) uintptr { - return 1 -} - -func webView_IDocHostUIHandler_ShowContextMenu(docHostUIHandler *webViewIDocHostUIHandler, dwID uint32, ppt *win.POINT, pcmdtReserved *win.IUnknown, pdispReserved uintptr) uintptr { - var webViewInPlaceSite webViewIOleInPlaceSite - var iOleClientSite win.IOleClientSite - var wb WidgetBase - ptr := uintptr(unsafe.Pointer(docHostUIHandler)) - - uintptr(unsafe.Sizeof(webViewInPlaceSite)) - - uintptr(unsafe.Sizeof(iOleClientSite)) - - uintptr(unsafe.Sizeof(wb)) - webView := (*WebView)(unsafe.Pointer(ptr)) - - // show context menu - if webView.NativeContextMenuEnabled() { - return win.S_FALSE - } - - return win.S_OK -} - -func webView_IDocHostUIHandler_GetHostInfo(docHostUIHandler *webViewIDocHostUIHandler, pInfo *win.DOCHOSTUIINFO) uintptr { - pInfo.CbSize = uint32(unsafe.Sizeof(*pInfo)) - pInfo.DwFlags = win.DOCHOSTUIFLAG_NO3DBORDER - pInfo.DwDoubleClick = win.DOCHOSTUIDBLCLK_DEFAULT - - return win.S_OK -} - -func webView_IDocHostUIHandler_ShowUI(docHostUIHandler *webViewIDocHostUIHandler, dwID uint32, pActiveObject uintptr, pCommandTarget uintptr, pFrame *win.IOleInPlaceFrame, pDoc uintptr) uintptr { - return win.S_OK -} - -func webView_IDocHostUIHandler_HideUI(docHostUIHandler *webViewIDocHostUIHandler) uintptr { - return win.S_OK -} - -func webView_IDocHostUIHandler_UpdateUI(docHostUIHandler *webViewIDocHostUIHandler) uintptr { - return win.S_OK -} - -func webView_IDocHostUIHandler_EnableModeless(docHostUIHandler *webViewIDocHostUIHandler, fEnable win.BOOL) uintptr { - return win.S_OK -} - -func webView_IDocHostUIHandler_OnDocWindowActivate(docHostUIHandler *webViewIDocHostUIHandler, fActivate win.BOOL) uintptr { - return win.S_OK -} - -func webView_IDocHostUIHandler_OnFrameWindowActivate(docHostUIHandler *webViewIDocHostUIHandler, fActivate win.BOOL) uintptr { - return win.S_OK -} - -func webView_IDocHostUIHandler_ResizeBorder(docHostUIHandler *webViewIDocHostUIHandler, prcBorder *win.RECT, pUIWindow uintptr, fRameWindow win.BOOL) uintptr { - return win.S_OK -} - -func webView_IDocHostUIHandler_TranslateAccelerator(docHostUIHandler *webViewIDocHostUIHandler, lpMsg *win.MSG, pguidCmdGroup *syscall.GUID, nCmdID uint) uintptr { - return win.S_FALSE -} - -func webView_IDocHostUIHandler_GetOptionKeyPath(docHostUIHandler *webViewIDocHostUIHandler, pchKey *uint16, dw uint) uintptr { - return win.S_FALSE -} - -func webView_IDocHostUIHandler_GetDropTarget(docHostUIHandler *webViewIDocHostUIHandler, pDropTarget uintptr, ppDropTarget *uintptr) uintptr { - return win.S_FALSE -} - -func webView_IDocHostUIHandler_GetExternal(docHostUIHandler *webViewIDocHostUIHandler, ppDispatch *uintptr) uintptr { - *ppDispatch = 0 - - return win.S_FALSE -} - -func webView_IDocHostUIHandler_TranslateUrl(docHostUIHandler *webViewIDocHostUIHandler, dwTranslate uint32, pchURLIn *uint16, ppchURLOut **uint16) uintptr { - *ppchURLOut = nil - - return win.S_FALSE -} - -func webView_IDocHostUIHandler_FilterDataObject(docHostUIHandler *webViewIDocHostUIHandler, pDO uintptr, ppDORet *uintptr) uintptr { - *ppDORet = 0 - - return win.S_FALSE -} diff --git a/webview_ioleclientsite.go b/webview_ioleclientsite.go deleted file mode 100644 index 0bfea3c5..00000000 --- a/webview_ioleclientsite.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2010 The Walk Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package walk - -import ( - "syscall" - "unsafe" -) - -import ( - "github.com/lxn/win" -) - -var webViewIOleClientSiteVtbl *win.IOleClientSiteVtbl - -func init() { - webViewIOleClientSiteVtbl = &win.IOleClientSiteVtbl{ - syscall.NewCallback(webView_IOleClientSite_QueryInterface), - syscall.NewCallback(webView_IOleClientSite_AddRef), - syscall.NewCallback(webView_IOleClientSite_Release), - syscall.NewCallback(webView_IOleClientSite_SaveObject), - syscall.NewCallback(webView_IOleClientSite_GetMoniker), - syscall.NewCallback(webView_IOleClientSite_GetContainer), - syscall.NewCallback(webView_IOleClientSite_ShowObject), - syscall.NewCallback(webView_IOleClientSite_OnShowWindow), - syscall.NewCallback(webView_IOleClientSite_RequestNewObjectLayout), - } -} - -type webViewIOleClientSite struct { - win.IOleClientSite - inPlaceSite webViewIOleInPlaceSite - docHostUIHandler webViewIDocHostUIHandler - webBrowserEvents2 webViewDWebBrowserEvents2 -} - -func webView_IOleClientSite_QueryInterface(clientSite *webViewIOleClientSite, riid win.REFIID, ppvObject *unsafe.Pointer) uintptr { - if win.EqualREFIID(riid, &win.IID_IUnknown) { - *ppvObject = unsafe.Pointer(clientSite) - } else if win.EqualREFIID(riid, &win.IID_IOleClientSite) { - *ppvObject = unsafe.Pointer(clientSite) - } else if win.EqualREFIID(riid, &win.IID_IOleInPlaceSite) { - *ppvObject = unsafe.Pointer(&clientSite.inPlaceSite) - } else if win.EqualREFIID(riid, &win.IID_IDocHostUIHandler) { - *ppvObject = unsafe.Pointer(&clientSite.docHostUIHandler) - } else if win.EqualREFIID(riid, &win.DIID_DWebBrowserEvents2) { - *ppvObject = unsafe.Pointer(&clientSite.webBrowserEvents2) - } else { - *ppvObject = nil - return win.E_NOINTERFACE - } - - return win.S_OK -} - -func webView_IOleClientSite_AddRef(clientSite *webViewIOleClientSite) uintptr { - return 1 -} - -func webView_IOleClientSite_Release(clientSite *webViewIOleClientSite) uintptr { - return 1 -} - -func webView_IOleClientSite_SaveObject(clientSite *webViewIOleClientSite) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleClientSite_GetMoniker(clientSite *webViewIOleClientSite, dwAssign, dwWhichMoniker uint32, ppmk *unsafe.Pointer) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleClientSite_GetContainer(clientSite *webViewIOleClientSite, ppContainer *unsafe.Pointer) uintptr { - *ppContainer = nil - - return win.E_NOINTERFACE -} - -func webView_IOleClientSite_ShowObject(clientSite *webViewIOleClientSite) uintptr { - return win.S_OK -} - -func webView_IOleClientSite_OnShowWindow(clientSite *webViewIOleClientSite, fShow win.BOOL) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleClientSite_RequestNewObjectLayout(clientSite *webViewIOleClientSite) uintptr { - return win.E_NOTIMPL -} diff --git a/webview_ioleinplaceframe.go b/webview_ioleinplaceframe.go deleted file mode 100644 index e5685571..00000000 --- a/webview_ioleinplaceframe.go +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2010 The Walk Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package walk - -import ( - "syscall" -) - -import ( - "github.com/lxn/win" -) - -var webViewIOleInPlaceFrameVtbl *win.IOleInPlaceFrameVtbl - -func init() { - webViewIOleInPlaceFrameVtbl = &win.IOleInPlaceFrameVtbl{ - syscall.NewCallback(webView_IOleInPlaceFrame_QueryInterface), - syscall.NewCallback(webView_IOleInPlaceFrame_AddRef), - syscall.NewCallback(webView_IOleInPlaceFrame_Release), - syscall.NewCallback(webView_IOleInPlaceFrame_GetWindow), - syscall.NewCallback(webView_IOleInPlaceFrame_ContextSensitiveHelp), - syscall.NewCallback(webView_IOleInPlaceFrame_GetBorder), - syscall.NewCallback(webView_IOleInPlaceFrame_RequestBorderSpace), - syscall.NewCallback(webView_IOleInPlaceFrame_SetBorderSpace), - syscall.NewCallback(webView_IOleInPlaceFrame_SetActiveObject), - syscall.NewCallback(webView_IOleInPlaceFrame_InsertMenus), - syscall.NewCallback(webView_IOleInPlaceFrame_SetMenu), - syscall.NewCallback(webView_IOleInPlaceFrame_RemoveMenus), - syscall.NewCallback(webView_IOleInPlaceFrame_SetStatusText), - syscall.NewCallback(webView_IOleInPlaceFrame_EnableModeless), - syscall.NewCallback(webView_IOleInPlaceFrame_TranslateAccelerator), - } -} - -type webViewIOleInPlaceFrame struct { - win.IOleInPlaceFrame - webView *WebView -} - -func webView_IOleInPlaceFrame_QueryInterface(inPlaceFrame *webViewIOleInPlaceFrame, riid win.REFIID, ppvObj *uintptr) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceFrame_AddRef(inPlaceFrame *webViewIOleInPlaceFrame) uintptr { - return 1 -} - -func webView_IOleInPlaceFrame_Release(inPlaceFrame *webViewIOleInPlaceFrame) uintptr { - return 1 -} - -func webView_IOleInPlaceFrame_GetWindow(inPlaceFrame *webViewIOleInPlaceFrame, lphwnd *win.HWND) uintptr { - *lphwnd = inPlaceFrame.webView.hWnd - - return win.S_OK -} - -func webView_IOleInPlaceFrame_ContextSensitiveHelp(inPlaceFrame *webViewIOleInPlaceFrame, fEnterMode win.BOOL) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceFrame_GetBorder(inPlaceFrame *webViewIOleInPlaceFrame, lprectBorder *win.RECT) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceFrame_RequestBorderSpace(inPlaceFrame *webViewIOleInPlaceFrame, pborderwidths uintptr) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceFrame_SetBorderSpace(inPlaceFrame *webViewIOleInPlaceFrame, pborderwidths uintptr) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceFrame_SetActiveObject(inPlaceFrame *webViewIOleInPlaceFrame, pActiveObject uintptr, pszObjName *uint16) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceFrame_InsertMenus(inPlaceFrame *webViewIOleInPlaceFrame, hmenuShared win.HMENU, lpMenuWidths uintptr) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceFrame_SetMenu(inPlaceFrame *webViewIOleInPlaceFrame, hmenuShared win.HMENU, holemenu win.HMENU, hwndActiveObject win.HWND) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceFrame_RemoveMenus(inPlaceFrame *webViewIOleInPlaceFrame, hmenuShared win.HMENU) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceFrame_SetStatusText(inPlaceFrame *webViewIOleInPlaceFrame, pszStatusText *uint16) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceFrame_EnableModeless(inPlaceFrame *webViewIOleInPlaceFrame, fEnable win.BOOL) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceFrame_TranslateAccelerator(inPlaceFrame *webViewIOleInPlaceFrame, lpmsg *win.MSG, wID uint32) uintptr { - return win.E_NOTIMPL -} diff --git a/webview_ioleinplacesite.go b/webview_ioleinplacesite.go deleted file mode 100644 index c6bfe8a1..00000000 --- a/webview_ioleinplacesite.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2010 The Walk Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package walk - -import ( - "syscall" - "unsafe" -) - -import ( - "github.com/lxn/win" -) - -var webViewIOleInPlaceSiteVtbl *win.IOleInPlaceSiteVtbl - -func init() { - webViewIOleInPlaceSiteVtbl = &win.IOleInPlaceSiteVtbl{ - syscall.NewCallback(webView_IOleInPlaceSite_QueryInterface), - syscall.NewCallback(webView_IOleInPlaceSite_AddRef), - syscall.NewCallback(webView_IOleInPlaceSite_Release), - syscall.NewCallback(webView_IOleInPlaceSite_GetWindow), - syscall.NewCallback(webView_IOleInPlaceSite_ContextSensitiveHelp), - syscall.NewCallback(webView_IOleInPlaceSite_CanInPlaceActivate), - syscall.NewCallback(webView_IOleInPlaceSite_OnInPlaceActivate), - syscall.NewCallback(webView_IOleInPlaceSite_OnUIActivate), - syscall.NewCallback(webView_IOleInPlaceSite_GetWindowContext), - syscall.NewCallback(webView_IOleInPlaceSite_Scroll), - syscall.NewCallback(webView_IOleInPlaceSite_OnUIDeactivate), - syscall.NewCallback(webView_IOleInPlaceSite_OnInPlaceDeactivate), - syscall.NewCallback(webView_IOleInPlaceSite_DiscardUndoState), - syscall.NewCallback(webView_IOleInPlaceSite_DeactivateAndUndo), - syscall.NewCallback(webView_IOleInPlaceSite_OnPosRectChange), - } -} - -type webViewIOleInPlaceSite struct { - win.IOleInPlaceSite - inPlaceFrame webViewIOleInPlaceFrame -} - -func webView_IOleInPlaceSite_QueryInterface(inPlaceSite *webViewIOleInPlaceSite, riid win.REFIID, ppvObject *unsafe.Pointer) uintptr { - // Just reuse the QueryInterface implementation we have for IOleClientSite. - // We need to adjust object from the webViewIDocHostUIHandler to the - // containing webViewIOleInPlaceSite. - var clientSite win.IOleClientSite - - ptr := uintptr(unsafe.Pointer(inPlaceSite)) - uintptr(unsafe.Sizeof(clientSite)) - - return webView_IOleClientSite_QueryInterface((*webViewIOleClientSite)(unsafe.Pointer(ptr)), riid, ppvObject) -} - -func webView_IOleInPlaceSite_AddRef(inPlaceSite *webViewIOleInPlaceSite) uintptr { - return 1 -} - -func webView_IOleInPlaceSite_Release(inPlaceSite *webViewIOleInPlaceSite) uintptr { - return 1 -} - -func webView_IOleInPlaceSite_GetWindow(inPlaceSite *webViewIOleInPlaceSite, lphwnd *win.HWND) uintptr { - *lphwnd = inPlaceSite.inPlaceFrame.webView.hWnd - - return win.S_OK -} - -func webView_IOleInPlaceSite_ContextSensitiveHelp(inPlaceSite *webViewIOleInPlaceSite, fEnterMode win.BOOL) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceSite_CanInPlaceActivate(inPlaceSite *webViewIOleInPlaceSite) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceSite_OnInPlaceActivate(inPlaceSite *webViewIOleInPlaceSite) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceSite_OnUIActivate(inPlaceSite *webViewIOleInPlaceSite) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceSite_GetWindowContext(inPlaceSite *webViewIOleInPlaceSite, lplpFrame **webViewIOleInPlaceFrame, lplpDoc *uintptr, lprcPosRect, lprcClipRect *win.RECT, lpFrameInfo *win.OLEINPLACEFRAMEINFO) uintptr { - *lplpFrame = &inPlaceSite.inPlaceFrame - *lplpDoc = 0 - - lpFrameInfo.FMDIApp = win.FALSE - lpFrameInfo.HwndFrame = inPlaceSite.inPlaceFrame.webView.hWnd - lpFrameInfo.Haccel = 0 - lpFrameInfo.CAccelEntries = 0 - - return win.S_OK -} - -func webView_IOleInPlaceSite_Scroll(inPlaceSite *webViewIOleInPlaceSite, scrollExtentX, scrollExtentY int32) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceSite_OnUIDeactivate(inPlaceSite *webViewIOleInPlaceSite, fUndoable win.BOOL) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceSite_OnInPlaceDeactivate(inPlaceSite *webViewIOleInPlaceSite) uintptr { - return win.S_OK -} - -func webView_IOleInPlaceSite_DiscardUndoState(inPlaceSite *webViewIOleInPlaceSite) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceSite_DeactivateAndUndo(inPlaceSite *webViewIOleInPlaceSite) uintptr { - return win.E_NOTIMPL -} - -func webView_IOleInPlaceSite_OnPosRectChange(inPlaceSite *webViewIOleInPlaceSite, lprcPosRect *win.RECT) uintptr { - browserObject := inPlaceSite.inPlaceFrame.webView.browserObject - var inPlaceObjectPtr unsafe.Pointer - if hr := browserObject.QueryInterface(&win.IID_IOleInPlaceObject, &inPlaceObjectPtr); win.FAILED(hr) { - return uintptr(hr) - } - inPlaceObject := (*win.IOleInPlaceObject)(inPlaceObjectPtr) - defer inPlaceObject.Release() - - return uintptr(inPlaceObject.SetObjectRects(lprcPosRect, lprcPosRect)) -} |