]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxWebKitNewWindowEvent
authorRobin Dunn <robin@alldunn.com>
Wed, 28 May 2008 06:33:46 +0000 (06:33 +0000)
committerRobin Dunn <robin@alldunn.com>
Wed, 28 May 2008 06:33:46 +0000 (06:33 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53800 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/html/webkit.h
src/html/htmlctrl/webkit/webkit.mm

index b04c08573bf496707114bea6feb6022d561a396f..7abc5809d2eed13b35eabe856ef72b9e5cd967ce 100644 (file)
@@ -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
index 5af328fa45ee0eeaf5eaf72f9e94e4baa633d545..7adc98dff0393432f922b09ead069bea4c4857b4 100644 (file)
@@ -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