diff --git a/gdk/gdkkeyuni.c b/gdk/gdkkeyuni.c
index 4282597..896d020 100644
--- a/gdk/gdkkeyuni.c
+++ b/gdk/gdkkeyuni.c
@@ -36,6 +36,10 @@
  * is smallish. It would save about ~1000 bytes total.
  */
 
+ #include <locale.h>
+
+
+
 static const struct {
   unsigned short keysym;
   unsigned short ucs;
@@ -827,7 +831,6 @@ static const struct {
   { 0x20ab, 0x20ab }, /*                    DongSign ₫ DONG SIGN */
   { 0x20ac, 0x20ac }, /*                    EuroSign € EURO SIGN */
 
-
   /* Following items added to GTK, not in the xterm table */
 
   /* Numeric keypad */
@@ -854,6 +857,23 @@ static const struct {
   /* End numeric keypad */
 };
 
+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 
@@ -881,6 +901,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;
