[gtk+/gtk-3-18] Translate GDK_KEY_KP_Decimal according to locale



commit bfedc3bafe4538d6c815405d5a9daf1abbf5b74a
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Oct 20 11:06:43 2015 -0400

    Translate GDK_KEY_KP_Decimal according to locale
    
    It makes sense that you should be able to type numbers that are
    correctly formatted and parsable according to the current locale,
    using just the keypad. This patch makes it so by translating
    GDK_KEY_KP_Decimal to the decimal separator for the current locale,
    instead of hardcoding a '.'.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=756751

 gdk/gdkkeyuni.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkkeyuni.c b/gdk/gdkkeyuni.c
index d770737..ea28010 100644
--- a/gdk/gdkkeyuni.c
+++ b/gdk/gdkkeyuni.c
@@ -27,6 +27,7 @@
 #include "gdkkeys.h"
 #include "gdktypes.h"
 
+#include <locale.h>
 
 /* Thanks to Markus G. Kuhn <mkuhn acm org> for the ksysym<->Unicode
  * mapping functions, from the xterm sources.
@@ -872,6 +873,23 @@ static const struct {
 #endif
 };
 
+static gunichar
+get_decimal_point (void)
+{
+  struct lconv *locale_data;
+  const gchar *decimal_point;
+  gunichar ret;
+
+  locale_data = localeconv ();
+  decimal_point = locale_data->decimal_point;
+
+  ret = g_utf8_get_char_validated (decimal_point, -1);
+  if (ret != (gunichar)-2 && ret != (gunichar)-1)
+    return ret;
+
+  return (gunichar) '.';
+}
+
 /**
  * gdk_keyval_to_unicode:
  * @keyval: a GDK key symbol 
@@ -899,6 +917,9 @@ gdk_keyval_to_unicode (guint keyval)
   if ((keyval & 0xff000000) == 0x01000000)
     return keyval & 0x00ffffff;
 
+  if (keyval == 0xffae)
+    return (guint32) get_decimal_point ();
+
   /* binary search in table */
   while (max >= min) {
     mid = (min + max) / 2;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]