summaryrefslogtreecommitdiff
path: root/gtk/gtkprivate.c
diff options
context:
space:
mode:
authorMichael Natterer <mitch@gimp.org>2011-10-22 08:48:13 +0200
committerMichael Natterer <mitch@gimp.org>2011-10-22 23:53:55 +0200
commit2688ccdbc4c8976ba4f7d681533d70ab9edc8b32 (patch)
treeebc5503bb0dc4be70f273bde1499225feb8d0e1b /gtk/gtkprivate.c
parent88ad614c735a92f8e0b029e2b5070bf0f8db5016 (diff)
downloadgtk+-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.c206
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;
+}