summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimos Xenitellis <simos@src.gnome.org>2008-10-02 22:34:07 +0000
committerSimos Xenitellis <simos@src.gnome.org>2008-10-02 22:34:07 +0000
commite20d555abea8cfd3c665bdb9d9d21346b5337f36 (patch)
tree4ce9a78b47768ef6c8659e565d60b18d00724c5c
parent1d9431b920bf094ba587c4bb0a087ad286d7f195 (diff)
downloadgdk-pixbuf-e20d555abea8cfd3c665bdb9d9d21346b5337f36.tar.gz
Fixed Bug 554506 – combining diacritics broken, became deadkeys
svn path=/branches/gtk-2-14/; revision=21579
-rw-r--r--ChangeLog7
-rw-r--r--gtk/gtkimcontextsimple.c12
2 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e856a9d4e..cd2993f71 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-10-02 Simos Xenitellis <simos@gnome.org>
+
+ Bug 554506 – combining diacritics broken, became deadkeys
+
+ * gtk/gtkimcontextsimple.c: added check if keysym is greater
+ than 0x1000000, in this case it is not a dead key.
+
2008-10-02 Christian Persch
Bug 554704 – gtkfilesystemmodel does too much work
diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c
index 459bdd7ea..a9eeb944b 100644
--- a/gtk/gtkimcontextsimple.c
+++ b/gtk/gtkimcontextsimple.c
@@ -407,11 +407,19 @@ check_normalize_nfc (gunichar* combination_buffer, gint n_compose)
return FALSE;
}
-/* When updating the table of the compose sequences, also update here.
+/* Checks if a keysym is a dead key. Dead key keysym values are defined in
+ * ../gdk/gdkkeysyms.h and the first is GDK_dead_grave. As X.Org is updated,
+ * more dead keys are added and we need to update the upper limit.
+ * Also checks if the keysym belongs to the non-spacing mark Unicode category,
+ * by invoking gdk_keyval_to_unicode(). For keysyms like 0x1000000 + 0x0301,
+ * it converts them to 0x301, which makes g_unichar_type() report them as
+ * non-spacing mark. Thus, we check that the value is less then 0x1000000.
+ * check_algorithmically() does not handle keysyms > 0x1000000.
*/
#define IS_DEAD_KEY(k) \
(((k) >= GDK_dead_grave && (k) <= (GDK_dead_dasia+1)) || \
- g_unichar_type (gdk_keyval_to_unicode (k)) == G_UNICODE_NON_SPACING_MARK)
+ ((g_unichar_type (gdk_keyval_to_unicode (k)) == G_UNICODE_NON_SPACING_MARK) && \
+ ((k) < 0x1000000)))
static gboolean
check_algorithmically (GtkIMContextSimple *context_simple,