diff options
Diffstat (limited to 'libdocument/ev-init.c')
-rw-r--r-- | libdocument/ev-init.c | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/libdocument/ev-init.c b/libdocument/ev-init.c new file mode 100644 index 00000000..31863357 --- /dev/null +++ b/libdocument/ev-init.c @@ -0,0 +1,154 @@ +/* this file is part of evince, a mate document viewer + * + * Copyright © 2009 Christian Persch + * + * Evince is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * Evince is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <config.h> + +#include <glib.h> +#include <glib/gi18n-lib.h> +#ifdef G_OS_WIN32 +#include <windows.h> +#endif + +#include "ev-init.h" +#include "ev-backends-manager.h" +#include "ev-debug.h" +#include "ev-file-helpers.h" + +static int ev_init_count; + +#ifdef G_OS_WIN32 + +static HMODULE evdocument_dll = NULL; +static gchar *locale_dir = NULL; + +#ifdef DLL_EXPORT +BOOL WINAPI +DllMain (HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +{ + if (fdwReason == DLL_PROCESS_ATTACH) + evdocument_dll = hinstDLL; + + return TRUE; +} +#endif + +static const gchar * +_ev_win32_get_locale_dir (HMODULE module) +{ + if (locale_dir) + return locale_dir; + + gchar *install_dir = NULL, *utf8_locale_dir; + gchar *retval = NULL; + + if (evdocument_dll != NULL) + install_dir = + g_win32_get_package_installation_directory_of_module (module); + + if (install_dir) { + utf8_locale_dir = g_build_filename (install_dir, + "share", "locale", NULL); + + locale_dir = g_win32_locale_filename_from_utf8 (utf8_locale_dir); + + g_free (install_dir); + g_free (utf8_locale_dir); + } + + if (!locale_dir) + locale_dir = g_strdup (""); +} + +#endif + +const gchar * +ev_get_locale_dir (void) +{ +#ifdef G_OS_WIN32 + return _ev_win32_get_locale_dir (evdocument_dll); +#else + return MATELOCALEDIR; +#endif +} + +/** + * ev_init: + * + * Initializes the evince document library, and binds the evince + * gettext domain. + * + * You must call this before calling any other function in the evince + * document library. + * + * Returns: %TRUE if any backends were found; %FALSE otherwise + */ +gboolean +ev_init (void) +{ + static gboolean have_backends; + + if (ev_init_count++ > 0) + return have_backends; + + /* set up translation catalog */ + bindtextdomain (GETTEXT_PACKAGE, ev_get_locale_dir ()); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + + _ev_debug_init (); + _ev_file_helpers_init (); + have_backends = _ev_backends_manager_init (); + + return have_backends; +} + +/** + * ev_shutdown: + * + * Shuts the evince document library down. + */ +void +ev_shutdown (void) +{ + g_assert (_ev_is_initialized ()); + + if (--ev_init_count > 0) + return; + +#ifdef G_OS_WIN32 + if (locale_dir != NULL) + g_free(locale_dir); +#endif + + _ev_backends_manager_shutdown (); + _ev_file_helpers_shutdown (); + _ev_debug_shutdown (); +} + +/* + * _ev_is_initialized: + * + * Returns: %TRUE if the evince document library has been initialized + */ +gboolean +_ev_is_initialized (void) +{ + return ev_init_count > 0; +} |