// Name: src/gtk/webview_webkit.cpp
// Purpose: GTK WebKit backend for web view component
// Author: Marianne Gagnon, Robert Roebling
-// Id: $Id$
// Copyright: (c) 2010 Marianne Gagnon, 1998 Robert Roebling
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
//We have to check if we are actually storing history
//If the item isn't added we add it ourselves, it isn't added otherwise
//with a custom scheme.
- if(WEBKIT_IS_WEB_HISTORY_ITEM(item) && webkit_web_history_item_get_uri(item) != url)
+ if(!item || (WEBKIT_IS_WEB_HISTORY_ITEM(item) &&
+ webkit_web_history_item_get_uri(item) != url))
{
WebKitWebHistoryItem*
newitem = webkit_web_history_item_new_with_data
}
webKitCtrl->m_busy = false;
- wxWebViewEvent event(wxEVT_COMMAND_WEBVIEW_LOADED,
+ wxWebViewEvent event(wxEVT_WEBVIEW_LOADED,
webKitCtrl->GetId(),
url, target);
else if (status == WEBKIT_LOAD_COMMITTED)
{
webKitCtrl->m_busy = true;
- wxWebViewEvent event(wxEVT_COMMAND_WEBVIEW_NAVIGATED,
+ wxWebViewEvent event(wxEVT_WEBVIEW_NAVIGATED,
webKitCtrl->GetId(),
url, target);
WebKitWebPolicyDecision *policy_decision,
wxWebViewWebKit *webKitCtrl)
{
+ const gchar* uri = webkit_network_request_get_uri(request);
+ wxString target = webkit_web_frame_get_name (frame);
+
+ //If m_creating is true then we are the result of a new window
+ //and so we need to send the event and veto the load
+ if(webKitCtrl->m_creating)
+ {
+ webKitCtrl->m_creating = false;
+ wxWebViewEvent event(wxEVT_WEBVIEW_NEWWINDOW,
+ webKitCtrl->GetId(),
+ wxString(uri, wxConvUTF8),
+ target);
+
+ if(webKitCtrl && webKitCtrl->GetEventHandler())
+ webKitCtrl->GetEventHandler()->ProcessEvent(event);
+
+ webkit_web_policy_decision_ignore(policy_decision);
+ return TRUE;
+ }
+
if(webKitCtrl->m_guard)
{
webKitCtrl->m_guard = false;
webKitCtrl->m_busy = true;
- const gchar* uri = webkit_network_request_get_uri(request);
-
- wxString target = webkit_web_frame_get_name (frame);
- wxWebViewEvent event(wxEVT_COMMAND_WEBVIEW_NAVIGATING,
+ wxWebViewEvent event(wxEVT_WEBVIEW_NAVIGATING,
webKitCtrl->GetId(),
wxString( uri, wxConvUTF8 ),
target);
}
*/
- wxWebViewEvent event(wxEVT_COMMAND_WEBVIEW_ERROR,
+ wxWebViewEvent event(wxEVT_WEBVIEW_ERROR,
webKitWindow->GetId(),
uri, "");
event.SetString(description);
const gchar* uri = webkit_network_request_get_uri(request);
wxString target = webkit_web_frame_get_name (frame);
- wxWebViewEvent event(wxEVT_COMMAND_WEBVIEW_NEWWINDOW,
+ wxWebViewEvent event(wxEVT_WEBVIEW_NEWWINDOW,
webKitCtrl->GetId(),
wxString( uri, wxConvUTF8 ),
target);
gchar *title,
wxWebViewWebKit *webKitCtrl)
{
- wxWebViewEvent event(wxEVT_COMMAND_WEBVIEW_TITLE_CHANGED,
+ wxWebViewEvent event(wxEVT_WEBVIEW_TITLE_CHANGED,
webKitCtrl->GetId(),
webKitCtrl->GetCurrentURL(),
"");
#endif
+static WebKitWebView*
+wxgtk_webview_webkit_create_webview(WebKitWebView *web_view,
+ WebKitWebFrame *frame,
+ wxWebViewWebKit *webKitCtrl)
+{
+ //As we do not know the uri being loaded at this point allow the load to
+ //continue and catch it in navigation-policy-decision-requested
+ webKitCtrl->m_creating = true;
+ return web_view;
+}
+
} // extern "C"
//-----------------------------------------------------------------------------
{
m_busy = false;
m_guard = false;
+ m_creating = false;
FindClear();
// We currently unconditionally impose scrolling in both directions as it's
g_signal_connect_after(m_web_view, "context-menu",
G_CALLBACK(wxgtk_webview_webkit_context_menu), this);
#endif
+
+ g_signal_connect_after(m_web_view, "create-web-view",
+ G_CALLBACK(wxgtk_webview_webkit_create_webview), this);
m_parent->DoAddChild( this );