diff --git a/include/wx/msw/private/webview_edge.h b/include/wx/msw/private/webview_edge.h index c1c72c0fba..c5c05448c4 100644 --- a/include/wx/msw/private/webview_edge.h +++ b/include/wx/msw/private/webview_edge.h @@ -37,12 +37,14 @@ public: EventRegistrationToken m_navigationCompletedToken = { }; EventRegistrationToken m_newWindowRequestedToken = { }; EventRegistrationToken m_documentTitleChangedToken = { }; + EventRegistrationToken m_documentStateChangedToken = { }; // WebView Event handlers HRESULT OnNavigationStarting(IWebView2WebView* sender, IWebView2NavigationStartingEventArgs* args); HRESULT OnNavigationCompleted(IWebView2WebView* sender, IWebView2NavigationCompletedEventArgs* args); HRESULT OnNewWindowRequested(IWebView2WebView* sender, IWebView2NewWindowRequestedEventArgs* args); HRESULT OnDocumentTitleChanged(IWebView2WebView* sender, IUnknown* args); + HRESULT OnDocumentStateChanged(IWebView2WebView* sender, IWebView2DocumentStateChangedEventArgs* args); HRESULT OnEnvironmentCreated(HRESULT result, IWebView2Environment* environment); HRESULT OnWebViewCreated(HRESULT result, IWebView2WebView* webview); diff --git a/src/msw/webview_edge.cpp b/src/msw/webview_edge.cpp index adca9b3b82..636ffb6a57 100644 --- a/src/msw/webview_edge.cpp +++ b/src/msw/webview_edge.cpp @@ -70,6 +70,7 @@ wxWebViewEdgeImpl::~wxWebViewEdgeImpl() m_webView->remove_NavigationStarting(m_navigationStartingToken); m_webView->remove_NewWindowRequested(m_newWindowRequestedToken); m_webView->remove_DocumentTitleChanged(m_documentTitleChangedToken); + m_webView->remove_DocumentStateChanged(m_documentStateChangedToken); } } @@ -266,6 +267,15 @@ HRESULT wxWebViewEdgeImpl::OnDocumentTitleChanged(IWebView2WebView* WXUNUSED(sen return S_OK; } +HRESULT wxWebViewEdgeImpl::OnDocumentStateChanged(IWebView2WebView* WXUNUSED(sender), IWebView2DocumentStateChangedEventArgs* WXUNUSED(args)) +{ + wxWebViewEvent event(wxEVT_WEBVIEW_LOADED, m_ctrl->GetId(), + m_ctrl->GetCurrentURL(), ""); + event.SetEventObject(m_ctrl); + m_ctrl->HandleWindowEvent(event); + return S_OK; +} + HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, IWebView2WebView* webview) { if (FAILED(result)) @@ -296,6 +306,10 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, IWebView2WebView* we Callback( this, &wxWebViewEdgeImpl::OnDocumentTitleChanged).Get(), &m_documentTitleChangedToken); + m_webView->add_DocumentStateChanged( + Callback( + this, &wxWebViewEdgeImpl::OnDocumentStateChanged).Get(), + &m_documentStateChangedToken); if (!m_pendingURL.empty()) {