]> www.fi.muni.cz Git - evince.git/blobdiff - libdocument/ev-init.c
[dualscreen] fix crash on ctrl+w and fix control window closing
[evince.git] / libdocument / ev-init.c
index d241a7a169ac2adcf7d70b771fb48274256d533c..5f62f79d8c32fb64a0a1c8f8d19737409cb6d669 100644 (file)
  *
  * 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., 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>
 
 #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"
 
 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:
  *
- * Initializes the evince document library.
+ * 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.
@@ -46,6 +110,10 @@ ev_init (void)
         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 ();
@@ -66,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 ();