]> www.fi.muni.cz Git - evince.git/blob - libdocument/ev-init.c
9bac95596a4207b85f4f6de9d717916a0e1c5802
[evince.git] / libdocument / ev-init.c
1 /* this file is part of evince, a gnome document viewer
2  *
3  * Copyright © 2009 Christian Persch
4  *
5  * Evince is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation; either version 2.1 of the License, or
8  * (at your option) any later version.
9  *
10  * Evince is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19
20 #include <config.h>
21
22 #include <glib.h>
23 #include <glib/gi18n-lib.h>
24 #ifdef G_OS_WIN32
25 #include <windows.h>
26 #endif
27
28 #include "ev-init.h"
29 #include "ev-backends-manager.h"
30 #include "ev-debug.h"
31 #include "ev-file-helpers.h"
32
33 static int ev_init_count;
34
35 #ifdef G_OS_WIN32
36
37 static HMODULE evdocument_dll = NULL;
38 static gchar *locale_dir = NULL;
39
40 #ifdef DLL_EXPORT
41 BOOL WINAPI
42 DllMain (HINSTANCE hinstDLL,
43          DWORD     fdwReason,
44          LPVOID    lpvReserved)
45 {
46         if (fdwReason == DLL_PROCESS_ATTACH)
47                 evdocument_dll = hinstDLL;
48
49         return TRUE;
50 }
51 #endif
52
53 static const gchar *
54 _ev_win32_get_locale_dir (HMODULE module)
55 {
56         if (locale_dir)
57                 return locale_dir;
58
59         gchar *install_dir = NULL, *utf8_locale_dir;
60         gchar *retval = NULL;
61
62         if (evdocument_dll != NULL)
63                 install_dir =
64                 g_win32_get_package_installation_directory_of_module (module);
65
66         if (install_dir) {
67                 utf8_locale_dir = g_build_filename (install_dir,
68                         "share", "locale", NULL);
69
70                 locale_dir = g_win32_locale_filename_from_utf8 (utf8_locale_dir);
71
72                 g_free (install_dir);
73                 g_free (utf8_locale_dir);
74         }
75
76         if (!locale_dir)
77                 locale_dir = g_strdup ("");
78 }
79
80 #endif
81
82 const gchar *
83 ev_get_locale_dir (void)
84 {
85 #ifdef G_OS_WIN32
86         return _ev_win32_get_locale_dir (evdocument_dll);
87 #else
88         return GNOMELOCALEDIR;
89 #endif
90 }
91
92 /**
93  * ev_init:
94  *
95  * Initializes the evince document library, and binds the evince
96  * gettext domain.
97  *
98  * You must call this before calling any other function in the evince
99  * document library.
100  *
101  * Returns: %TRUE if any backends were found; %FALSE otherwise
102  */
103 gboolean
104 ev_init (void)
105 {
106         static gboolean have_backends;
107
108         if (ev_init_count++ > 0)
109                 return have_backends;
110
111         /* set up translation catalog */
112         bindtextdomain (GETTEXT_PACKAGE, ev_get_locale_dir ());
113         bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
114
115         _ev_debug_init ();
116         _ev_file_helpers_init ();
117         have_backends = _ev_backends_manager_init ();
118
119         return have_backends;
120 }
121
122 /**
123  * ev_shutdown:
124  *
125  * Shuts the evince document library down.
126  */
127 void
128 ev_shutdown (void)
129 {
130         g_assert (_ev_is_initialized ());
131
132         if (--ev_init_count > 0)
133                 return;
134
135 #ifdef G_OS_WIN32
136         if (locale_dir != NULL)
137                 g_free(locale_dir);
138 #endif
139
140         _ev_backends_manager_shutdown ();
141         _ev_file_helpers_shutdown ();
142         _ev_debug_shutdown ();
143 }
144
145 /*
146  * _ev_is_initialized:
147  *
148  * Returns: %TRUE if the evince document library has been initialized
149  */
150 gboolean
151 _ev_is_initialized (void)
152 {
153         return ev_init_count > 0;
154 }