From: Robin Dunn Date: Wed, 28 May 2008 06:33:46 +0000 (+0000) Subject: Add wxWebKitNewWindowEvent X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/fa34bc533187f7b1521c3f207e955c92903fa552 Add wxWebKitNewWindowEvent git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53800 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/html/webkit.h b/include/wx/html/webkit.h index b04c08573b..7abc5809d2 100644 --- a/include/wx/html/webkit.h +++ b/include/wx/html/webkit.h @@ -172,11 +172,31 @@ protected: wxString m_url; }; + +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; +}; + typedef void (wxEvtHandler::*wxWebKitStateChangedEventFunction)(wxWebKitStateChangedEvent&); typedef void (wxEvtHandler::*wxWebKitBeforeLoadEventFunction)(wxWebKitBeforeLoadEvent&); +typedef void (wxEvtHandler::*wxWebKitNewWindowEventFunction)(wxWebKitNewWindowEvent&); extern const wxEventType wxEVT_WEBKIT_BEFORE_LOAD; extern const wxEventType wxEVT_WEBKIT_STATE_CHANGED; +extern const wxEventType wxEVT_WEBKIT_NEW_WINDOW; #define EVT_WEBKIT_STATE_CHANGED(func) \ DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_STATE_CHANGED, \ @@ -194,6 +214,13 @@ extern const wxEventType wxEVT_WEBKIT_STATE_CHANGED; (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 5af328fa45..7adc98dff0 100644 --- 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 //--------------------------------------------------------- @@ -858,6 +872,19 @@ void wxWebKitCtrl::MacVisibilityChanged(){ [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