]> Pileus Git - ~andy/gtk/blobdiff - modules/input/gtkimcontextxim.c
Cleanups
[~andy/gtk] / modules / input / gtkimcontextxim.c
index 220a04a8f25e09f8afd9965b3af4283b47138c79..68f6ec4f9d91abf6e0d36c0efaf0d3b892b80a78 100644 (file)
@@ -147,7 +147,7 @@ static GObjectClass *parent_class;
 
 GType gtk_type_im_context_xim = 0;
 
-GSList *open_ims = NULL;
+static GSList *open_ims = NULL;
 
 /* List of status windows for different toplevels */
 static GSList *status_windows = NULL;
@@ -565,6 +565,30 @@ gtk_im_context_xim_finalize (GObject *obj)
 
   context_xim->finalizing = TRUE;
 
+  if (context_xim->im_info && !context_xim->im_info->ics->next) 
+    {
+      if (context_xim->im_info->reconnecting)
+       {
+         GdkDisplay *display;
+
+         display = gdk_screen_get_display (context_xim->im_info->screen);
+         XUnregisterIMInstantiateCallback (GDK_DISPLAY_XDISPLAY (display),
+                                           NULL, NULL, NULL,
+                                           xim_instantiate_callback,
+                                           (XPointer)context_xim->im_info);
+       }
+      else
+       {
+         XIMCallback im_destroy_callback;
+
+         im_destroy_callback.client_data = NULL;
+         im_destroy_callback.callback = NULL;
+         XSetIMValues (context_xim->im_info->im,
+                       XNDestroyCallback, &im_destroy_callback,
+                       NULL);
+       }
+    }
+
   set_ic_client_window (context_xim, NULL);
 
   g_free (context_xim->locale);