--- gtk+-2.20.1/modules/input/gtkimcontextxim.c.orig 2010-04-09 05:07:00.000000000 +0100
+++ gtk+-2.20.1/modules/input/gtkimcontextxim.c 2012-03-27 15:39:22.779102185 +0100
@@ -145,6 +145,8 @@
static void xim_info_display_closed (GdkDisplay *display,
gboolean is_error,
GtkXIMInfo *info);
+static void xim_instantiate_callback (Display *display, XPointer client_data,
+ XPointer call_data);
static GObjectClass *parent_class;
@@ -410,6 +412,26 @@
if (info->display_closed_cb)
g_signal_handler_disconnect (display, info->display_closed_cb);
+ if (info->reconnecting)
+ {
+ GdkDisplay *display;
+
+ display = gdk_screen_get_display (info->screen);
+ XUnregisterIMInstantiateCallback (GDK_DISPLAY_XDISPLAY (display),
+ NULL, NULL, NULL,
+ xim_instantiate_callback,
+ (XPointer)info);
+ }
+ else if (info->im)
+ {
+ XIMCallback im_destroy_callback;
+
+ im_destroy_callback.client_data = NULL;
+ im_destroy_callback.callback = NULL;
+ XSetIMValues (info->im,
+ XNDestroyCallback, &im_destroy_callback,
+ NULL);
+ }
if (info->xim_styles)
XFree (info->xim_styles);
g_free (info->locale);