]> www.fi.muni.cz Git - evince.git/commitdiff
Allow making backend modules resident. This is needed only for some
authorCarlos Garcia Campos <carlosgc@gnome.org>
Mon, 3 Mar 2008 15:01:19 +0000 (15:01 +0000)
committerCarlos Garcia Campos <carlosgc@src.gnome.org>
Mon, 3 Mar 2008 15:01:19 +0000 (15:01 +0000)
2008-03-03  Carlos Garcia Campos  <carlosgc@gnome.org>

* backend/pdf/pdfdocument.evince-backend.in:
* libdocument/ev-backends-manager.c:
(ev_backends_manager_load_backend),
(ev_backends_manager_get_document):
* libdocument/ev-module.[ch]: (ev_module_load), (ev_module_new):

Allow making backend modules resident. This is needed only for
some backends like pdf to avoid registering glib types more than
once.

svn path=/trunk/; revision=2943

ChangeLog
backend/pdf/pdfdocument.evince-backend.in
libdocument/ev-backends-manager.c
libdocument/ev-module.c
libdocument/ev-module.h

index ecd577e7def5cbf87e8ad5ee4a8f0d077be982de..8439517344dbb9b349b949241e68537049ca68a3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-03-03  Carlos Garcia Campos  <carlosgc@gnome.org>
+
+       * backend/pdf/pdfdocument.evince-backend.in:
+       * libdocument/ev-backends-manager.c:
+       (ev_backends_manager_load_backend),
+       (ev_backends_manager_get_document):
+       * libdocument/ev-module.[ch]: (ev_module_load), (ev_module_new):
+
+       Allow making backend modules resident. This is needed only for
+       some backends like pdf to avoid registering glib types more than
+       once.
+       
 2008-03-03  Carlos Garcia Campos  <carlosgc@gnome.org>
 
        * backend/comics/comics-document.c:
index 476afe336bc5e139621ad4e24d0f06b491baf81b..04573343a9c0d685ac66927086728bfaad1175cf 100644 (file)
@@ -1,5 +1,6 @@
 [Evince Backend]
 Module=pdfdocument
+Resident=true
 _TypeDescription=PDF Documents
 MimeType=application/pdf;application/x-bzpdf;application/x-gzpdf
 
index 87f7fea414ae489d1e6222612beb5d32b2fabc3e..28672dfcc78c433f74c720667b2f799fc84d263d 100644 (file)
@@ -30,6 +30,7 @@ typedef struct _EvBackendInfo EvBackendInfo;
 struct _EvBackendInfo {
        gchar       *module_name;
        GTypeModule *module;
+       gboolean     resident;
 
        GType        type_id;
 
@@ -78,6 +79,9 @@ ev_backends_manager_load_backend (const gchar *file)
                return NULL;
        }
 
+       info->resident = g_key_file_get_boolean (backend_file, EV_BACKENDS_GROUP,
+                                                "Resident", NULL);
+       
        info->type_desc = g_key_file_get_locale_string (backend_file, EV_BACKENDS_GROUP,
                                                        "TypeDescription", NULL, NULL);
        if (!info->type_desc) {
@@ -194,7 +198,7 @@ ev_backends_manager_get_document (const gchar *mime_type)
                gchar *path;
                
                path = g_module_build_path (EV_BACKENDSDIR, info->module_name);
-               info->module = G_TYPE_MODULE (ev_module_new (path));
+               info->module = G_TYPE_MODULE (ev_module_new (path, info->resident));
                g_free (path);
        }
        
index f2aebe702c9d3d5d934e9749f71a6c0adac35b6f..f9860a2f6bfcc35eff36df78169e1c9e1a397216 100644 (file)
@@ -54,6 +54,7 @@ struct _EvModule {
         GTypeModule parent_instance;
 
         GModule *library;
+       gboolean resident;
 
         gchar *path;
         GType type;
@@ -106,6 +107,9 @@ ev_module_load (GTypeModule *gmodule)
                 return FALSE;
         }
 
+       if (module->resident)
+               g_module_make_resident (module->library);
+
         return TRUE;
 }
 
@@ -175,7 +179,8 @@ ev_module_class_init (EvModuleClass *class)
 }
 
 EvModule *
-ev_module_new (const gchar *path)
+ev_module_new (const gchar *path,
+              gboolean     resident)
 {
         EvModule *result;
 
@@ -185,6 +190,7 @@ ev_module_new (const gchar *path)
 
         g_type_module_set_name (G_TYPE_MODULE (result), path);
         result->path = g_strdup (path);
+       result->resident = resident;
 
         return result;
 }
index 4239cb115013d02d1ef9ec6d439f17bf509a461b..09d46fa2556599d718882c9e72b32544638b0859 100644 (file)
@@ -56,7 +56,8 @@ typedef struct _EvModule EvModule;
 
 GType        ev_module_get_type        (void) G_GNUC_CONST;
 
-EvModule    *ev_module_new             (const gchar *path);
+EvModule    *ev_module_new             (const gchar *path,
+                                       gboolean     resident);
 
 const gchar *ev_module_get_path        (EvModule    *module);