X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8290e3cd91a9ff5bd7aad1e51666518701193bb0..9ef101cd5548aacc4d921683d185b687cb7a6d35:/src/gtk/webview_webkit.cpp diff --git a/src/gtk/webview_webkit.cpp b/src/gtk/webview_webkit.cpp index 3fa92ff293..3f4c7c69bd 100644 --- a/src/gtk/webview_webkit.cpp +++ b/src/gtk/webview_webkit.cpp @@ -10,8 +10,7 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" - -#if wxHAVE_WEB_BACKEND_GTK_WEBKIT +#if wxUSE_WEBVIEW_WEBKIT #include "wx/stockitem.h" #include "wx/gtk/webview_webkit.h" @@ -28,7 +27,7 @@ extern "C" static void wxgtk_webkitctrl_load_status_callback(GtkWidget* widget, GParamSpec* arg1, - wxWebViewGTKWebKit *webKitCtrl) + wxWebViewWebKit *webKitCtrl) { if (!webKitCtrl->m_ready) return; @@ -65,7 +64,7 @@ static WebKitNavigationResponse wxgtk_webkitctrl_navigation_requ_callback(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, - wxWebViewGTKWebKit *webKitCtrl) + wxWebViewWebKit *webKitCtrl) { webKitCtrl->m_busy = true; @@ -97,7 +96,7 @@ wxgtk_webkitctrl_error (WebKitWebView *web_view, WebKitWebFrame *web_frame, gchar *uri, gpointer web_error, - wxWebViewGTKWebKit* webKitWindow) + wxWebViewWebKit* webKitWindow) { webKitWindow->m_busy = false; wxWebNavigationError type = wxWEB_NAV_ERR_OTHER; @@ -235,16 +234,46 @@ wxgtk_webkitctrl_error (WebKitWebView *web_view, return FALSE; } +static gboolean +wxgtk_webkitctrl_new_window(WebKitWebView *webView, + WebKitWebFrame *frame, + WebKitNetworkRequest *request, + WebKitWebNavigationAction *navigation_action, + WebKitWebPolicyDecision *policy_decision, + wxWebViewWebKit *webKitCtrl) +{ + const gchar* uri = webkit_network_request_get_uri(request); + + wxString target = webkit_web_frame_get_name (frame); + wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, + webKitCtrl->GetId(), + wxString( uri, wxConvUTF8 ), + target, + true); + + if (webKitCtrl && webKitCtrl->GetEventHandler()) + webKitCtrl->GetEventHandler()->ProcessEvent(thisEvent); + + if (thisEvent.IsVetoed()) + { + webkit_web_policy_decision_ignore(policy_decision); + } + else + { + webkit_web_policy_decision_use(policy_decision); + } + return TRUE; +} } // extern "C" //----------------------------------------------------------------------------- -// wxWebViewGTKWebKit +// wxWebViewWebKit //----------------------------------------------------------------------------- -//IMPLEMENT_DYNAMIC_CLASS(wxWebViewGTKWebKit, wxControl) +//IMPLEMENT_DYNAMIC_CLASS(wxWebViewWebKit, wxControl) -bool wxWebViewGTKWebKit::Create(wxWindow *parent, +bool wxWebViewWebKit::Create(wxWindow *parent, wxWindowID id, const wxString &url, const wxPoint& pos, @@ -258,7 +287,7 @@ bool wxWebViewGTKWebKit::Create(wxWindow *parent, if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) { - wxFAIL_MSG( wxT("wxWebViewGTKWebKit creation failed") ); + wxFAIL_MSG( wxT("wxWebViewWebKit creation failed") ); return false; } @@ -284,9 +313,8 @@ bool wxWebViewGTKWebKit::Create(wxWindow *parent, G_CALLBACK(wxgtk_webkitctrl_error), this); - // this signal can be added if we care about new frames open requests - //g_signal_connect_after(web_view, "new-window-policy-decision-requested", - // G_CALLBACK(...), this); + g_signal_connect_after(web_view, "new-window-policy-decision-requested", + G_CALLBACK(wxgtk_webkitctrl_new_window), this); m_parent->DoAddChild( this ); @@ -300,7 +328,7 @@ bool wxWebViewGTKWebKit::Create(wxWindow *parent, return true; } -bool wxWebViewGTKWebKit::Enable( bool enable ) +bool wxWebViewWebKit::Enable( bool enable ) { if (!wxControl::Enable(enable)) return false; @@ -314,38 +342,38 @@ bool wxWebViewGTKWebKit::Enable( bool enable ) } GdkWindow* -wxWebViewGTKWebKit::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const +wxWebViewWebKit::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const { GdkWindow* window = gtk_widget_get_parent_window(m_widget); return window; } -void wxWebViewGTKWebKit::ZoomIn() +void wxWebViewWebKit::ZoomIn() { webkit_web_view_zoom_in (WEBKIT_WEB_VIEW(web_view)); } -void wxWebViewGTKWebKit::ZoomOut() +void wxWebViewWebKit::ZoomOut() { webkit_web_view_zoom_out (WEBKIT_WEB_VIEW(web_view)); } -void wxWebViewGTKWebKit::SetWebkitZoom(float level) +void wxWebViewWebKit::SetWebkitZoom(float level) { webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW(web_view), level); } -float wxWebViewGTKWebKit::GetWebkitZoom() +float wxWebViewWebKit::GetWebkitZoom() { return webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW(web_view)); } -void wxWebViewGTKWebKit::Stop() +void wxWebViewWebKit::Stop() { webkit_web_view_stop_loading (WEBKIT_WEB_VIEW(web_view)); } -void wxWebViewGTKWebKit::Reload(wxWebViewReloadFlags flags) +void wxWebViewWebKit::Reload(wxWebViewReloadFlags flags) { if (flags & wxWEB_VIEW_RELOAD_NO_CACHE) { @@ -357,36 +385,36 @@ void wxWebViewGTKWebKit::Reload(wxWebViewReloadFlags flags) } } -void wxWebViewGTKWebKit::LoadUrl(const wxString& url) +void wxWebViewWebKit::LoadUrl(const wxString& url) { - webkit_web_view_open(WEBKIT_WEB_VIEW(web_view), wxGTK_CONV(loc)); + webkit_web_view_load_uri(WEBKIT_WEB_VIEW(web_view), wxGTK_CONV(url)); } -void wxWebViewGTKWebKit::GoBack() +void wxWebViewWebKit::GoBack() { webkit_web_view_go_back (WEBKIT_WEB_VIEW(web_view)); } -void wxWebViewGTKWebKit::GoForward() +void wxWebViewWebKit::GoForward() { webkit_web_view_go_forward (WEBKIT_WEB_VIEW(web_view)); } -bool wxWebViewGTKWebKit::CanGoBack() +bool wxWebViewWebKit::CanGoBack() { return webkit_web_view_can_go_back (WEBKIT_WEB_VIEW(web_view)); } -bool wxWebViewGTKWebKit::CanGoForward() +bool wxWebViewWebKit::CanGoForward() { return webkit_web_view_can_go_forward (WEBKIT_WEB_VIEW(web_view)); } -wxString wxWebViewGTKWebKit::GetCurrentURL() +wxString wxWebViewWebKit::GetCurrentURL() { // FIXME: check which encoding the web kit control uses instead of // assuming UTF8 (here and elsewhere too) @@ -395,14 +423,14 @@ wxString wxWebViewGTKWebKit::GetCurrentURL() } -wxString wxWebViewGTKWebKit::GetCurrentTitle() +wxString wxWebViewWebKit::GetCurrentTitle() { return wxString::FromUTF8(webkit_web_view_get_title( WEBKIT_WEB_VIEW(web_view))); } -wxString wxWebViewGTKWebKit::GetPageSource() +wxString wxWebViewWebKit::GetPageSource() { WebKitWebFrame* frame = webkit_web_view_get_main_frame( WEBKIT_WEB_VIEW(web_view)); @@ -415,7 +443,7 @@ wxString wxWebViewGTKWebKit::GetPageSource() } -wxWebViewZoom wxWebViewGTKWebKit::GetZoom() +wxWebViewZoom wxWebViewWebKit::GetZoom() { float zoom = GetWebkitZoom(); @@ -447,7 +475,7 @@ wxWebViewZoom wxWebViewGTKWebKit::GetZoom() } -void wxWebViewGTKWebKit::SetZoom(wxWebViewZoom zoom) +void wxWebViewWebKit::SetZoom(wxWebViewZoom zoom) { // arbitrary way to map our common zoom enum to float zoom switch (zoom) @@ -477,14 +505,14 @@ void wxWebViewGTKWebKit::SetZoom(wxWebViewZoom zoom) } } -void wxWebViewGTKWebKit::SetZoomType(wxWebViewZoomType type) +void wxWebViewWebKit::SetZoomType(wxWebViewZoomType type) { webkit_web_view_set_full_content_zoom(WEBKIT_WEB_VIEW(web_view), (type == wxWEB_VIEW_ZOOM_TYPE_LAYOUT ? TRUE : FALSE)); } -wxWebViewZoomType wxWebViewGTKWebKit::GetZoomType() const +wxWebViewZoomType wxWebViewWebKit::GetZoomType() const { gboolean fczoom = webkit_web_view_get_full_content_zoom( WEBKIT_WEB_VIEW(web_view)); @@ -493,13 +521,13 @@ wxWebViewZoomType wxWebViewGTKWebKit::GetZoomType() const else return wxWEB_VIEW_ZOOM_TYPE_TEXT; } -bool wxWebViewGTKWebKit::CanSetZoomType(wxWebViewZoomType) const +bool wxWebViewWebKit::CanSetZoomType(wxWebViewZoomType) const { // this port supports all zoom types return true; } -void wxWebViewGTKWebKit::SetPage(const wxString& html, const wxString& baseUri) +void wxWebViewWebKit::SetPage(const wxString& html, const wxString& baseUri) { webkit_web_view_load_string (WEBKIT_WEB_VIEW(web_view), html.mb_str(wxConvUTF8), @@ -508,7 +536,7 @@ void wxWebViewGTKWebKit::SetPage(const wxString& html, const wxString& baseUri) baseUri.mb_str(wxConvUTF8)); } -void wxWebViewGTKWebKit::Print() +void wxWebViewWebKit::Print() { WebKitWebFrame* frame = webkit_web_view_get_main_frame( WEBKIT_WEB_VIEW(web_view)); @@ -523,7 +551,7 @@ void wxWebViewGTKWebKit::Print() } -bool wxWebViewGTKWebKit::IsBusy() +bool wxWebViewWebKit::IsBusy() { return m_busy; @@ -551,7 +579,7 @@ bool wxWebViewGTKWebKit::IsBusy() // static wxVisualAttributes -wxWebViewGTKWebKit::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) +wxWebViewWebKit::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { return GetDefaultAttributesFromGTKWidget(webkit_web_view_new); }