]> www.fi.muni.cz Git - evince.git/commitdiff
Do not cache layers in the backends
authorCarlos Garcia Campos <carlosgc@gnome.org>
Tue, 14 Sep 2010 08:46:29 +0000 (10:46 +0200)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Wed, 15 Sep 2010 15:05:09 +0000 (17:05 +0200)
Use g_object_set_data instead, to attach the backend object to the
evince layer.

backend/pdf/ev-poppler.cc
libdocument/ev-layer.c
libdocument/ev-layer.h

index d68c7b173a97219f9fe2d2f9231bbfffba5e6e4b..0c5c8982270a0954b99d0f1277bf88b9ec521a65 100644 (file)
@@ -109,7 +109,6 @@ struct _PdfDocument
 
        PdfPrintContext *print_ctx;
 
-       GList *layers;
        GHashTable *annots;
 };
 
@@ -198,11 +197,6 @@ pdf_document_dispose (GObject *object)
                poppler_fonts_iter_free (pdf_document->fonts_iter);
        }
 
-       if (pdf_document->layers) {
-               g_list_foreach (pdf_document->layers, (GFunc)g_object_unref, NULL);
-               g_list_free (pdf_document->layers);
-       }
-
        G_OBJECT_CLASS (pdf_document_parent_class)->dispose (object);
 }
 
@@ -3149,11 +3143,12 @@ build_layers_tree (PdfDocument       *pdf_document,
                        markup = g_markup_escape_text (poppler_layer_get_title (layer), -1);
                        visible = poppler_layer_is_visible (layer);
                        rb_group = poppler_layer_get_radio_button_group_id (layer);
-                       pdf_document->layers = g_list_append (pdf_document->layers,
-                                                             g_object_ref (layer));
-                       ev_layer = ev_layer_new (g_list_length (pdf_document->layers) - 1,
-                                                poppler_layer_is_parent (layer),
+                       ev_layer = ev_layer_new (poppler_layer_is_parent (layer),
                                                 rb_group);
+                       g_object_set_data_full (G_OBJECT (ev_layer),
+                                               "poppler-layer",
+                                               g_object_ref (layer),
+                                               (GDestroyNotify) g_object_unref);
                } else {
                        gchar *title;
 
@@ -3211,30 +3206,33 @@ static void
 pdf_document_layers_show_layer (EvDocumentLayers *document,
                                EvLayer          *layer)
 {
-       PdfDocument *pdf_document = PDF_DOCUMENT (document);
-       guint        layer_id = ev_layer_get_id (layer);
+       PdfDocument  *pdf_document = PDF_DOCUMENT (document);
+       PopplerLayer *poppler_layer;
 
-       poppler_layer_show (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+       poppler_layer = POPPLER_LAYER (g_object_get_data (G_OBJECT (layer), "poppler-layer"));
+       poppler_layer_show (poppler_layer);
 }
 
 static void
 pdf_document_layers_hide_layer (EvDocumentLayers *document,
                                EvLayer          *layer)
 {
-       PdfDocument *pdf_document = PDF_DOCUMENT (document);
-       guint        layer_id = ev_layer_get_id (layer);
+       PdfDocument  *pdf_document = PDF_DOCUMENT (document);
+       PopplerLayer *poppler_layer;
 
-       poppler_layer_hide (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+       poppler_layer = POPPLER_LAYER (g_object_get_data (G_OBJECT (layer), "poppler-layer"));
+       poppler_layer_hide (poppler_layer);
 }
 
 static gboolean
 pdf_document_layers_layer_is_visible (EvDocumentLayers *document,
                                      EvLayer          *layer)
 {
-       PdfDocument *pdf_document = PDF_DOCUMENT (document);
-       guint        layer_id = ev_layer_get_id (layer);
+       PdfDocument  *pdf_document = PDF_DOCUMENT (document);
+       PopplerLayer *poppler_layer;
 
-       return poppler_layer_is_visible (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+       poppler_layer = POPPLER_LAYER (g_object_get_data (G_OBJECT (layer), "poppler-layer"));
+       return poppler_layer_is_visible (poppler_layer);
 }
 
 static void
index dfc9bb071eefe0101ef1ce64f8851666d04f0900..533cf657d5a8bec12e818fc6248f6e09a28c56f2 100644 (file)
@@ -22,9 +22,8 @@
 #include "ev-layer.h"
 
 struct _EvLayerPrivate {
-       guint      id;
-       gboolean   is_parent;
-       gint       rb_group;
+       gboolean is_parent;
+       gint     rb_group;
 };
 
 #define EV_LAYER_GET_PRIVATE(object) \
@@ -47,28 +46,18 @@ ev_layer_init (EvLayer *layer)
 }
 
 EvLayer *
-ev_layer_new (guint    layer_id,
-             gboolean is_parent,
+ev_layer_new (gboolean is_parent,
              gint     rb_group)
 {
        EvLayer *layer;
 
        layer = EV_LAYER (g_object_new (EV_TYPE_LAYER, NULL));
-       layer->priv->id = layer_id;
        layer->priv->is_parent = is_parent;
        layer->priv->rb_group = rb_group;
 
        return layer;
 }
 
-guint
-ev_layer_get_id (EvLayer *layer)
-{
-       g_return_val_if_fail (EV_IS_LAYER (layer), 0);
-
-       return layer->priv->id;
-}
-
 gboolean
 ev_layer_is_parent (EvLayer *layer)
 {
index 09fe71d4eddba0e0e4a7a53624b6e3b609c869e5..38b9411b0edef5aff292da3a4422c7f699b6b579 100644 (file)
@@ -50,10 +50,8 @@ struct _EvLayerClass {
 };
 
 GType     ev_layer_get_type     (void) G_GNUC_CONST;
-EvLayer  *ev_layer_new          (guint    layer_id,
-                                gboolean is_parent,
+EvLayer  *ev_layer_new          (gboolean is_parent,
                                 gint     rb_group);
-guint     ev_layer_get_id       (EvLayer *layer);
 gboolean  ev_layer_is_parent    (EvLayer *layer);
 gint      ev_layer_get_rb_group (EvLayer *layer);