Fancy: fix left-click on links not opening in browser.
[claws.git] / src / plugins / fancy / fancy_viewer.c
index a1b434fbb0bafaf1213299eebb4e0df932847996..3792e846bbc767a298e03fc1e5c27cf9095a5c3d 100644 (file)
@@ -28,7 +28,7 @@
 #include <fancy_viewer.h>
 #include <fancy_prefs.h>
 #include <alertpanel.h>
-#include <claws_io.h>
+#include <file-utils.h>
 
 #include <printing.h>
 #include <webkit/webkithittestresult.h>
@@ -645,11 +645,11 @@ static size_t download_file_curl_write_cb(void *buffer, size_t size,
 {
        FancyViewer *viewer = (FancyViewer *)data;
        if (!viewer->stream) {
-               viewer->stream = fopen(viewer->curlfile, "wb");
+               viewer->stream = claws_fopen(viewer->curlfile, "wb");
                if (!viewer->stream)
                        return -1;
        }
-       return fwrite(buffer, size, nmemb, viewer->stream);
+       return claws_fwrite(buffer, size, nmemb, viewer->stream);
 }
 static void *download_file_curl (void *data)
 {
@@ -671,7 +671,7 @@ static void *download_file_curl (void *data)
                if (CURLE_OK != res)
                        alertpanel_error(_("An error occurred: %d\n"), res);
                if (viewer->stream)
-                       safe_fclose(viewer->stream);
+                       claws_safe_fclose(viewer->stream);
                curl_global_cleanup();
        }
 #ifdef USE_PTHREAD
@@ -902,17 +902,30 @@ static gboolean press_button_cb (WebKitWebView *view, GdkEvent *ev,
                FancyViewer *viewer)
 {
        gint type = 0;
+       gchar *link = NULL;
+
        WebKitHitTestResult *result =
                webkit_web_view_get_hit_test_result(view, (GdkEventButton *)ev);
 
        g_object_get(G_OBJECT(result),
                        "context", &type,
-                       "x", &viewer->click_x, "y", &viewer->click_y,
+                       "x", &viewer->click_x,
+                       "y", &viewer->click_y,
+                       "link-uri", &link,
                        NULL);
 
        if (type & WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION)
                return FALSE;
 
+       if (viewer->cur_link) {
+               g_free(viewer->cur_link);
+               viewer->cur_link = NULL;
+       }
+       if (link != NULL) {
+               debug_print("press on %s\n", link);
+               viewer->cur_link = link; /* g_context returned a newly-allocated string */
+       }
+
        viewer->doc = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(viewer->view));
        viewer->window = webkit_dom_document_get_default_view (viewer->doc);
        viewer->selection = webkit_dom_dom_window_get_selection (viewer->window);