--- gtk/gtkimcontextsimple.c.ORIGINAL	2009-01-11 15:03:53.000000000 +0000
+++ gtk/gtkimcontextsimple.c	2009-01-12 01:58:53.000000000 +0000
@@ -41,19 +41,19 @@
 
 struct _GtkComposeTableCompact
 {
-  const guint16 *data;
+  const guint32 *data;
   gint max_seq_len;
   gint n_index_size;
   gint n_index_stride;
 };
 
 /* This file contains the table of the compose sequences, 
- * static const guint16 gtk_compose_seqs_compact[] = {}
+ * static const guint32 gtk_compose_seqs_compact[] = {}
  * IT is generated from the compose-parse.py script.
  */
 #include "gtkimcontextsimpleseqs.h"
 
-/* From the values below, the value 23 means the number of different first keysyms 
+/* From the values below, the value 28 means the number of different first keysyms 
  * that exist in the Compose file (from Xorg). When running compose-parse.py without 
  * parameters, you get the count that you can put here. Needed when updating the
  * gtkimcontextsimpleseqs.h header file (contains the compose sequences).
@@ -61,7 +61,7 @@
 static const GtkComposeTableCompact gtk_compose_table_compact = {
   gtk_compose_seqs_compact,
   5,
-  23,
+  28,
   6
 };
 
@@ -171,7 +171,7 @@
 compare_seq_index (const void *key, const void *value)
 {
   const guint *keysyms = key;
-  const guint16 *seq = value;
+  const guint32 *seq = value;
 
   if (keysyms[0] < seq[0])
     return -1;
@@ -186,7 +186,7 @@
 {
   int i = 0;
   const guint *keysyms = key;
-  const guint16 *seq = value;
+  const guint32 *seq = value;
 
   while (keysyms[i])
     {
@@ -276,8 +276,8 @@
 	     gint                   n_compose)
 {
   gint row_stride;
-  guint16 *seq_index;
-  guint16 *seq; 
+  guint32 *seq_index;
+  guint32 *seq; 
   gint i;
 
   /* Will never match, if the sequence in the compose buffer is longer
@@ -288,7 +288,7 @@
   
   seq_index = bsearch (context_simple->compose_buffer,
 		 table->data, table->n_index_size,
-		 sizeof (guint16) *  table->n_index_stride, 
+		 sizeof (guint32) *  table->n_index_stride, 
 		 compare_seq_index);
 
   if (!seq_index)
@@ -307,7 +307,7 @@
         {
 	  seq = bsearch (context_simple->compose_buffer + 1,
 		 table->data + seq_index[i], (seq_index[i+1] - seq_index[i]) / row_stride,
-		 sizeof (guint16) *  row_stride, 
+		 sizeof (guint32) *  row_stride, 
 		 compare_seq);
 
 	  if (seq)
@@ -458,12 +458,24 @@
 	    CASE (abovering, 0x030A);
 	    CASE (doubleacute, 0x030B);
 	    CASE (caron, 0x030C);
+	    /* Due to keysym reuse in Xorg, we set this to 0x0314 for this GTK+ release.
+ 	     * This value should change in the next release to 0x030F.
+ 	     */
+	    CASE (doublegrave, 0x0314);
+	    CASE (invertedbreve, 0x0311);
 	    CASE (abovecomma, 0x0313);         /* Equivalent to psili */
 	    CASE (abovereversedcomma, 0x0314); /* Equivalent to dasia */
 	    CASE (horn, 0x031B);	/* Legacy use for psili, 0x313 (or 0x343). */
 	    CASE (belowdot, 0x0323);
+	    CASE (belowdiaeresis, 0x0324);
+	    CASE (belowring, 0x0325);
+	    CASE (belowcomma, 0x0326);
 	    CASE (cedilla, 0x0327);
 	    CASE (ogonek, 0x0328);	/* Legacy use for dasia, 0x314.*/
+	    CASE (belowcircumflex, 0x032D);
+	    CASE (belowbreve, 0x032E);
+	    CASE (belowtilde, 0x0330);
+	    CASE (belowmacron, 0x0331); 
 	    CASE (iota, 0x0345);
 	    CASE (voiced_sound, 0x3099);	/* Per Markus Kuhn keysyms.txt file. */
 	    CASE (semivoiced_sound, 0x309A);	/* Per Markus Kuhn keysyms.txt file. */
@@ -472,10 +484,16 @@
  	     * xorg are fully updated.
  	     */
             /* Workaround for typo in 1.4.x xserver-xorg */
-	    case 0xfe66: combination_buffer[i+1] = 0x314; break;
-	    /* CASE (dasia, 0x314); */
-	    /* CASE (perispomeni, 0x342); */
-	    /* CASE (psili, 0x343); */
+	    /* case 0xfe66: combination_buffer[i+1] = 0x314; break;
+             * DISABLED, because value (0xfe66) is now reused for doublegrave.        
+ 	     */
+	    
+	    /* The following dead keys do not have an equivalent combining diacritic,
+ 	     * thus cannot be composed to produce a new Unicode character.
+ 	     * 1. stroke
+ 	     * 2. currency
+ 	     */
+
 #undef CASE
 	    default:
 	      combination_buffer[i+1] = gdk_keyval_to_unicode (context_simple->compose_buffer[i]);
