*** ./XawIm.c.ORG	Mon Apr 18 09:13:31 1994
--- ./XawIm.c	Thu Aug 25 09:53:20 1994
***************
*** 419,424 ****
--- 419,438 ----
      return;
  }
  
+ static void
+ im_destroy(im, client_data, call_data)
+     XIM		im;
+     XPointer	client_data;		/* don't care */
+     XPointer	call_data;		/* don't care */
+ {
+     VendorShellWidget vw;
+     XawVendorShellExtPart * ve;
+ 
+     if (((vw = (VendorShellWidget)GetErrCnxt(im)) == NULL) ||
+ 	((ve = GetExtPart(vw)) == NULL)) return;
+     DestroyAllIM(ve);
+ }
+ 
  static int IOErrorHandler( error_im )
      XIM error_im;
  {
***************
*** 484,489 ****
--- 498,512 ----
  	    if (input_style == xim_styles->supported_styles[i]) {
  		ve->ic.input_style = input_style;
  		SetErrCnxt(ve->parent, xim);
+ 		{
+ 		    XIMCallback im_callback;
+ 
+ 		    im_callback.client_data = (XPointer)xim;
+ 		    im_callback.callback = (XIMProc)im_destroy;
+ 		    XSetIMValues(xim, XNDestroyCallback, (XPointer)&im_callback,
+ 				      NULL);
+ 		}
+ 
  /*		_XipSetIOErrorHandler(IOErrorHandler); */
  		ve->im.xim = xim;
  		XFree(xim_styles);
