From 89dec509c4f35c736571996a0d4ef9156dcd50f2 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Wed, 28 May 2008 06:12:34 +0000 Subject: [PATCH] Add wxWebKitNewWindowEvent git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@53798 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/html/webkit.h | 29 +++++++++++++++++++++++++++++ src/html/htmlctrl/webkit/webkit.mm | 29 ++++++++++++++++++++++++++++- version-script.in | 1 + 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/include/wx/html/webkit.h b/include/wx/html/webkit.h index 432082f09f..a218ee7e5b 100755 --- a/include/wx/html/webkit.h +++ b/include/wx/html/webkit.h @@ -172,12 +172,34 @@ protected: wxString m_url; }; + +#if wxABI_VERSION >= 20808 +class wxWebKitNewWindowEvent : public wxCommandEvent +{ + DECLARE_DYNAMIC_CLASS( wxWebViewNewWindowEvent ) +public: + wxString GetURL() const { return m_url; } + void SetURL(const wxString& url) { m_url = url; } + wxString GetTargetName() const { return m_targetName; } + void SetTargetName(const wxString& name) { m_targetName = name; } + + wxWebKitNewWindowEvent( wxWindow* win = (wxWindow*)(NULL)); + wxEvent *Clone(void) const { return new wxWebKitNewWindowEvent(*this); } + +private: + wxString m_url; + wxString m_targetName; +}; +#endif + typedef void (wxEvtHandler::*wxWebKitStateChangedEventFunction)(wxWebKitStateChangedEvent&); typedef void (wxEvtHandler::*wxWebKitBeforeLoadEventFunction)(wxWebKitBeforeLoadEvent&); +typedef void (wxEvtHandler::*wxWebKitNewWindowEventFunction)(wxWebKitNewWindowEvent&); BEGIN_DECLARE_EVENT_TYPES() DECLARE_LOCAL_EVENT_TYPE(wxEVT_WEBKIT_BEFORE_LOAD, wxID_ANY) DECLARE_LOCAL_EVENT_TYPE(wxEVT_WEBKIT_STATE_CHANGED, wxID_ANY) + DECLARE_LOCAL_EVENT_TYPE(wxEVT_WEBKIT_NEW_WINDOW, wxID_ANY) END_DECLARE_EVENT_TYPES() #define EVT_WEBKIT_STATE_CHANGED(func) \ @@ -196,6 +218,13 @@ END_DECLARE_EVENT_TYPES() (wxWebKitBeforeLoadEventFunction) & func, \ (wxObject *) NULL ), +#define EVT_WEBKIT_NEW_WINDOW(func) \ + DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_NEW_WINDOW, \ + wxID_ANY, \ + wxID_ANY, \ + (wxObjectEventFunction) \ + (wxWebKitNewWindowEventFunction) & func, \ + (wxObject *) NULL ), #endif // wxUSE_WEBKIT #endif diff --git a/src/html/htmlctrl/webkit/webkit.mm b/src/html/htmlctrl/webkit/webkit.mm index 9d406f61ba..5ee049ca23 100755 --- a/src/html/htmlctrl/webkit/webkit.mm +++ b/src/html/htmlctrl/webkit/webkit.mm @@ -309,6 +309,20 @@ wxWebKitBeforeLoadEvent::wxWebKitBeforeLoadEvent( wxWindow* win ) SetId(win->GetId()); } + +IMPLEMENT_DYNAMIC_CLASS( wxWebKitNewWindowEvent, wxCommandEvent ) + +DEFINE_EVENT_TYPE( wxEVT_WEBKIT_NEW_WINDOW ) + +wxWebKitNewWindowEvent::wxWebKitNewWindowEvent( wxWindow* win ) +{ + SetEventType( wxEVT_WEBKIT_NEW_WINDOW); + SetEventObject( win ); + SetId(win->GetId()); +} + + + //--------------------------------------------------------- // helper functions for NSString<->wxString conversion //--------------------------------------------------------- @@ -845,12 +859,25 @@ void wxWebKitCtrl::MacVisibilityChanged(){ if (webKitWindow && webKitWindow->GetEventHandler()) webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); - if (thisEvent.IsCancelled()) + if (thisEvent.IsCancelled()) [listener ignore]; else [listener use]; } +- (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id < WebPolicyDecisionListener >)listener +{ + wxWebKitNewWindowEvent thisEvent(webKitWindow); + + NSString *url = [[request URL] absoluteString]; + thisEvent.SetURL( wxStringWithNSString( url ) ); + thisEvent.SetTargetName( wxStringWithNSString( frameName ) ); + + if (webKitWindow && webKitWindow->GetEventHandler()) + webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); + + [listener use]; +} @end #endif //wxUSE_WEBKIT diff --git a/version-script.in b/version-script.in index 19b1330108..b738c575ae 100644 --- a/version-script.in +++ b/version-script.in @@ -46,6 +46,7 @@ *wxSizer*ComputeFittingWindowSize*; *wxSizerFlags*ReserveSpaceEvenIfHidden*; *wxSizerItem*ShouldAccountFor*; + *wxWebKitNewWindowEvent*; *wxWindowBase*ClientToWindowSize*; *wxWindowBase*Get*Sibling*; *wxWindowBase*WindowToClientSize*;