diff options
author | Michael Natterer <mitch@gimp.org> | 2011-10-22 08:48:13 +0200 |
---|---|---|
committer | Michael Natterer <mitch@gimp.org> | 2011-10-22 23:53:55 +0200 |
commit | 2688ccdbc4c8976ba4f7d681533d70ab9edc8b32 (patch) | |
tree | ebc5503bb0dc4be70f273bde1499225feb8d0e1b /gtk/gtkwin32.c | |
parent | 88ad614c735a92f8e0b029e2b5070bf0f8db5016 (diff) | |
download | gtk+-2688ccdbc4c8976ba4f7d681533d70ab9edc8b32.tar.gz |
gtk: clean up the private horror
- add gtkmodulesprivate.h and move stuff there from gtkprivate.h
- add gtkprivate.c and move stuff there from gtkmain.c
- add gtkwin32.c and move stuff there from gtkmain.c
- don't redefine GTK_DATADIR and friends in gtkprivate.h
- have _gtk_get_datadir() and friends on all platforms
- remove the horrid hacks where gtkprivate.h can't be included,
or must be included later due to redefinition of the compile-time
directories
Diffstat (limited to 'gtk/gtkwin32.c')
-rw-r--r-- | gtk/gtkwin32.c | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/gtk/gtkwin32.c b/gtk/gtkwin32.c new file mode 100644 index 0000000000..858216657a --- /dev/null +++ b/gtk/gtkwin32.c @@ -0,0 +1,143 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * This library 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 of the License, or (at your option) any later version. + * + * This library 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 library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/* + * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +#include "config.h" + +#include "gdk/gdk.h" + +#include "gtkprivate.h" + +#ifdef G_OS_WIN32 +#define STRICT +#include <windows.h> +#undef STRICT +#endif + +#ifdef G_OS_WIN32 + +static HMODULE gtk_dll; + +BOOL WINAPI +DllMain (HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + gtk_dll = (HMODULE) hinstDLL; + break; + } + + return TRUE; +} + +const gchar * +_gtk_get_libdir (void) +{ + static char *gtk_libdir = NULL; + if (gtk_libdir == NULL) + { + gchar *root = g_win32_get_package_installation_directory_of_module (gtk_dll); + gchar *slash = strrchr (root, '\\'); + if (g_ascii_strcasecmp (slash + 1, ".libs") == 0) + gtk_libdir = GTK_LIBDIR; + else + gtk_libdir = g_build_filename (root, "lib", NULL); + g_free (root); + } + + return gtk_libdir; +} + +const gchar * +_gtk_get_localedir (void) +{ + static char *gtk_localedir = NULL; + if (gtk_localedir == NULL) + { + const gchar *p; + gchar *root, *temp; + + /* GTK_LOCALEDIR ends in either /lib/locale or + * /share/locale. Scan for that slash. + */ + p = GTK_LOCALEDIR + strlen (GTK_LOCALEDIR); + while (*--p != '/') + ; + while (*--p != '/') + ; + + root = g_win32_get_package_installation_directory_of_module (gtk_dll); + temp = g_build_filename (root, p, NULL); + g_free (root); + + /* gtk_localedir is passed to bindtextdomain() which isn't + * UTF-8-aware. + */ + gtk_localedir = g_win32_locale_filename_from_utf8 (temp); + g_free (temp); + } + return gtk_localedir; +} + +const gchar * +_gtk_get_datadir (void) +{ + static char *gtk_datadir = NULL; + if (gtk_datadir == NULL) + { + gchar *root = g_win32_get_package_installation_directory_of_module (gtk_dll); + gtk_datadir = g_build_filename (root, "share", NULL); + g_free (root); + } + + return gtk_datadir; +} + +const gchar * +_gtk_get_sysconfdir (void) +{ + static char *gtk_sysconfdir = NULL; + if (gtk_sysconfdir == NULL) + { + gchar *root = g_win32_get_package_installation_directory_of_module (gtk_dll); + gtk_sysconfdir = g_build_filename (root, "etc", NULL); + g_free (root); + } + + return gtk_sysconfdir; +} + +const gchar * +_gtk_get_data_prefix (void) +{ + static char *gtk_data_prefix = NULL; + if (gtk_data_prefix == NULL) + gtk_data_prefix = g_win32_get_package_installation_directory_of_module (gtk_dll); + + return gtk_data_prefix; +} |