From e20d555abea8cfd3c665bdb9d9d21346b5337f36 Mon Sep 17 00:00:00 2001 From: Simos Xenitellis Date: Thu, 2 Oct 2008 22:34:07 +0000 Subject: [PATCH] =?UTF-8?q?Fixed=20Bug=20554506=20=E2=80=93=20combining=20?= =?UTF-8?q?diacritics=20broken,=20became=20deadkeys?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/branches/gtk-2-14/; revision=21579 --- ChangeLog | 7 +++++++ gtk/gtkimcontextsimple.c | 12 ++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index e856a9d4eb..cd2993f715 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-10-02 Simos Xenitellis + + 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 459bdd7ea7..a9eeb944ba 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,