[gtk+/gtk-2-24] Translate GDK_KEY_KP_Decimal according to locale



commit 3b65a6a42ed2d4d2ecdcec94163ce0b748e707fc
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Oct 25 14:09:03 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 |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkkeyuni.c b/gdk/gdkkeyuni.c
index 4282597..8da12d6 100644
--- a/gdk/gdkkeyuni.c
+++ b/gdk/gdkkeyuni.c
@@ -28,6 +28,8 @@
 #include "gdk.h"
 #include "gdkalias.h"
 
+#include <locale.h>
+
 /* Thanks to Markus G. Kuhn <mkuhn acm org> for the ksysym<->Unicode
  * mapping functions, from the xterm sources.
  */
@@ -1654,6 +1656,23 @@ static const struct {
   { 0x0ef7, 0x318e }, /*               Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
 };
 
+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_unicode_to_keyval:
  * @wc: a ISO10646 encoded character
@@ -1676,6 +1695,9 @@ gdk_unicode_to_keyval (guint32 wc)
       (wc >= 0x00a0 && wc <= 0x00ff))
     return wc;
 
+  if (wc == 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]