[evince] [shell] Do not link to poppler directly



commit ee37f085119db53f4108c3d5c398b2104bb3cdf2
Author: Hib Eris <hib hiberis nl>
Date:   Tue Feb 2 17:54:32 2010 +0100

    [shell] Do not link to poppler directly
    
    Fixes bgo#608832.

 backend/pdf/ev-poppler.cc |   24 ++++++++++++++++++++++++
 configure.ac              |    4 ----
 libdocument/ev-document.c |   13 +++++++++++++
 libdocument/ev-document.h |   11 +++++++++++
 shell/ev-window.c         |   45 +++++++++++++++------------------------------
 5 files changed, 63 insertions(+), 34 deletions(-)
---
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc
index 6d1c937..389b436 100644
--- a/backend/pdf/ev-poppler.cc
+++ b/backend/pdf/ev-poppler.cc
@@ -830,6 +830,29 @@ pdf_document_get_info (EvDocument *document)
 	return info;
 }
 
+static gboolean
+pdf_document_get_backend_info (EvDocument *document, EvDocumentBackendInfo *info)
+{
+	PopplerBackend backend;
+
+	backend = poppler_get_backend ();
+	switch (backend) {
+		case POPPLER_BACKEND_CAIRO:
+			info->name = "poppler/cairo";
+			break;
+		case POPPLER_BACKEND_SPLASH:
+			info->name = "poppler/splash";
+			break;
+		default:
+			info->name = "poppler/unknown";
+			break;
+	}
+
+	info->version = poppler_get_version ();
+
+	return TRUE;
+}
+
 static void
 pdf_document_class_init (PdfDocumentClass *klass)
 {
@@ -846,6 +869,7 @@ pdf_document_class_init (PdfDocumentClass *klass)
 	ev_document_class->get_page_label = pdf_document_get_page_label;
 	ev_document_class->render = pdf_document_render;
 	ev_document_class->get_info = pdf_document_get_info;
+	ev_document_class->get_backend_info = pdf_document_get_backend_info;
 }
 
 /* EvDocumentSecurity */
diff --git a/configure.ac b/configure.ac
index 35e34e9..f95532a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -490,10 +490,6 @@ if test "x$enable_pdf" = "xyes"; then
     PKG_CHECK_MODULES(POPPLER, poppler-glib >= $POPPLER_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED,enable_pdf=yes,enable_pdf=no)
 
     if test "x$enable_pdf" = "xyes"; then
-	    AC_DEFINE([ENABLE_PDF], [1], [Enable pdf support.])
-	    SHELL_LIBS="$SHELL_LIBS $POPPLER_LIBS"
-	    SHELL_CFLAGS="$SHELL_CFLAGS $POPPLER_CFLAGS"
-
 	    evince_save_LIBS=$LIBS
 	    LIBS="$LIBS $POPPLER_LIBS"
 	    AC_CHECK_FUNCS(poppler_page_render)
diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c
index c126293..edebe37 100644
--- a/libdocument/ev-document.c
+++ b/libdocument/ev-document.c
@@ -141,6 +141,7 @@ ev_document_class_init (EvDocumentClass *klass)
 
 	klass->get_page = ev_document_impl_get_page;
 	klass->get_info = ev_document_impl_get_info;
+	klass->get_backend_info = NULL;
 
 	g_object_class->finalize = ev_document_finalize;
 }
@@ -423,6 +424,18 @@ ev_document_get_info (EvDocument *document)
 	return document->priv->info;
 }
 
+gboolean
+ev_document_get_backend_info (EvDocument *document, EvDocumentBackendInfo *info)
+{
+	g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+	EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+	if (klass->get_backend_info == NULL)
+		return FALSE;
+
+	return klass->get_backend_info (document, info);
+}
+
 cairo_surface_t *
 ev_document_render (EvDocument      *document,
 		    EvRenderContext *rc)
diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h
index 89acbe6..f905377 100644
--- a/libdocument/ev-document.h
+++ b/libdocument/ev-document.h
@@ -66,6 +66,13 @@ typedef struct {
 
 typedef struct _EvRectangle EvRectangle;
 
+typedef struct _EvDocumentBackendInfo EvDocumentBackendInfo;
+struct _EvDocumentBackendInfo
+{
+	const gchar *name;
+	const gchar *version;
+};
+
 struct _EvDocument
 {
 	GObject base;
@@ -96,6 +103,8 @@ struct _EvDocumentClass
         cairo_surface_t * (* render)          (EvDocument      *document,
                                                EvRenderContext *rc);
         EvDocumentInfo  * (* get_info)        (EvDocument      *document);
+        gboolean          (* get_backend_info)(EvDocument      *document,
+                                               EvDocumentBackendInfo *info);
 };
 
 GType            ev_document_get_type             (void) G_GNUC_CONST;
@@ -114,6 +123,8 @@ void             ev_document_fc_mutex_unlock      (void);
 gboolean         ev_document_fc_mutex_trylock     (void);
 
 EvDocumentInfo  *ev_document_get_info             (EvDocument      *document);
+gboolean         ev_document_get_backend_info     (EvDocument      *document,
+						   EvDocumentBackendInfo *info);
 gboolean         ev_document_load                 (EvDocument      *document,
 						   const char      *uri,
 						   GError         **error);
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 9d1f99a..e9aee88 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -97,10 +97,6 @@
 #include "ev-media-player-keys.h"
 #endif /* ENABLE_DBUS */
 
-#ifdef ENABLE_PDF
-#include <poppler.h>
-#endif
-
 typedef enum {
 	PAGE_MODE_DOCUMENT,
 	PAGE_MODE_PASSWORD
@@ -4173,33 +4169,21 @@ ev_window_dual_mode_changed_cb (EvDocumentModel *model,
 }
 
 static char *
-build_comments_string (void)
-{
-#ifdef ENABLE_PDF
-	PopplerBackend backend;
-	const char *backend_name;
-	const char *version;
-
-	backend = poppler_get_backend ();
-	version = poppler_get_version ();
-	switch (backend) {
-		case POPPLER_BACKEND_CAIRO:
-			backend_name = "cairo";
-			break;
-		case POPPLER_BACKEND_SPLASH:
-			backend_name = "splash";
-			break;
-		default:
-			backend_name = "unknown";
-			break;
+build_comments_string (EvDocument *document)
+{
+	gchar *comments = NULL;
+	EvDocumentBackendInfo info;
+
+	if (document && ev_document_get_backend_info (document, &info)) {
+		comments = g_strdup_printf (
+			_("Document Viewer\nUsing %s (%s)"),
+			info.name, info.version);
+	} else {
+		comments = g_strdup_printf (
+			_("Document Viewer"));
 	}
 
-	return g_strdup_printf (_("Document Viewer.\n"
-				  "Using Poppler %s (%s)"),
-				version, backend_name);
-#else
-	return g_strdup_printf (_("Document Viewer"));
-#endif
+	return comments;
 }
 
 static void
@@ -4251,7 +4235,8 @@ ev_window_cmd_help_about (GtkAction *action, EvWindow *ev_window)
 
 	license_trans = g_strconcat (_(license[0]), "\n", _(license[1]), "\n",
 				     _(license[2]), "\n", NULL);
-	comments = build_comments_string ();
+
+	comments = build_comments_string (ev_window->priv->document);
 
 	gtk_show_about_dialog (
 		GTK_WINDOW (ev_window),



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]