[gtk+/gtk-2-24] gtk: add more OSX special casing for the deadacute and deaddoubleacute keys



commit c0102b30894401a9a1d6d93a972bcc6c37f1b5ac
Author: Michael Natterer <mitch lanedo com>
Date:   Fri Nov 30 14:39:42 2012 +0100

    gtk: add more OSX special casing for the deadacute and deaddoubleacute keys
    
    So " plus foo prduces foo-with-diaereses and ' plus c produces
    c-with-cedilla.

 gtk/gtkimcontextsimple.c |   52 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 39 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c
index ff82924..7e323cd 100644
--- a/gtk/gtkimcontextsimple.c
+++ b/gtk/gtkimcontextsimple.c
@@ -343,25 +343,51 @@ static gboolean
 check_quartz_special_cases (GtkIMContextSimple *context_simple,
                             gint                n_compose)
 {
-  if (n_compose == 2 &&
-      context_simple->compose_buffer[1] == GDK_space)
-    {
-      gunichar value = 0;
+  gunichar value = 0;
 
+  if (n_compose == 2)
+    {
       switch (context_simple->compose_buffer[0])
         {
-        case GDK_dead_doubleacute:
-          value = '"'; break;
+        case GDK_KEY_dead_doubleacute:
+          switch (context_simple->compose_buffer[1])
+            {
+            case GDK_KEY_dead_doubleacute:
+            case GDK_KEY_space:
+              value = '"'; break;
+
+            case 'a': value = GDK_KEY_adiaeresis; break;
+            case 'A': value = GDK_KEY_Adiaeresis; break;
+            case 'e': value = GDK_KEY_ediaeresis; break;
+            case 'E': value = GDK_KEY_Ediaeresis; break;
+            case 'i': value = GDK_KEY_idiaeresis; break;
+            case 'I': value = GDK_KEY_Idiaeresis; break;
+            case 'o': value = GDK_KEY_odiaeresis; break;
+            case 'O': value = GDK_KEY_Odiaeresis; break;
+            case 'u': value = GDK_KEY_udiaeresis; break;
+            case 'U': value = GDK_KEY_Udiaeresis; break;
+            case 'y': value = GDK_KEY_ydiaeresis; break;
+            case 'Y': value = 0x0178; break; /* should be GDK_KEY_Ydiaeresis ?? */
+            }
+          break;
+
+        case GDK_KEY_dead_acute:
+          switch (context_simple->compose_buffer[1])
+            {
+            case 'c': value = GDK_KEY_ccedilla; break;
+            case 'C': value = GDK_KEY_Ccedilla; break;
+            }
+          break;
         }
+    }
 
-      if (value > 0)
-        {
-          gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value);
-          context_simple->compose_buffer[0] = 0;
+  if (value > 0)
+    {
+      gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value);
+      context_simple->compose_buffer[0] = 0;
 
-          GTK_NOTE (MISC, g_print ("quartz: U+%04X\n", value));
-          return TRUE;
-        }
+      GTK_NOTE (MISC, g_print ("quartz: U+%04X\n", value));
+      return TRUE;
     }
 
   return FALSE;



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