--- gtkimcontextsimple.c.ORIGINAL	2009-01-29 15:11:02.000000000 +0000
+++ gtkimcontextsimple.c	2009-01-29 17:55:29.000000000 +0000
@@ -28,6 +28,7 @@
 #include "gtkwidget.h"
 #include "gtkintl.h"
 #include "gtkalias.h"
+#include "gtkimcontextsimplemultiseqs.h"
 
 typedef struct _GtkComposeTable GtkComposeTable;
 typedef struct _GtkComposeTableCompact GtkComposeTableCompact;
@@ -36,6 +37,7 @@
 {
   const guint16 *data;
   gint max_seq_len;
+  gint max_codepoint_len;
   gint n_seqs;
 };
 
@@ -65,6 +67,13 @@
   6
 };
 
+static const GtkComposeTable gtk_compose_table_multi = {
+  gtk_compose_seqs_multi,
+  1,
+  2,
+  10,
+};
+
 static const guint16 gtk_compose_ignore[] = {
   GDK_Shift_L,
   GDK_Shift_R,
@@ -206,8 +215,9 @@
 	     const GtkComposeTable *table,
 	     gint                   n_compose)
 {
-  gint row_stride = table->max_seq_len + 2; 
+  gint row_stride = table->max_seq_len + table->max_codepoint_len; 
   guint16 *seq; 
+  gint i;
   
   /* Will never match, if the sequence in the compose buffer is longer
    * than the sequences in the table.  Further, compare_seq (key, val)
@@ -260,7 +270,9 @@
 		}
 	    }
 
-	  gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value);
+          for (i = 0; i < table->max_codepoint_len && seq[table->max_seq_len + i] != 0; i++ )
+	  	gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), 
+                                          seq[table->max_seq_len + i]);
 	  context_simple->compose_buffer[0] = 0;
 	}
       
@@ -1027,6 +1039,10 @@
   
       if (check_algorithmically (context_simple, n_compose))
 	return TRUE;
+
+      if (check_table (context_simple, &gtk_compose_table_multi, n_compose))
+        return TRUE;
+
     }
   
   /* The current compose_buffer doesn't match anything */
