]> git.saurik.com Git - wxWidgets.git/commitdiff
Add new wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED event. Implement for all backends, exten...
authorSteve Lamerton <steve.lamerton@gmail.com>
Sat, 30 Jul 2011 11:26:55 +0000 (11:26 +0000)
committerSteve Lamerton <steve.lamerton@gmail.com>
Sat, 30 Jul 2011 11:26:55 +0000 (11:26 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/SOC2011_WEBVIEW@68458 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/webview_ie.h
include/wx/webview.h
interface/wx/webview.h
samples/web/web.cpp
src/common/webview.cpp
src/gtk/webview_webkit.cpp
src/msw/webview_ie.cpp
src/osx/webview_webkit.mm

index ff0500cb231f41e68e51ab90e6ca14a9bf7e8c63..f8245644fcb37aa109fc623f04488a3fbefc1e39 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     wxMSW IE wxWebView backend
 // Author:      Marianne Gagnon
 // Id:          $Id$
 // Purpose:     wxMSW IE wxWebView backend
 // Author:      Marianne Gagnon
 // Id:          $Id$
-// Copyright:   (c) 2010 Marianne Gagnon, Steven Lamerton
+// Copyright:   (c) 2010 Marianne Gagnon, 2011 Steven Lamerton
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
index 43bb52bab8b3094d22987eb0284de38e6b9cddb3..da306c1be1d5cf38b0b23cb063afb7c5c98ec2d2 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     Common interface and events for web view component
 // Author:      Marianne Gagnon
 // Id:          $Id$
 // Purpose:     Common interface and events for web view component
 // Author:      Marianne Gagnon
 // Id:          $Id$
-// Copyright:   (c) 2010 Marianne Gagnon
+// Copyright:   (c) 2010 Marianne Gagnon, 2011 Steven Lamerton
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -421,6 +421,7 @@ wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEB, wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxW
 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEB, wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebNavigationEvent );
 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEB, wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebNavigationEvent );
 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEB, wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebNavigationEvent );
 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEB, wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebNavigationEvent );
 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEB, wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebNavigationEvent );
 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEB, wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebNavigationEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEB, wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebNavigationEvent );
 
 typedef void (wxEvtHandler::*wxWebNavigationEventFunction)
              (wxWebNavigationEvent&);
 
 typedef void (wxEvtHandler::*wxWebNavigationEventFunction)
              (wxWebNavigationEvent&);
@@ -448,6 +449,10 @@ typedef void (wxEvtHandler::*wxWebNavigationEventFunction)
     wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, id, \
                      wxHtmlNavigatingEventHandler(fn))
 
     wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, id, \
                      wxHtmlNavigatingEventHandler(fn))
 
+#define EVT_WEB_VIEW_TITLE_CHANGED(id, fn) \
+    wx__DECLARE_EVT1(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, id, \
+                     wxHtmlNavigatingEventHandler(fn))
+
 #endif // wxUSE_WEB
 
 #endif // _WX_WEB_VIEW_H_
 #endif // wxUSE_WEB
 
 #endif // _WX_WEB_VIEW_H_
index 7d5f96da905beb7ee89f716f5556eacd666c0142..cf5b9bd75a8d9965da3fe6fe5b7e80b859ddc3fb 100644 (file)
@@ -157,6 +157,9 @@ public:
        Process a @c wxEVT_COMMAND_WEB_VIEW_NEWWINDOW event, generated when a new
        window is created. You must handle this event if you want anything to 
        happen, for example to load the page in a new window or tab.
        Process a @c wxEVT_COMMAND_WEB_VIEW_NEWWINDOW event, generated when a new
        window is created. You must handle this event if you want anything to 
        happen, for example to load the page in a new window or tab.
+    @event{EVT_WEB_VIEW_TITLE_CHANGED(id, func)}
+       Process a @c wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED event, generated when 
+       the page title changes. Use GetString to get the title.
     @endEventTable
    
     @library{wxweb}
     @endEventTable
    
     @library{wxweb}
@@ -521,6 +524,9 @@ public:
        Process a @c wxEVT_COMMAND_WEB_VIEW_NEWWINDOW event, generated when a new
        window is created. You must handle this event if you want anything to 
        happen, for example to load the page in a new window or tab.
        Process a @c wxEVT_COMMAND_WEB_VIEW_NEWWINDOW event, generated when a new
        window is created. You must handle this event if you want anything to 
        happen, for example to load the page in a new window or tab.
+    @event{EVT_WEB_VIEW_TITLE_CHANGED(id, func)}
+       Process a @c wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED event, generated when 
+       the page title changes. Use GetString to get the title.
     @endEventTable
 
     @library{wxweb}
     @endEventTable
 
     @library{wxweb}
index 48d1859c4a3f8718ecc6170c73f5572eed66717b..97f20bf99a5212837ba6bbc623b9cd881eb9a511 100644 (file)
@@ -68,6 +68,7 @@ public:
     void OnNavigationComplete(wxWebNavigationEvent& evt);
     void OnDocumentLoaded(wxWebNavigationEvent& evt);
     void OnNewWindow(wxWebNavigationEvent& evt);
     void OnNavigationComplete(wxWebNavigationEvent& evt);
     void OnDocumentLoaded(wxWebNavigationEvent& evt);
     void OnNewWindow(wxWebNavigationEvent& evt);
+    void OnTitleChanged(wxWebNavigationEvent& evt);
     void OnViewSourceRequest(wxCommandEvent& evt);
     void OnToolsClicked(wxCommandEvent& evt);
     void OnSetZoom(wxCommandEvent& evt);
     void OnViewSourceRequest(wxCommandEvent& evt);
     void OnToolsClicked(wxCommandEvent& evt);
     void OnSetZoom(wxCommandEvent& evt);
@@ -266,6 +267,8 @@ WebFrame::WebFrame() : wxFrame(NULL, wxID_ANY, "wxWebView Sample")
             wxWebNavigationEventHandler(WebFrame::OnError), NULL, this);
     Connect(m_browser->GetId(), wxEVT_COMMAND_WEB_VIEW_NEWWINDOW,
             wxWebNavigationEventHandler(WebFrame::OnNewWindow), NULL, this);
             wxWebNavigationEventHandler(WebFrame::OnError), NULL, this);
     Connect(m_browser->GetId(), wxEVT_COMMAND_WEB_VIEW_NEWWINDOW,
             wxWebNavigationEventHandler(WebFrame::OnNewWindow), NULL, this);
+    Connect(m_browser->GetId(), wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED,
+            wxWebNavigationEventHandler(WebFrame::OnTitleChanged), NULL, this);
 
     // Connect the menu events
     Connect(viewSource->GetId(), wxEVT_COMMAND_MENU_SELECTED,
 
     // Connect the menu events
     Connect(viewSource->GetId(), wxEVT_COMMAND_MENU_SELECTED,
@@ -509,6 +512,12 @@ void WebFrame::OnNewWindow(wxWebNavigationEvent& evt)
     UpdateState();
 }
 
     UpdateState();
 }
 
+void WebFrame::OnTitleChanged(wxWebNavigationEvent& evt)
+{
+    wxLogMessage("%s", "Title changed; title='" + evt.GetString() + "'");
+    UpdateState();
+}
+
 /**
   * Invoked when user selects the "View Source" menu item
   */
 /**
   * Invoked when user selects the "View Source" menu item
   */
index 9c0c88f0ba07fb6ccf5178ba9512ede03792b598..113f96ad687a37bdccde754c7c903b9d95ffa58a 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     Common interface and events for web view component
 // Author:      Marianne Gagnon
 // Id:          $Id$
 // Purpose:     Common interface and events for web view component
 // Author:      Marianne Gagnon
 // Id:          $Id$
-// Copyright:   (c) 2010 Marianne Gagnon
+// Copyright:   (c) 2010 Marianne Gagnon, 2011 Steven Lamerton
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -38,6 +38,7 @@ wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebNavigationEvent );
 wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebNavigationEvent );
 wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebNavigationEvent );
 wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebNavigationEvent );
 wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebNavigationEvent );
 wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebNavigationEvent );
 wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebNavigationEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebNavigationEvent );
 
 //Taken from wx/filesys.cpp
 static wxString EscapeFileNameCharsInURL(const char *in)
 
 //Taken from wx/filesys.cpp
 static wxString EscapeFileNameCharsInURL(const char *in)
index 27879488dfd335910ed958d816f54278067c60e7..c1493d21e6b1c51cc0490f8f07c1d438c23240a4 100644 (file)
@@ -65,7 +65,7 @@ static gboolean
 wxgtk_webview_webkit_navigation(WebKitWebView*,
                                 WebKitWebFrame *frame,
                                 WebKitNetworkRequest *request,
 wxgtk_webview_webkit_navigation(WebKitWebView*,
                                 WebKitWebFrame *frame,
                                 WebKitNetworkRequest *request,
-                                WebKitWebNavigationAction*,
+                                WebKitWebNavigationAction *,
                                 WebKitWebPolicyDecision *policy_decision,
                                 wxWebViewWebKit *webKitCtrl)
 {
                                 WebKitWebPolicyDecision *policy_decision,
                                 wxWebViewWebKit *webKitCtrl)
 {
@@ -263,6 +263,24 @@ wxgtk_webview_webkit_new_window(WebKitWebView*,
     return TRUE;
 }
 
     return TRUE;
 }
 
+static void
+wxgtk_webview_webkit_title_changed(WebKitWebView *webView,
+                                   WebKitWebFrame *frame,
+                                   gchar *title,
+                                   wxWebViewWebKit *webKitCtrl)
+{
+    wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED,
+                                   webKitCtrl->GetId(),
+                                   webKitCtrl->GetCurrentURL(),
+                                   "",
+                                   true);
+    thisEvent.SetString(wxString(title, wxConvUTF8));
+
+    if (webKitCtrl && webKitCtrl->GetEventHandler())
+        webKitCtrl->GetEventHandler()->ProcessEvent(thisEvent);
+
+}
+
 } // extern "C"
 
 //-----------------------------------------------------------------------------
 } // extern "C"
 
 //-----------------------------------------------------------------------------
@@ -314,6 +332,9 @@ bool wxWebViewWebKit::Create(wxWindow *parent,
     g_signal_connect_after(web_view, "new-window-policy-decision-requested",
                            G_CALLBACK(wxgtk_webview_webkit_new_window), this);
 
     g_signal_connect_after(web_view, "new-window-policy-decision-requested",
                            G_CALLBACK(wxgtk_webview_webkit_new_window), this);
 
+    g_signal_connect_after(web_view, "title-changed",
+                           G_CALLBACK(wxgtk_webview_webkit_title_changed), this);
+
     m_parent->DoAddChild( this );
 
     PostCreation(size);
     m_parent->DoAddChild( this );
 
     PostCreation(size);
index 0250dd85f0883204da128273b2723bc0a6d89168..07cda9f9d59a53df126ac75a8da2bd1705212093 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     wxMSW wxWebViewIE class implementation for web view component
 // Author:      Marianne Gagnon
 // Id:          $Id$
 // Purpose:     wxMSW wxWebViewIE class implementation for web view component
 // Author:      Marianne Gagnon
 // Id:          $Id$
-// Copyright:   (c) 2010 Marianne Gagnon, Steven Lamerton
+// Copyright:   (c) 2010 Marianne Gagnon, 2011 Steven Lamerton
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -803,6 +803,13 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt)
 
         case DISPID_TITLECHANGE:
         {
 
         case DISPID_TITLECHANGE:
         {
+            wxString title = evt[0].GetString();
+
+            wxWebNavigationEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED,
+                                       GetId(), GetCurrentURL(), wxEmptyString, true);
+            event.SetString(title);
+            event.SetEventObject(this);
+            HandleWindowEvent(event);
             break;
         }
 
             break;
         }
 
index daae499d702f54e0d9daf4bbd550e1ccd01660e5..0be86709bc7e9e77e8ef69643e28b9a8f7e197af 100644 (file)
@@ -1132,6 +1132,16 @@ wxString nsErrorToWxHtmlError(NSError* error, wxWebNavigationError* out)
     {
         webKitWindow->SetPageTitle(wxStringWithNSString( title ));
     }
     {
         webKitWindow->SetPageTitle(wxStringWithNSString( title ));
     }
+    wxString target = wxStringWithNSString([frame name]);
+    wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED,
+                                   wx_webviewctrls[sender]->GetId(),
+                                   wx_webviewctrls[sender]->GetCurrentURL(),
+                                   target, true);
+                                   
+    thisEvent.SetString(wxStringWithNSString(title));
+
+    if (webKitWindow && webKitWindow->GetEventHandler())
+        webKitWindow->GetEventHandler()->ProcessEvent(thisEvent);
 }
 @end
 
 }
 @end