Hey,

Here's a patch for this issue! I noticed, though, that this
functionality (search the web) doesn't seem to be available, and the
function doesn't seem to be used anywhere, so might be a candidate for
removal, even? In any case, this replaces the code that uses private API
by supported, public API, and bumps the dependency in configure.ac.

Cheers,

-- 
Gustavo Noronha Silva <k...@debian.org>
Debian
Description: removes usage of a private API call by using supported DOM functions
 Rewrite the code to get selected text to use the DOM APIs.
Author: Gustavo Noronha Silva <k...@debian.org>

--- claws-mail-extra-plugins-3.7.10.orig/fancy-0.9.14/configure.ac
+++ claws-mail-extra-plugins-3.7.10/fancy-0.9.14/configure.ac
@@ -100,7 +100,7 @@ dnl Check for GTK+
 PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.6)
 
 dnl Check for WebKit
-PKG_CHECK_MODULES(WEBKIT, webkit-1.0, ,
+PKG_CHECK_MODULES(WEBKIT, webkit-1.0 >= 1.4.3, ,
           AC_MSG_ERROR([Can't find GTK+ WebKit library.]))
 AC_SUBST(WEBKIT_LIBS)
 AC_SUBST(WEBKIT_CFLAGS)
--- claws-mail-extra-plugins-3.7.10.orig/fancy-0.9.14/src/fancy_viewer.c	2011-10-26 11:21:45.569118784 -0200
+++ claws-mail-extra-plugins-3.7.10/fancy-0.9.14/src/fancy_viewer.c	2011-10-26 11:33:09.700996789 -0200
@@ -83,8 +83,6 @@
 static void download_file_cb(GtkWidget *widget, FancyViewer *viewer);
 #endif
 
-/*FIXME substitute webkitwebsettings.cpp functions with their API when available */
-gchar* webkit_web_view_get_selected_text(WebKitWebView* webView);
 /*------*/
 static GtkWidget *fancy_get_widget(MimeViewer *_viewer)
 {
@@ -289,17 +287,40 @@
     
 }
 #endif
-static gchar *fancy_get_selection (MimeViewer *_viewer)
+static gchar *fancy_viewer_get_selection(FancyViewer *viewer)
 {
-	debug_print("fancy_get_selection\n");
-	FancyViewer *viewer = (FancyViewer *) _viewer;
-	gchar *sel = webkit_web_view_get_selected_text(viewer->view);
-	if (!viewer->view || strlen(sel) == 0) {
+	debug_print("fancy_viewer_get_selection\n");
+	if (!viewer->view) {
+		return NULL;
+	}
+
+	WebKitDOMDocument *doc = webkit_web_view_get_dom_document(viewer->view);
+	WebKitDOMDOMWindow *window = webkit_dom_document_get_default_view(doc);
+	WebKitDOMDOMSelection *selection = webkit_dom_dom_window_get_selection(window);
+	if (!selection) {
+		return NULL;
+	}
+
+	WebKitDOMRange *range = webkit_dom_dom_selection_get_range_at(selection, 0, NULL);
+	if (!range) {
+		return NULL;
+	}
+
+	gchar *sel = webkit_dom_range_get_text(range);
+	if (strlen(sel) == 0) {
 		g_free(sel);
 		return NULL;
 	}
-	return sel; 
+	return sel;
 }
+
+static gchar *fancy_get_selection(MimeViewer *_viewer)
+{
+	debug_print("fancy_get_selection\n");
+	FancyViewer *viewer = (FancyViewer *) _viewer;
+	return fancy_viewer_get_selection(viewer);
+}
+
 static void fancy_clear_viewer(MimeViewer *_viewer)
 {
 	FancyViewer *viewer = (FancyViewer *) _viewer;
@@ -686,7 +707,7 @@
 	debug_print("Clicked on Search on Web\n");
 	if (webkit_web_view_has_selection(viewer->view)) {
 		gchar *search;
-		gchar *tmp = webkit_web_view_get_selected_text(viewer->view);
+		gchar *tmp = fancy_viewer_get_selection(viewer);
 		search = g_strconcat(GOOGLE_SEARCH, tmp, NULL);
 		webkit_web_view_open(viewer->view, search);
 		g_free(search);
@@ -933,20 +954,7 @@
 	}
 	return FALSE;
 }
-#if !WEBKIT_CHECK_VERSION (1,1,12)
-static gboolean release_button_cb (WebKitWebView *view, GdkEvent *ev, 
-								   gpointer data)
-{
-	/* Make the copy/paste works as usual  */
-	if (webkit_web_view_can_copy_clipboard(view)) {
-		GtkClipboard *wv_clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
-		const gchar *sel_text;
-		sel_text = (const gchar*)webkit_web_view_get_selected_text(view);
-		gtk_clipboard_set_text(wv_clipboard, sel_text, -1);
-	}
-	return FALSE;
-}
-#endif
+
 static void zoom_100_cb(GtkWidget *widget, GdkEvent *ev, FancyViewer *viewer)
 {
 	gtk_widget_grab_focus(widget);
@@ -1091,16 +1099,10 @@
 					 G_CALLBACK(load_progress_cb), viewer);
 	g_signal_connect(G_OBJECT(viewer->view), "navigation-requested",
 					 G_CALLBACK(navigation_requested_cb), viewer);
-#if WEBKIT_CHECK_VERSION (1,1,14)
 	g_signal_connect(G_OBJECT(viewer->view), "resource-request-starting",
 			G_CALLBACK(resource_request_starting_cb), viewer);
-#endif
 	g_signal_connect(G_OBJECT(viewer->view), "populate-popup",
 					 G_CALLBACK(populate_popup_cb), viewer);
-#if !WEBKIT_CHECK_VERSION (1,1,12)
-	g_signal_connect(G_OBJECT(viewer->view), "button-release-event",
-					 G_CALLBACK(release_button_cb), viewer);
-#endif
 	g_signal_connect(G_OBJECT(viewer->ev_zoom_100), "button-press-event",
 					 G_CALLBACK(zoom_100_cb), (gpointer*)viewer);
 	g_signal_connect(G_OBJECT(viewer->ev_zoom_in), "button-press-event",

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to