Add temporary patch for webkit2 port in rawhide, re-enable webview subpackage

epel8
Scott Talbert 8 years ago
parent 8d3cddc5cb
commit 37c4987152

@ -0,0 +1,928 @@
From 7ca24831df9b0076ff000555da57d2e3db040aa4 Mon Sep 17 00:00:00 2001
From: Scott Talbert <swt@techie.net>
Date: Sat, 4 Mar 2017 21:09:02 -0500
Subject: [PATCH] WIP patch to convert webview to webkit2gtk
This is a temporary patch for Fedora to switch to webkit2gtk for now. This is
not the final implementation.
---
configure.in | 2 +-
include/wx/gtk/webview_webkit.h | 12 +-
src/gtk/webview_webkit.cpp | 435 +++++++++++++++++++++++-----------------
3 files changed, 263 insertions(+), 186 deletions(-)
diff --git a/configure.in b/configure.in
index c88523a..6925887 100644
--- a/configure.in
+++ b/configure.in
@@ -7244,7 +7244,7 @@ if test "$wxUSE_WEBVIEW" = "yes"; then
if test "$wxUSE_GTK" = 1; then
webkitgtk=webkit-1.0
if test "$WXGTK3" = 1; then
- webkitgtk=webkitgtk-3.0
+ webkitgtk=webkit2gtk-4.0
fi
PKG_CHECK_MODULES([WEBKIT],
[$webkitgtk >= 1.3.1],
diff --git a/include/wx/gtk/webview_webkit.h b/include/wx/gtk/webview_webkit.h
index e1a01bf..e2c9f33 100644
--- a/include/wx/gtk/webview_webkit.h
+++ b/include/wx/gtk/webview_webkit.h
@@ -134,6 +134,12 @@ public:
//create-web-view signal and so we need to send a new window event
bool m_creating;
+ //variables used for Find()
+ int m_findFlags;
+ wxString m_findText;
+ int m_findPosition;
+ int m_findCount;
+
protected:
virtual void DoSetPage(const wxString& html, const wxString& baseUrl);
@@ -157,12 +163,6 @@ private:
wxVector<wxSharedPtr<wxWebViewHandler> > m_handlerList;
- //variables used for Find()
- int m_findFlags;
- wxString m_findText;
- int m_findPosition;
- int m_findCount;
-
wxDECLARE_DYNAMIC_CLASS(wxWebViewWebKit);
};
diff --git a/src/gtk/webview_webkit.cpp b/src/gtk/webview_webkit.cpp
index e592331..315949d 100644
--- a/src/gtk/webview_webkit.cpp
+++ b/src/gtk/webview_webkit.cpp
@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
-// Name: src/gtk/webview_webkit.cpp
+// Name: src/gtk/webview_webkit2.cpp
// Purpose: GTK WebKit backend for web view component
// Author: Marianne Gagnon, Robert Roebling
// Copyright: (c) 2010 Marianne Gagnon, 1998 Robert Roebling
@@ -18,7 +18,7 @@
#include "wx/filesys.h"
#include "wx/base64.h"
#include "wx/log.h"
-#include <webkit/webkit.h>
+#include <webkit2/webkit2.h>
// ----------------------------------------------------------------------------
// GTK callbacks
@@ -28,36 +28,16 @@ extern "C"
{
static void
-wxgtk_webview_webkit_load_status(GtkWidget* widget,
- GParamSpec*,
- wxWebViewWebKit *webKitCtrl)
+wxgtk_webview_webkit_load_changed(GtkWidget *,
+ WebKitLoadEvent load_event,
+ wxWebViewWebKit *webKitCtrl)
{
wxString url = webKitCtrl->GetCurrentURL();
- WebKitLoadStatus status;
- g_object_get(G_OBJECT(widget), "load-status", &status, NULL);
-
wxString target; // TODO: get target (if possible)
- if (status == WEBKIT_LOAD_FINISHED)
+ if (load_event == WEBKIT_LOAD_FINISHED)
{
- WebKitWebBackForwardList* hist = webkit_web_view_get_back_forward_list(WEBKIT_WEB_VIEW(widget));
- WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_current_item(hist);
- //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(!item || (WEBKIT_IS_WEB_HISTORY_ITEM(item) &&
- webkit_web_history_item_get_uri(item) != url))
- {
- WebKitWebHistoryItem*
- newitem = webkit_web_history_item_new_with_data
- (
- url.utf8_str(),
- webKitCtrl->GetCurrentTitle().utf8_str()
- );
- webkit_web_back_forward_list_add_item(hist, newitem);
- }
-
webKitCtrl->m_busy = false;
wxWebViewEvent event(wxEVT_WEBVIEW_LOADED,
webKitCtrl->GetId(),
@@ -66,7 +46,7 @@ wxgtk_webview_webkit_load_status(GtkWidget* widget,
if (webKitCtrl && webKitCtrl->GetEventHandler())
webKitCtrl->GetEventHandler()->ProcessEvent(event);
}
- else if (status == WEBKIT_LOAD_COMMITTED)
+ else if (load_event == WEBKIT_LOAD_COMMITTED)
{
webKitCtrl->m_busy = true;
wxWebViewEvent event(wxEVT_WEBVIEW_NAVIGATED,
@@ -79,15 +59,15 @@ wxgtk_webview_webkit_load_status(GtkWidget* widget,
}
static gboolean
-wxgtk_webview_webkit_navigation(WebKitWebView *,
- WebKitWebFrame *frame,
- WebKitNetworkRequest *request,
- WebKitWebNavigationAction *,
- WebKitWebPolicyDecision *policy_decision,
+wxgtk_webview_webkit_navigation(WebKitWebView *web_view,
+ WebKitPolicyDecision *decision,
wxWebViewWebKit *webKitCtrl)
{
- const gchar* uri = webkit_network_request_get_uri(request);
- wxString target = webkit_web_frame_get_name (frame);
+ WebKitNavigationPolicyDecision* navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION(decision);
+ WebKitNavigationAction* action = webkit_navigation_policy_decision_get_navigation_action(navigation_decision);
+ WebKitURIRequest* request = webkit_navigation_action_get_request(action);
+ const gchar* uri = webkit_uri_request_get_uri(request);
+ wxString target = webkit_navigation_policy_decision_get_frame_name(navigation_decision);
//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
@@ -102,7 +82,7 @@ wxgtk_webview_webkit_navigation(WebKitWebView *,
if(webKitCtrl && webKitCtrl->GetEventHandler())
webKitCtrl->GetEventHandler()->ProcessEvent(event);
- webkit_web_policy_decision_ignore(policy_decision);
+ webkit_policy_decision_ignore(decision);
return TRUE;
}
@@ -111,8 +91,8 @@ wxgtk_webview_webkit_navigation(WebKitWebView *,
webKitCtrl->m_guard = false;
//We set this to make sure that we don't try to load the page again from
//the resource request callback
- webKitCtrl->m_vfsurl = webkit_network_request_get_uri(request);
- webkit_web_policy_decision_use(policy_decision);
+ webKitCtrl->m_vfsurl = webkit_web_view_get_uri(web_view);
+ webkit_policy_decision_use(decision);
return FALSE;
}
@@ -129,17 +109,17 @@ wxgtk_webview_webkit_navigation(WebKitWebView *,
if (!event.IsAllowed())
{
webKitCtrl->m_busy = false;
- webkit_web_policy_decision_ignore(policy_decision);
+ webkit_policy_decision_ignore(decision);
return TRUE;
}
else
{
wxString wxuri = uri;
wxSharedPtr<wxWebViewHandler> handler;
- wxVector<wxSharedPtr<wxWebViewHandler> > hanlders = webKitCtrl->GetHandlers();
+ wxVector<wxSharedPtr<wxWebViewHandler> > handlers = webKitCtrl->GetHandlers();
//We are not vetoed so see if we match one of the additional handlers
- for(wxVector<wxSharedPtr<wxWebViewHandler> >::iterator it = hanlders.begin();
- it != hanlders.end(); ++it)
+ for(wxVector<wxSharedPtr<wxWebViewHandler> >::iterator it = handlers.begin();
+ it != handlers.end(); ++it)
{
if(wxuri.substr(0, (*it)->GetName().length()) == (*it)->GetName())
{
@@ -157,7 +137,7 @@ wxgtk_webview_webkit_navigation(WebKitWebView *,
webKitCtrl->SetPage(*file->GetStream(), wxuri);
}
//We need to throw some sort of error here if file is NULL
- webkit_web_policy_decision_ignore(policy_decision);
+ webkit_policy_decision_ignore(decision);
return TRUE;
}
return FALSE;
@@ -165,16 +145,15 @@ wxgtk_webview_webkit_navigation(WebKitWebView *,
}
static gboolean
-wxgtk_webview_webkit_error(WebKitWebView*,
- WebKitWebFrame*,
- gchar *uri,
- gpointer web_error,
- wxWebViewWebKit* webKitWindow)
+wxgtk_webview_webkit_load_failed(WebKitWebView *,
+ WebKitLoadEvent,
+ gchar *uri,
+ GError *error,
+ wxWebViewWebKit* webKitWindow)
{
webKitWindow->m_busy = false;
wxWebViewNavigationError type = wxWEBVIEW_NAV_ERR_OTHER;
- GError* error = (GError*)web_error;
wxString description(error->message, wxConvUTF8);
if (strcmp(g_quark_to_string(error->domain), "soup_http_error_quark") == 0)
@@ -306,16 +285,15 @@ wxgtk_webview_webkit_error(WebKitWebView*,
}
static gboolean
-wxgtk_webview_webkit_new_window(WebKitWebView*,
- WebKitWebFrame *frame,
- WebKitNetworkRequest *request,
- WebKitWebNavigationAction*,
- WebKitWebPolicyDecision *policy_decision,
+wxgtk_webview_webkit_new_window(WebKitPolicyDecision *decision,
wxWebViewWebKit *webKitCtrl)
{
- const gchar* uri = webkit_network_request_get_uri(request);
+ WebKitNavigationPolicyDecision* navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION(decision);
+ WebKitNavigationAction* action = webkit_navigation_policy_decision_get_navigation_action(navigation_decision);
+ WebKitURIRequest* request = webkit_navigation_action_get_request(action);
+ const gchar* uri = webkit_uri_request_get_uri(request);
- wxString target = webkit_web_frame_get_name (frame);
+ wxString target = webkit_navigation_policy_decision_get_frame_name(navigation_decision);
wxWebViewEvent event(wxEVT_WEBVIEW_NEWWINDOW,
webKitCtrl->GetId(),
wxString( uri, wxConvUTF8 ),
@@ -325,16 +303,35 @@ wxgtk_webview_webkit_new_window(WebKitWebView*,
webKitCtrl->GetEventHandler()->ProcessEvent(event);
//We always want the user to handle this themselves
- webkit_web_policy_decision_ignore(policy_decision);
+ webkit_policy_decision_ignore(decision);
return TRUE;
}
+static gboolean
+wxgtk_webview_webkit_decide_policy(WebKitWebView *web_view,
+ WebKitPolicyDecision *decision,
+ WebKitPolicyDecisionType type,
+ wxWebViewWebKit *webKitCtrl)
+{
+ switch (type)
+ {
+ case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION:
+ return wxgtk_webview_webkit_navigation(web_view, decision, webKitCtrl);
+ case WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION:
+ return wxgtk_webview_webkit_new_window(decision, webKitCtrl);
+ default:
+ return FALSE;
+ }
+}
+
static void
-wxgtk_webview_webkit_title_changed(WebKitWebView*,
- WebKitWebFrame*,
- gchar *title,
+wxgtk_webview_webkit_title_changed(GtkWidget* widget,
+ GParamSpec *,
wxWebViewWebKit *webKitCtrl)
{
+ gchar *title;
+ g_object_get(G_OBJECT(widget), "title", &title, NULL);
+
wxWebViewEvent event(wxEVT_WEBVIEW_TITLE_CHANGED,
webKitCtrl->GetId(),
webKitCtrl->GetCurrentURL(),
@@ -344,24 +341,23 @@ wxgtk_webview_webkit_title_changed(WebKitWebView*,
if (webKitCtrl && webKitCtrl->GetEventHandler())
webKitCtrl->GetEventHandler()->ProcessEvent(event);
+ g_free(title);
}
static void
wxgtk_webview_webkit_resource_req(WebKitWebView *,
- WebKitWebFrame *,
WebKitWebResource *,
- WebKitNetworkRequest *request,
- WebKitNetworkResponse *,
+ WebKitURIRequest *request,
wxWebViewWebKit *webKitCtrl)
{
- wxString uri = webkit_network_request_get_uri(request);
+ wxString uri = webkit_uri_request_get_uri(request);
wxSharedPtr<wxWebViewHandler> handler;
- wxVector<wxSharedPtr<wxWebViewHandler> > hanlders = webKitCtrl->GetHandlers();
+ wxVector<wxSharedPtr<wxWebViewHandler> > handlers = webKitCtrl->GetHandlers();
//We are not vetoed so see if we match one of the additional handlers
- for(wxVector<wxSharedPtr<wxWebViewHandler> >::iterator it = hanlders.begin();
- it != hanlders.end(); ++it)
+ for(wxVector<wxSharedPtr<wxWebViewHandler> >::iterator it = handlers.begin();
+ it != handlers.end(); ++it)
{
if(uri.substr(0, (*it)->GetName().length()) == (*it)->GetName())
{
@@ -389,19 +385,17 @@ wxgtk_webview_webkit_resource_req(WebKitWebView *,
wxString mime = file->GetMimeType();
wxString path = "data:" + mime + ";base64," + data;
//Then we can redirect the call
- webkit_network_request_set_uri(request, path.utf8_str());
+ webkit_uri_request_set_uri(request, path.utf8_str());
}
}
}
-#if WEBKIT_CHECK_VERSION(1, 10, 0)
-
static gboolean
wxgtk_webview_webkit_context_menu(WebKitWebView *,
- GtkWidget *,
+ WebKitContextMenu *,
+ GdkEvent *,
WebKitHitTestResult *,
- gboolean,
wxWebViewWebKit *webKitCtrl)
{
if(webKitCtrl->IsContextMenuEnabled())
@@ -410,11 +404,9 @@ wxgtk_webview_webkit_context_menu(WebKitWebView *,
return TRUE;
}
-#endif
-
static WebKitWebView*
wxgtk_webview_webkit_create_webview(WebKitWebView *web_view,
- WebKitWebFrame*,
+ WebKitNavigationAction *,
wxWebViewWebKit *webKitCtrl)
{
//As we do not know the uri being loaded at this point allow the load to
@@ -423,6 +415,30 @@ wxgtk_webview_webkit_create_webview(WebKitWebView *web_view,
return web_view;
}
+static void
+wxgtk_webview_webkit_counted_matches(WebKitFindController *,
+ guint match_count,
+ wxWebViewWebKit *webKitCtrl)
+{
+ std::cerr << "BLAH counted_matches: " << match_count << std::endl;
+ webKitCtrl->m_findCount = match_count;
+}
+
+static void
+wxgtk_webview_webkit_failed_to_find_text(WebKitFindController *,
+ wxWebViewWebKit *)
+{
+ std::cerr << "BLAH failed_to_find_text" << std::endl;
+}
+
+static void
+wxgtk_webview_webkit_found_text(WebKitFindController *,
+ guint match_count,
+ wxWebViewWebKit *)
+{
+ std::cerr << "BLAH found_text: " << match_count << std::endl;
+}
+
} // extern "C"
//-----------------------------------------------------------------------------
@@ -464,30 +480,33 @@ bool wxWebViewWebKit::Create(wxWindow *parent,
GTKCreateScrolledWindowWith(GTK_WIDGET(m_web_view));
g_object_ref(m_widget);
- g_signal_connect_after(m_web_view, "navigation-policy-decision-requested",
- G_CALLBACK(wxgtk_webview_webkit_navigation),
- this);
- g_signal_connect_after(m_web_view, "load-error",
- G_CALLBACK(wxgtk_webview_webkit_error),
+ g_signal_connect_after(m_web_view, "decide-policy",
+ G_CALLBACK(wxgtk_webview_webkit_decide_policy),
this);
- g_signal_connect_after(m_web_view, "new-window-policy-decision-requested",
- G_CALLBACK(wxgtk_webview_webkit_new_window), this);
+ g_signal_connect_after(m_web_view, "load-failed",
+ G_CALLBACK(wxgtk_webview_webkit_load_failed), this);
- g_signal_connect_after(m_web_view, "title-changed",
+ g_signal_connect_after(m_web_view, "notify::title",
G_CALLBACK(wxgtk_webview_webkit_title_changed), this);
- g_signal_connect_after(m_web_view, "resource-request-starting",
+ g_signal_connect_after(m_web_view, "resource-load-started",
G_CALLBACK(wxgtk_webview_webkit_resource_req), this);
-
-#if WEBKIT_CHECK_VERSION(1, 10, 0)
- g_signal_connect_after(m_web_view, "context-menu",
+
+ 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_signal_connect_after(m_web_view, "create",
G_CALLBACK(wxgtk_webview_webkit_create_webview), this);
+ WebKitFindController* findctrl = webkit_web_view_get_find_controller(m_web_view);
+ g_signal_connect_after(findctrl, "counted-matches",
+ G_CALLBACK(wxgtk_webview_webkit_counted_matches), this);
+ g_signal_connect_after(findctrl, "failed-to-find-text",
+ G_CALLBACK(wxgtk_webview_webkit_failed_to_find_text), this);
+ g_signal_connect_after(findctrl, "found-text",
+ G_CALLBACK(wxgtk_webview_webkit_found_text), this);
+
m_parent->DoAddChild( this );
PostCreation(size);
@@ -495,14 +514,9 @@ bool wxWebViewWebKit::Create(wxWindow *parent,
/* Open a webpage */
webkit_web_view_load_uri(m_web_view, url.utf8_str());
- //Get the initial history limit so we can enable and disable it later
- WebKitWebBackForwardList* history;
- history = webkit_web_view_get_back_forward_list(m_web_view);
- m_historyLimit = webkit_web_back_forward_list_get_limit(history);
-
// last to avoid getting signal too early
- g_signal_connect_after(m_web_view, "notify::load-status",
- G_CALLBACK(wxgtk_webview_webkit_load_status),
+ g_signal_connect_after(m_web_view, "load-changed",
+ G_CALLBACK(wxgtk_webview_webkit_load_changed),
this);
return true;
@@ -536,12 +550,12 @@ wxWebViewWebKit::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const
void wxWebViewWebKit::ZoomIn()
{
- webkit_web_view_zoom_in(m_web_view);
+ SetWebkitZoom(GetWebkitZoom() + 0.1);
}
void wxWebViewWebKit::ZoomOut()
{
- webkit_web_view_zoom_out(m_web_view);
+ SetWebkitZoom(GetWebkitZoom() - 0.1);
}
void wxWebViewWebKit::SetWebkitZoom(float level)
@@ -601,39 +615,28 @@ bool wxWebViewWebKit::CanGoForward() const
void wxWebViewWebKit::ClearHistory()
{
- WebKitWebBackForwardList* history;
- history = webkit_web_view_get_back_forward_list(m_web_view);
- webkit_web_back_forward_list_clear(history);
+ // In WebKit2GTK+, the BackForwardList can't be cleared so do nothing.
}
-void wxWebViewWebKit::EnableHistory(bool enable)
+void wxWebViewWebKit::EnableHistory(bool)
{
- WebKitWebBackForwardList* history;
- history = webkit_web_view_get_back_forward_list(m_web_view);
- if(enable)
- {
- webkit_web_back_forward_list_set_limit(history, m_historyLimit);
- }
- else
- {
- webkit_web_back_forward_list_set_limit(history, 0);
- }
+ // In WebKit2GTK+, history can't be disabled so do nothing here.
}
wxVector<wxSharedPtr<wxWebViewHistoryItem> > wxWebViewWebKit::GetBackwardHistory()
{
wxVector<wxSharedPtr<wxWebViewHistoryItem> > backhist;
- WebKitWebBackForwardList* history;
+ WebKitBackForwardList* history;
history = webkit_web_view_get_back_forward_list(m_web_view);
- GList* list = webkit_web_back_forward_list_get_back_list_with_limit(history,
- m_historyLimit);
+ GList* list = webkit_back_forward_list_get_back_list_with_limit(history,
+ m_historyLimit);
//We need to iterate in reverse to get the order we desire
for(int i = g_list_length(list) - 1; i >= 0 ; i--)
{
- WebKitWebHistoryItem* gtkitem = (WebKitWebHistoryItem*)g_list_nth_data(list, i);
+ WebKitBackForwardListItem* gtkitem = (WebKitBackForwardListItem*)g_list_nth_data(list, i);
wxWebViewHistoryItem* wxitem = new wxWebViewHistoryItem(
- webkit_web_history_item_get_uri(gtkitem),
- webkit_web_history_item_get_title(gtkitem));
+ webkit_back_forward_list_item_get_uri(gtkitem),
+ webkit_back_forward_list_item_get_title(gtkitem));
wxitem->m_histItem = gtkitem;
wxSharedPtr<wxWebViewHistoryItem> item(wxitem);
backhist.push_back(item);
@@ -644,16 +647,16 @@ wxVector<wxSharedPtr<wxWebViewHistoryItem> > wxWebViewWebKit::GetBackwardHistory
wxVector<wxSharedPtr<wxWebViewHistoryItem> > wxWebViewWebKit::GetForwardHistory()
{
wxVector<wxSharedPtr<wxWebViewHistoryItem> > forwardhist;
- WebKitWebBackForwardList* history;
+ WebKitBackForwardList* history;
history = webkit_web_view_get_back_forward_list(m_web_view);
- GList* list = webkit_web_back_forward_list_get_forward_list_with_limit(history,
- m_historyLimit);
+ GList* list = webkit_back_forward_list_get_forward_list_with_limit(history,
+ m_historyLimit);
for(guint i = 0; i < g_list_length(list); i++)
{
- WebKitWebHistoryItem* gtkitem = (WebKitWebHistoryItem*)g_list_nth_data(list, i);
+ WebKitBackForwardListItem* gtkitem = (WebKitBackForwardListItem*)g_list_nth_data(list, i);
wxWebViewHistoryItem* wxitem = new wxWebViewHistoryItem(
- webkit_web_history_item_get_uri(gtkitem),
- webkit_web_history_item_get_title(gtkitem));
+ webkit_back_forward_list_item_get_uri(gtkitem),
+ webkit_back_forward_list_item_get_title(gtkitem));
wxitem->m_histItem = gtkitem;
wxSharedPtr<wxWebViewHistoryItem> item(wxitem);
forwardhist.push_back(item);
@@ -663,62 +666,72 @@ wxVector<wxSharedPtr<wxWebViewHistoryItem> > wxWebViewWebKit::GetForwardHistory(
void wxWebViewWebKit::LoadHistoryItem(wxSharedPtr<wxWebViewHistoryItem> item)
{
- WebKitWebHistoryItem* gtkitem = (WebKitWebHistoryItem*)item->m_histItem;
+ WebKitBackForwardListItem* gtkitem = (WebKitBackForwardListItem*)item->m_histItem;
if(gtkitem)
{
- webkit_web_view_go_to_back_forward_item(m_web_view,
- WEBKIT_WEB_HISTORY_ITEM(gtkitem));
+ webkit_web_view_go_to_back_forward_list_item(m_web_view,
+ WEBKIT_BACK_FORWARD_LIST_ITEM(gtkitem));
}
}
bool wxWebViewWebKit::CanCut() const
{
- return webkit_web_view_can_cut_clipboard(m_web_view);
+ // Cannot be determined without making an async call, so just return true
+ return true;
}
bool wxWebViewWebKit::CanCopy() const
{
- return webkit_web_view_can_copy_clipboard(m_web_view);
+ // Cannot be determined without making an async call, so just return true
+ return true;
}
bool wxWebViewWebKit::CanPaste() const
{
- return webkit_web_view_can_paste_clipboard(m_web_view);
+ // Cannot be determined without making an async call, so just return true
+ return true;
}
void wxWebViewWebKit::Cut()
{
- webkit_web_view_cut_clipboard(m_web_view);
+ webkit_web_view_execute_editing_command(m_web_view,
+ WEBKIT_EDITING_COMMAND_CUT);
}
void wxWebViewWebKit::Copy()
{
- webkit_web_view_copy_clipboard(m_web_view);
+ webkit_web_view_execute_editing_command(m_web_view,
+ WEBKIT_EDITING_COMMAND_COPY);
}
void wxWebViewWebKit::Paste()
{
- webkit_web_view_paste_clipboard(m_web_view);
+ webkit_web_view_execute_editing_command(m_web_view,
+ WEBKIT_EDITING_COMMAND_PASTE);
}
bool wxWebViewWebKit::CanUndo() const
{
- return webkit_web_view_can_undo(m_web_view);
+ // Cannot be determined without making an async call, so just return true
+ return true;
}
bool wxWebViewWebKit::CanRedo() const
{
- return webkit_web_view_can_redo(m_web_view);
+ // Cannot be determined without making an async call, so just return true
+ return true;
}
void wxWebViewWebKit::Undo()
{
- webkit_web_view_undo(m_web_view);
+ webkit_web_view_execute_editing_command(m_web_view,
+ WEBKIT_EDITING_COMMAND_UNDO);
}
void wxWebViewWebKit::Redo()
{
- webkit_web_view_redo(m_web_view);
+ webkit_web_view_execute_editing_command(m_web_view,
+ WEBKIT_EDITING_COMMAND_REDO);
}
wxString wxWebViewWebKit::GetCurrentURL() const
@@ -737,6 +750,7 @@ wxString wxWebViewWebKit::GetCurrentTitle() const
wxString wxWebViewWebKit::GetPageSource() const
{
+/* TODO: webkit_web_resource_get_data() async
WebKitWebFrame* frame = webkit_web_view_get_main_frame(m_web_view);
WebKitWebDataSource* src = webkit_web_frame_get_data_source (frame);
@@ -744,6 +758,8 @@ wxString wxWebViewWebKit::GetPageSource() const
// const gchar*
// webkit_web_data_source_get_encoding(WebKitWebDataSource *data_source);
return wxString(webkit_web_data_source_get_data (src)->str, wxConvUTF8);
+*/
+ return wxString("");
}
@@ -811,17 +827,19 @@ void wxWebViewWebKit::SetZoom(wxWebViewZoom zoom)
void wxWebViewWebKit::SetZoomType(wxWebViewZoomType type)
{
- webkit_web_view_set_full_content_zoom(m_web_view,
- (type == wxWEBVIEW_ZOOM_TYPE_LAYOUT ?
- TRUE : FALSE));
+ WebKitSettings* settings = webkit_web_view_get_settings(m_web_view);
+ webkit_settings_set_zoom_text_only(settings,
+ (type == wxWEBVIEW_ZOOM_TYPE_TEXT ?
+ TRUE : FALSE));
}
wxWebViewZoomType wxWebViewWebKit::GetZoomType() const
{
- gboolean fczoom = webkit_web_view_get_full_content_zoom(m_web_view);
+ WebKitSettings* settings = webkit_web_view_get_settings(m_web_view);
+ gboolean tozoom = webkit_settings_get_zoom_text_only(settings);
- if (fczoom) return wxWEBVIEW_ZOOM_TYPE_LAYOUT;
- else return wxWEBVIEW_ZOOM_TYPE_TEXT;
+ if (tozoom) return wxWEBVIEW_ZOOM_TYPE_TEXT;
+ else return wxWEBVIEW_ZOOM_TYPE_LAYOUT;
}
bool wxWebViewWebKit::CanSetZoomType(wxWebViewZoomType) const
@@ -832,24 +850,16 @@ bool wxWebViewWebKit::CanSetZoomType(wxWebViewZoomType) const
void wxWebViewWebKit::DoSetPage(const wxString& html, const wxString& baseUri)
{
- webkit_web_view_load_string (m_web_view,
- html.mb_str(wxConvUTF8),
- "text/html",
- "UTF-8",
- baseUri.mb_str(wxConvUTF8));
+ webkit_web_view_load_html(m_web_view,
+ html.mb_str(wxConvUTF8),
+ baseUri.mb_str(wxConvUTF8));
}
void wxWebViewWebKit::Print()
{
- WebKitWebFrame* frame = webkit_web_view_get_main_frame(m_web_view);
- webkit_web_frame_print (frame);
-
- // GtkPrintOperationResult webkit_web_frame_print_full
- // (WebKitWebFrame *frame,
- // GtkPrintOperation *operation,
- // GtkPrintOperationAction action,
- // GError **error);
-
+ WebKitPrintOperation* printop = webkit_print_operation_new(m_web_view);
+ webkit_print_operation_run_dialog(printop, NULL);
+ g_object_unref(printop);
}
@@ -886,26 +896,35 @@ void wxWebViewWebKit::SetEditable(bool enable)
bool wxWebViewWebKit::IsEditable() const
{
- return webkit_web_view_get_editable(m_web_view);
+ gboolean editable;
+ g_object_get(m_web_view, "editable", &editable, NULL);
+ return editable;
}
void wxWebViewWebKit::DeleteSelection()
{
+/* TODO
webkit_web_view_delete_selection(m_web_view);
+*/
}
bool wxWebViewWebKit::HasSelection() const
{
+/* TODO
return webkit_web_view_has_selection(m_web_view);
+*/
+ return false;
}
void wxWebViewWebKit::SelectAll()
{
- webkit_web_view_select_all(m_web_view);
+ webkit_web_view_execute_editing_command(m_web_view,
+ WEBKIT_EDITING_COMMAND_SELECT_ALL);
}
wxString wxWebViewWebKit::GetSelectedText() const
{
+/* TODO: what to do about this?
WebKitDOMDocument* doc;
WebKitDOMDOMWindow* win;
WebKitDOMDOMSelection* sel;
@@ -918,10 +937,13 @@ wxString wxWebViewWebKit::GetSelectedText() const
0, NULL);
return wxString(webkit_dom_range_get_text(WEBKIT_DOM_RANGE(range)),
wxConvUTF8);
+*/
+ return wxString("");
}
wxString wxWebViewWebKit::GetSelectedSource() const
{
+/* TODO: what to do?
WebKitDOMDocument* doc;
WebKitDOMDOMWindow* win;
WebKitDOMDOMSelection* sel;
@@ -943,10 +965,13 @@ wxString wxWebViewWebKit::GetSelectedSource() const
return wxString(webkit_dom_html_element_get_inner_html(WEBKIT_DOM_HTML_ELEMENT(html)),
wxConvUTF8);
+*/
+ return wxString("");
}
void wxWebViewWebKit::ClearSelection()
{
+/* TODO: ???
WebKitDOMDocument* doc;
WebKitDOMDOMWindow* win;
WebKitDOMDOMSelection* sel;
@@ -956,10 +981,12 @@ void wxWebViewWebKit::ClearSelection()
sel = webkit_dom_dom_window_get_selection(WEBKIT_DOM_DOM_WINDOW(win));
webkit_dom_dom_selection_remove_all_ranges(WEBKIT_DOM_DOM_SELECTION(sel));
+*/
}
wxString wxWebViewWebKit::GetPageText() const
{
+/* TODO
WebKitDOMDocument* doc;
WebKitDOMHTMLElement* body;
@@ -967,12 +994,17 @@ wxString wxWebViewWebKit::GetPageText() const
body = webkit_dom_document_get_body(WEBKIT_DOM_DOCUMENT(doc));
return wxString(webkit_dom_html_element_get_inner_text(WEBKIT_DOM_HTML_ELEMENT(body)),
wxConvUTF8);
+*/
+ return wxString("");
}
void wxWebViewWebKit::RunScript(const wxString& javascript)
{
- webkit_web_view_execute_script(m_web_view,
- javascript.mb_str(wxConvUTF8));
+ webkit_web_view_run_javascript(m_web_view,
+ javascript.mb_str(wxConvUTF8),
+ NULL,
+ NULL,
+ NULL);
}
void wxWebViewWebKit::RegisterHandler(wxSharedPtr<wxWebViewHandler> handler)
@@ -991,14 +1023,15 @@ void wxWebViewWebKit::EnableContextMenu(bool enable)
long wxWebViewWebKit::Find(const wxString& text, int flags)
{
+ WebKitFindController* findctrl = webkit_web_view_get_find_controller(m_web_view);
bool newSearch = false;
if(text != m_findText ||
(flags & wxWEBVIEW_FIND_MATCH_CASE) != (m_findFlags & wxWEBVIEW_FIND_MATCH_CASE))
{
newSearch = true;
//If it is a new search we need to clear existing highlights
- webkit_web_view_unmark_text_matches(m_web_view);
- webkit_web_view_set_highlight_text_matches(m_web_view, false);
+ //webkit_web_view_unmark_text_matches(m_web_view);
+ //webkit_web_view_set_highlight_text_matches(m_web_view, false);
}
m_findFlags = flags;
@@ -1007,27 +1040,53 @@ long wxWebViewWebKit::Find(const wxString& text, int flags)
//If the search string is empty then we clear any selection and highlight
if(text == "")
{
- webkit_web_view_unmark_text_matches(m_web_view);
- webkit_web_view_set_highlight_text_matches(m_web_view, false);
- ClearSelection();
+ webkit_find_controller_search_finish(findctrl);
return wxNOT_FOUND;
}
bool wrap = false, matchCase = false, forward = true;
+ guint32 options = WEBKIT_FIND_OPTIONS_NONE;
if(flags & wxWEBVIEW_FIND_WRAP)
+ {
wrap = true;
+ options |= WEBKIT_FIND_OPTIONS_WRAP_AROUND;
+ }
if(flags & wxWEBVIEW_FIND_MATCH_CASE)
+ {
matchCase = true;
+ }
+ else
+ {
+ options |= WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE;
+ }
if(flags & wxWEBVIEW_FIND_BACKWARDS)
+ {
forward = false;
+ options |= WEBKIT_FIND_OPTIONS_BACKWARDS;
+ }
if(newSearch)
{
- //Initially we mark the matches to know how many we have
- m_findCount = webkit_web_view_mark_text_matches(m_web_view, wxGTK_CONV(text), matchCase, 0);
+ ////Initially we mark the matches to know how many we have
+ //m_findCount = webkit_web_view_mark_text_matches(m_web_view, wxGTK_CONV(text), matchCase, 0);
//In this case we return early to match IE behaviour
m_findPosition = -1;
- return m_findCount;
+ //return m_findCount;
+ if(flags & wxWEBVIEW_FIND_HIGHLIGHT_RESULT)
+ {
+ webkit_find_controller_search(findctrl,
+ wxGTK_CONV(text),
+ options,
+ G_MAXUINT);
+ }
+ else
+ {
+ webkit_find_controller_count_matches(findctrl,
+ wxGTK_CONV(text),
+ options,
+ G_MAXUINT);
+ }
+ return G_MAXUINT;
}
else
{
@@ -1041,17 +1100,36 @@ long wxWebViewWebKit::Find(const wxString& text, int flags)
m_findPosition -= m_findCount;
}
- //Highlight them if needed
- bool highlight = flags & wxWEBVIEW_FIND_HIGHLIGHT_RESULT ? true : false;
- webkit_web_view_set_highlight_text_matches(m_web_view, highlight);
-
- if(!webkit_web_view_search_text(m_web_view, wxGTK_CONV(text), matchCase, forward, wrap))
+ if(forward)
{
- m_findPosition = -1;
- ClearSelection();
- return wxNOT_FOUND;
+ webkit_find_controller_search_next(findctrl);
+ if(m_findPosition == m_findCount && !wrap)
+ {
+ return wxNOT_FOUND;
+ }
}
- wxLogMessage(wxString::Format("Returning %d", m_findPosition));
+ else
+ {
+ webkit_find_controller_search_previous(findctrl);
+ if(m_findPosition == -1 && !wrap)
+ {
+ return wxNOT_FOUND;
+ }
+ }
+
+ //Highlight them if needed
+ //bool highlight = flags & wxWEBVIEW_FIND_HIGHLIGHT_RESULT ? true : false;
+ //webkit_web_view_set_highlight_text_matches(m_web_view, highlight);
+
+ //if(!webkit_web_view_search_text(m_web_view, wxGTK_CONV(text), matchCase, forward, wrap))
+ //{
+ // m_findPosition = -1;
+ // ClearSelection();
+ // return wxNOT_FOUND;
+ //}
+
+
+
return newSearch ? m_findCount : m_findPosition;
}
@@ -1070,5 +1148,4 @@ wxWebViewWebKit::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
return GetDefaultAttributesFromGTKWidget(webkit_web_view_new());
}
-
#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_WEBKIT
--
2.9.3

@ -20,7 +20,7 @@
Name: %{wxgtkname} Name: %{wxgtkname}
Version: 3.0.3 Version: 3.0.3
Release: 0.5%{?usesnapshot:.git%{shortcommit0}}%{?dist} Release: 0.6%{?usesnapshot:.git%{shortcommit0}}%{?dist}
Summary: GTK port of the wxWidgets GUI library Summary: GTK port of the wxWidgets GUI library
License: wxWidgets License: wxWidgets
Group: System Environment/Libraries Group: System Environment/Libraries
@ -41,12 +41,18 @@ Source10: wx-config
Patch0: %{name}-%{version}-abicheck.patch Patch0: %{name}-%{version}-abicheck.patch
# Switch to use GStreamer 1.0 - patch is from Debian # Switch to use GStreamer 1.0 - patch is from Debian
Patch1: %{name}-%{version}-gst1.0.patch Patch1: %{name}-%{version}-gst1.0.patch
# Temporary patch to port to webkit2gtk
%if 0%{?fedora} > 26
Patch2: %{name}-%{version}-webkit2.patch
%endif
BuildRequires: gtk%{gtkver}-devel BuildRequires: gtk%{gtkver}-devel
#Note webkitgtk (GTK2) does not appear to be supported #Note webkitgtk (GTK2) does not appear to be supported
%if %{gtkver} == 3 %if %{gtkver} == 3
%if 0%{?fedora} < 27 %if 0%{?fedora} < 27
BuildRequires: webkitgtk3-devel BuildRequires: webkitgtk3-devel
%else
BuildRequires: webkitgtk4-devel
%endif %endif
%endif %endif
BuildRequires: zlib-devel BuildRequires: zlib-devel
@ -81,7 +87,7 @@ Summary: Development files for the wxGTK3 library
Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}-gl = %{version}-%{release} Requires: %{name}-gl = %{version}-%{release}
Requires: %{name}-media = %{version}-%{release} Requires: %{name}-media = %{version}-%{release}
%if 0%{?fedora} == 26 %if 0%{?fedora} > 25
Requires: %{name}-webview = %{version}-%{release} Requires: %{name}-webview = %{version}-%{release}
%endif %endif
Requires: %{wxbasename} = %{version}-%{release} Requires: %{wxbasename} = %{version}-%{release}
@ -125,7 +131,7 @@ comprehensive set of helper classes for most common application tasks,
ranging from networking to HTML display and image manipulation. ranging from networking to HTML display and image manipulation.
%if 0%{?fedora} == 26 %if 0%{?fedora} > 25
%package webview %package webview
Summary: WebView add-on for the wxWidgets library Summary: WebView add-on for the wxWidgets library
Group: System Environment/Libraries Group: System Environment/Libraries
@ -280,7 +286,7 @@ popd
%post media -p /sbin/ldconfig %post media -p /sbin/ldconfig
%postun media -p /sbin/ldconfig %postun media -p /sbin/ldconfig
%if 0%{?fedora} == 26 %if 0%{?fedora} > 25
%post webview -p /sbin/ldconfig %post webview -p /sbin/ldconfig
%postun webview -p /sbin/ldconfig %postun webview -p /sbin/ldconfig
%endif %endif
@ -343,7 +349,7 @@ fi
%files media %files media
%{_libdir}/libwx_gtk%{gtkver}u_media-*.so.* %{_libdir}/libwx_gtk%{gtkver}u_media-*.so.*
%if 0%{?fedora} == 26 %if 0%{?fedora} > 25
%files webview %files webview
%{_libdir}/libwx_gtk%{gtkver}u_webview-*.so.* %{_libdir}/libwx_gtk%{gtkver}u_webview-*.so.*
%endif %endif
@ -362,6 +368,9 @@ fi
%doc docs/doxygen/out/xml/* %doc docs/doxygen/out/xml/*
%changelog %changelog
* Sun Mar 05 2017 Scott Talbert <swt@techie.net> - 3.0.3-0.6.gitf90b768
- Add temporary patch for webkit2 port in rawhide, re-enable webview subpackage
* Thu Mar 02 2017 Jeremy Newton <alexjnewt AT hotmail DOT com> - 3.0.3-0.5.gitf90b768 * Thu Mar 02 2017 Jeremy Newton <alexjnewt AT hotmail DOT com> - 3.0.3-0.5.gitf90b768
- Disable webview subpackage in rawhide for now - Disable webview subpackage in rawhide for now

Loading…
Cancel
Save