diff -uNr vte-0.16.13.orig/src/vte.c vte-0.16.13/src/vte.c --- vte-0.16.13.orig/src/vte.c 2008-02-09 03:46:11.000000000 +0800 +++ vte-0.16.13/src/vte.c 2008-03-13 16:08:18.000000000 +0800 @@ -4250,6 +4250,19 @@ /* We steal many keypad keys here. */ if (!terminal->pvt->im_preedit_active) { + + /* FIX: Many input methods, like gcin, xcin, and oxim, */ + /* uses GDK_MOD1 as function key, */ + /* libvte should not steal GDK_MOD1 here. */ + /* Let the input method at this one first. */ + if (GTK_WIDGET_REALIZED(terminal) && + gtk_im_context_filter_keypress(terminal->pvt->im_context, + event)) { + _vte_debug_print(VTE_DEBUG_EVENTS, + "Keypress taken by IM.\n"); + return TRUE; + } + switch (keyval) { case GDK_KP_Add: case GDK_KP_Subtract: @@ -4294,17 +4307,6 @@ } } - /* Let the input method at this one first. */ - if (!steal) { - if (GTK_WIDGET_REALIZED(terminal) && - gtk_im_context_filter_keypress(terminal->pvt->im_context, - event)) { - _vte_debug_print(VTE_DEBUG_EVENTS, - "Keypress taken by IM.\n"); - return TRUE; - } - } - /* Now figure out what to send to the child. */ if ((event->type == GDK_KEY_PRESS) && !modifier) { handled = FALSE;