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",
signature.asc
Description: This is a digitally signed message part