Adl fix #322: Include pdf-view
authorColin Clark <colin.clark@cclark.uk>
Wed, 3 Jul 2019 17:33:03 +0000 (18:33 +0100)
committerColin Clark <colin.clark@cclark.uk>
Wed, 3 Jul 2019 17:33:03 +0000 (18:33 +0100)
https://github.com/BestImageViewer/geeqie/issues/322

Use pixel data from memory instead of opening file again.
Also include Pdf as a class option in the search page.

src/image_load_pdf.c
src/search.c

index 5bc4571..ae00a9d 100644 (file)
@@ -41,9 +41,7 @@ struct _ImageLoaderPDF {
 static gboolean image_loader_pdf_load(gpointer loader, const guchar *buf, gsize count, GError **error)
 {
        ImageLoaderPDF *ld = (ImageLoaderPDF *) loader;
-       ImageLoader *il = ld->data;
-       GError *poppler_error;
-       gchar *uri;
+       GError *poppler_error = NULL;
        PopplerPage *page;
        PopplerDocument *document;
        gint page_num;
@@ -52,15 +50,16 @@ static gboolean image_loader_pdf_load(gpointer loader, const guchar *buf, gsize
        cairo_t *cr;
        gboolean ret = FALSE;
 
-       uri = g_filename_to_uri(il->fd->path, NULL, &poppler_error);
-       if (uri == NULL)
+       page_num = 0;
+       document = poppler_document_new_from_data((gchar *)buf, count, NULL, &poppler_error);
+
+       if (poppler_error)
                {
                log_printf("warning: pdf reader error: %s\n", poppler_error->message);
+               g_error_free(poppler_error);
                }
        else
                {
-               page_num = 0;
-               document = poppler_document_new_from_file(uri, NULL, &poppler_error);
                page = poppler_document_get_page(document, page_num);
                poppler_page_get_size(page, &width, &height);
 
@@ -73,12 +72,12 @@ static gboolean image_loader_pdf_load(gpointer loader, const guchar *buf, gsize
 
                cairo_destroy (cr);
                cairo_surface_destroy(surface);
-               g_free(uri);
                g_object_unref(page);
-               g_object_unref(document);
                ret = TRUE;
                }
 
+       g_object_unref(document);
+
        return ret;
 }
 
index 3437b6d..802c86e 100644 (file)
@@ -2194,6 +2194,11 @@ static gboolean search_file_next(SearchData *sd)
                        {
                        search_class = FORMAT_CLASS_VIDEO;
                        }
+               else if (g_strcmp0(gtk_combo_box_text_get_active_text(
+                                               GTK_COMBO_BOX_TEXT(sd->class_type)), _("Pdf")) == 0)
+                       {
+                       search_class = FORMAT_CLASS_PDF;
+                       }
                else if (g_strcmp0(gtk_combo_box_text_get_active_text(
                                                GTK_COMBO_BOX_TEXT(sd->class_type)), _("Metadata")) == 0)
                        {
@@ -3376,6 +3381,7 @@ void search_new(FileData *dir_fd, FileData *example_file)
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Raw Image"));
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("HEIF"));
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Video"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Pdf"));
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Metadata"));
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Unknown"));
        gtk_box_pack_start(GTK_BOX(hbox), sd->class_type, FALSE, FALSE, 0);