diff --git a/include/wx/gtk/webview_webkit.h b/include/wx/gtk/webview_webkit.h index c7340f0dd1..2ac7eab691 100644 --- a/include/wx/gtk/webview_webkit.h +++ b/include/wx/gtk/webview_webkit.h @@ -47,6 +47,8 @@ public: const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxWebViewNameStr); + virtual ~wxWebViewWebKit(); + virtual bool Enable( bool enable = true ); // implementation diff --git a/src/gtk/webview_webkit.cpp b/src/gtk/webview_webkit.cpp index b01fc41c22..2f276abb0c 100644 --- a/src/gtk/webview_webkit.cpp +++ b/src/gtk/webview_webkit.cpp @@ -32,6 +32,11 @@ wxgtk_webview_webkit_load_status(GtkWidget* widget, GParamSpec*, wxWebViewWebKit *webKitCtrl) { + // We can be called from webkit_web_view_dispose() during the window + // destruction, don't use half-destroyed object in this case. + if ( webKitCtrl->IsBeingDeleted() ) + return; + wxString url = webKitCtrl->GetCurrentURL(); WebKitLoadStatus status; @@ -447,6 +452,15 @@ bool wxWebViewWebKit::Create(wxWindow *parent, return true; } +wxWebViewWebKit::~wxWebViewWebKit() +{ + // The main goal here is to set m_isBeingDeleted to true to avoid the use + // of this -- already half-destroyed -- object from WebKit callbacks, but + // just setting it would prevent wxWindowDestroyEvent from being sent, so + // send it now instead. + SendDestroyEvent(); +} + bool wxWebViewWebKit::Enable( bool enable ) { if (!wxControl::Enable(enable))