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/gtkprivate.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/gtkprivate.c')
-rw-r--r-- | gtk/gtkprivate.c | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/gtk/gtkprivate.c b/gtk/gtkprivate.c new file mode 100644 index 0000000000..73275fc13b --- /dev/null +++ b/gtk/gtkprivate.c @@ -0,0 +1,206 @@ +/* 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 <locale.h> + +#include "gdk/gdk.h" + +#include "gtkprivate.h" + + +#if !defined G_OS_WIN32 && !(defined GDK_WINDOWING_QUARTZ && defined QUARTZ_RELOCATION) + +const gchar * +_gtk_get_datadir (void) +{ + return GTK_DATADIR; +} + +const gchar * +_gtk_get_libdir (void) +{ + return GTK_LIBDIR; +} + +const gchar * +_gtk_get_sysconfdir (void) +{ + return GTK_SYSCONFDIR; +} + +const gchar * +_gtk_get_localedir (void) +{ + return GTK_LOCALEDIR; +} + +const gchar * +_gtk_get_data_prefix (void) +{ + return GTK_DATA_PREFIX; +} + +#endif + +/* _gtk_get_lc_ctype: + * + * Return the Unix-style locale string for the language currently in + * effect. On Unix systems, this is the return value from + * <literal>setlocale(LC_CTYPE, NULL)</literal>, and the user can + * affect this through the environment variables LC_ALL, LC_CTYPE or + * LANG (checked in that order). The locale strings typically is in + * the form lang_COUNTRY, where lang is an ISO-639 language code, and + * COUNTRY is an ISO-3166 country code. For instance, sv_FI for + * Swedish as written in Finland or pt_BR for Portuguese as written in + * Brazil. + * + * On Windows, the C library doesn't use any such environment + * variables, and setting them won't affect the behaviour of functions + * like ctime(). The user sets the locale through the Regional Options + * in the Control Panel. The C library (in the setlocale() function) + * does not use country and language codes, but country and language + * names spelled out in English. + * However, this function does check the above environment + * variables, and does return a Unix-style locale string based on + * either said environment variables or the thread's current locale. + * + * Return value: a dynamically allocated string, free with g_free(). + */ + +gchar * +_gtk_get_lc_ctype (void) +{ +#ifdef G_OS_WIN32 + /* Somebody might try to set the locale for this process using the + * LANG or LC_ environment variables. The Microsoft C library + * doesn't know anything about them. You set the locale in the + * Control Panel. Setting these env vars won't have any affect on + * locale-dependent C library functions like ctime(). But just for + * kicks, do obey LC_ALL, LC_CTYPE and LANG in GTK. (This also makes + * it easier to test GTK and Pango in various default languages, you + * don't have to clickety-click in the Control Panel, you can simply + * start the program with LC_ALL=something on the command line.) + */ + gchar *p; + + p = getenv ("LC_ALL"); + if (p != NULL) + return g_strdup (p); + + p = getenv ("LC_CTYPE"); + if (p != NULL) + return g_strdup (p); + + p = getenv ("LANG"); + if (p != NULL) + return g_strdup (p); + + return g_win32_getlocale (); +#else + return g_strdup (setlocale (LC_CTYPE, NULL)); +#endif +} + +gboolean +_gtk_boolean_handled_accumulator (GSignalInvocationHint *ihint, + GValue *return_accu, + const GValue *handler_return, + gpointer dummy) +{ + gboolean continue_emission; + gboolean signal_handled; + + signal_handled = g_value_get_boolean (handler_return); + g_value_set_boolean (return_accu, signal_handled); + continue_emission = !signal_handled; + + return continue_emission; +} + +gboolean +_gtk_single_string_accumulator (GSignalInvocationHint *ihint, + GValue *return_accu, + const GValue *handler_return, + gpointer dummy) +{ + gboolean continue_emission; + const gchar *str; + + str = g_value_get_string (handler_return); + g_value_set_string (return_accu, str); + continue_emission = str == NULL; + + return continue_emission; +} + +GdkModifierType +_gtk_replace_virtual_modifiers (GdkKeymap *keymap, + GdkModifierType modifiers) +{ + GdkModifierType result = 0; + gint i; + + g_return_val_if_fail (GDK_IS_KEYMAP (keymap), 0); + + for (i = 0; i < 8; i++) /* SHIFT...MOD5 */ + { + GdkModifierType real = 1 << i; + + if (modifiers & real) + { + GdkModifierType virtual = real; + + gdk_keymap_add_virtual_modifiers (keymap, &virtual); + + if (virtual == real) + result |= virtual; + else + result |= virtual & ~real; + } + } + + return result; +} + +GdkModifierType +_gtk_get_primary_accel_mod (void) +{ + static GdkModifierType primary = 0; + + if (! primary) + { + GdkDisplay *display = gdk_display_get_default (); + + primary = gdk_keymap_get_modifier_mask (gdk_keymap_get_for_display (display), + GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); + primary = _gtk_replace_virtual_modifiers (gdk_keymap_get_for_display (display), + primary); + } + + return primary; +} |