diff -uNr gaim-0.68.orig/src/gtkconv.c gaim-0.68/src/gtkconv.c --- gaim-0.68.orig/src/gtkconv.c 2003-09-07 01:22:47.000000000 +0900 +++ gaim-0.68/src/gtkconv.c 2003-09-07 01:25:08.000000000 +0900 @@ -1136,12 +1136,28 @@ GaimConversation *conv; GaimGtkConversation *gtkconv; GaimGtkWindow *gtkwin; + gboolean im_context_retval = FALSE; + static guint32 last_event_time; conv = (GaimConversation *)data; gtkconv = GAIM_GTK_CONVERSATION(conv); win = gaim_conversation_get_window(conv); gtkwin = GAIM_GTK_WINDOW(win); + /* + * Check if the input method handles this keyevent or we can use it. + * We need to check the event time, otherwise the gtk xim module gets into an event loop (bug?) + * Maybe this is not the best solution, but it works. + */ + + if (last_event_time != event->time) { + im_context_retval = gtk_im_context_filter_keypress(GTK_TEXT_VIEW(gtkconv->entry)->im_context, event); + } + last_event_time = event->time; + if (im_context_retval == TRUE) { + return TRUE; + } + if (event->keyval == GDK_Page_Up) { g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event");