X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libdocument%2Fev-init.c;h=5f62f79d8c32fb64a0a1c8f8d19737409cb6d669;hb=1d6c41200f621a43e92deda5b5d682413572d2a2;hp=2b247ebe2e02fd8460b85fa2ec3e0c47919bd881;hpb=19a00ed1cd086dcca4b6bfeb84e0b1488b2e3089;p=evince.git diff --git a/libdocument/ev-init.c b/libdocument/ev-init.c index 2b247ebe..5f62f79d 100644 --- a/libdocument/ev-init.c +++ b/libdocument/ev-init.c @@ -21,6 +21,9 @@ #include #include +#ifdef G_OS_WIN32 +#include +#endif #include "ev-init.h" #include "ev-backends-manager.h" @@ -29,6 +32,65 @@ 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 (""); + + return locale_dir; +} + +#endif + +const gchar * +ev_get_locale_dir (void) +{ +#ifdef G_OS_WIN32 + return _ev_win32_get_locale_dir (evdocument_dll); +#else + return GNOMELOCALEDIR; +#endif +} + /** * ev_init: * @@ -49,7 +111,7 @@ ev_init (void) return have_backends; /* set up translation catalog */ - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); + bindtextdomain (GETTEXT_PACKAGE, ev_get_locale_dir ()); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); _ev_debug_init (); @@ -72,6 +134,11 @@ ev_shutdown (void) 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 ();