*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <config.h>
struct _EvBackendInfo {
gchar *module_name;
GTypeModule *module;
+ gboolean resident;
GType type_id;
#define EV_BACKENDS_GROUP "Evince Backend"
#define EV_BACKENDS_EXTENSION ".evince-backend"
+static gchar *backendsdir = NULL;
+
+static const gchar *
+backends_dir (void)
+{
+ if (!backendsdir) {
+#ifdef G_OS_WIN32
+ gchar *dir;
+
+ dir = g_win32_get_package_installation_directory_of_module (NULL);
+ backendsdir = g_build_filename (dir, "lib", "evince",
+ EV_BACKENDSBINARYVERSION,
+ "backends", NULL);
+ g_free (dir);
+#else
+ backendsdir = g_strdup (EV_BACKENDSDIR);
+#endif
+ }
+
+ return backendsdir;
+}
+
static void
ev_backend_info_free (EvBackendInfo *info)
{
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) {
const gchar *dirent;
GError *error = NULL;
- dir = g_dir_open (EV_BACKENDSDIR, 0, &error);
+ dir = g_dir_open (backends_dir(), 0, &error);
if (!dir) {
- g_warning (error->message);
+ g_warning ("%s", error->message);
g_error_free (error);
return FALSE;
if (!g_str_has_suffix (dirent, EV_BACKENDS_EXTENSION))
continue;
- file = g_build_filename (EV_BACKENDSDIR, dirent, NULL);
+ file = g_build_filename (backends_dir(), dirent, NULL);
info = ev_backends_manager_load_backend (file);
g_free (file);
ev_backends_list = g_list_prepend (ev_backends_list, info);
}
- return TRUE;
+ g_dir_close (dir);
+
+ return ev_backends_list != NULL;
}
+/*
+ * _ev_backends_manager_init:
+ *
+ * Initializes the evince backends manager.
+ *
+ * Returns: %TRUE if there were any backends found; %FALSE otherwise
+ */
gboolean
-ev_backends_manager_init (void)
+_ev_backends_manager_init (void)
{
if (ev_backends_list)
- return FALSE;
+ return TRUE;
return ev_backends_manager_load ();
}
+/*
+ * _ev_backends_manager_shutdown:
+ *
+ * Shuts the evince backends manager down.
+ */
void
-ev_backends_manager_shutdown (void)
+_ev_backends_manager_shutdown (void)
{
g_list_foreach (ev_backends_list, (GFunc)ev_backend_info_free, NULL);
g_list_free (ev_backends_list);
ev_backends_list = NULL;
+
+ g_free (backendsdir);
}
static EvBackendInfo *
if (!info->module) {
gchar *path;
- path = g_module_build_path (EV_BACKENDSDIR, info->module_name);
- info->module = G_TYPE_MODULE (ev_module_new (path));
+ path = g_module_build_path (backends_dir(), info->module_name);
+ info->module = G_TYPE_MODULE (ev_module_new (path, info->resident));
g_free (path);
}