Don't use the deprectated g_win32_get_package_installation_subdirectory().
authorTor Lillqvist <tml@novell.com>
Sat, 13 Sep 2008 19:39:57 +0000 (19:39 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Sat, 13 Sep 2008 19:39:57 +0000 (19:39 +0000)
2008-09-13  Tor Lillqvist  <tml@novell.com>

* atk/atkobject.c: Don't use the deprectated
g_win32_get_package_installation_subdirectory(). Use
g_win32_get_package_installation_directory_of_module()
instead. Also, don't use the deprecated silly
G_WIN32_DLLMAIN_FOR_DLL_NAME() macro, but an explicit minimal
DllMain() that just saves the DLL handle.

svn path=/trunk/; revision=1274

ChangeLog
atk/atkobject.c

index 9f3739a..63c9d74 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,11 @@
 2008-09-13  Tor Lillqvist  <tml@novell.com>
 
-       * atk/atkobject.c (get_atk_locale_dir): Do as the docs for
-       g_win32_get_package_installation_directory() say and pass NULL as
-       the first parameter.
+       * atk/atkobject.c: Don't use the deprectated
+       g_win32_get_package_installation_subdirectory(). Use
+       g_win32_get_package_installation_directory_of_module()
+       instead. Also, don't use the deprecated silly
+       G_WIN32_DLLMAIN_FOR_DLL_NAME() macro, but an explicit minimal
+       DllMain() that just saves the DLL handle.
 
 2008-09-09  Li Yuan  <li.yuan@sun.com>
 
index 9f39ccf..80af514 100755 (executable)
@@ -235,11 +235,22 @@ static const gchar* const atk_object_name_property_hypertext_num_links = "access
 
 #ifdef G_OS_WIN32
 
-#undef ATK_LOCALEDIR
+static HMODULE atk_dll;
 
-#define ATK_LOCALEDIR get_atk_locale_dir()
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+        DWORD     fdwReason,
+        LPVOID    lpvReserved)
+{
+  switch (fdwReason)
+    {
+    case DLL_PROCESS_ATTACH:
+      atk_dll = (HMODULE) hinstDLL;
+      break;
+    }
 
-G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)
+  return TRUE;
+}
 
 static const char *
 get_atk_locale_dir (void)
@@ -248,16 +259,35 @@ get_atk_locale_dir (void)
 
   if (!atk_localedir)
     {
-      gchar *temp;
-
-      temp = g_win32_get_package_installation_subdirectory
-        (NULL, dll_name, "lib\\locale");
+      const gchar *p;
+      gchar *root, *temp;
+      
+      /* ATK_LOCALEDIR might end in either /lib/locale or
+       * /share/locale. Scan for that slash.
+       */
+      p = ATK_LOCALEDIR + strlen (ATK_LOCALEDIR);
+      while (*--p != '/')
+       ;
+      while (*--p != '/')
+       ;
+
+      root = g_win32_get_package_installation_directory_of_module (atk_dll);
+      temp = g_build_filename (root, p, NULL);
+      g_free (root);
+
+      /* atk_localedir is passed to bindtextdomain() which isn't
+       * UTF-8-aware.
+       */
       atk_localedir = g_win32_locale_filename_from_utf8 (temp);
       g_free (temp);
     }
   return atk_localedir;
 }
 
+#undef ATK_LOCALEDIR
+
+#define ATK_LOCALEDIR get_atk_locale_dir()
+
 #endif
 
 static void