Avoid a segfault. (#309054)
2005-06-27 Matthias Clasen <mclasen@redhat.com> * modules/input/gtkimcontextxim.c (gtk_im_context_xim_finalize): Avoid a segfault. (#309054) * gdk/x11/gdkdisplay-x11.h (struct _GdkDisplayX11): Add fields for grab timestamps. * gdk/x11/gdkmain-x11.c (gdk_pointer_grab, gdk_keyboard_grab): Store grab timestamps when grabbing. * gdk/x11/gdkdisplay-x11.c (gdk_display_keyboard_ungrab) (gdk_display_pointer_ungrab): Don't unset the grab_window if the timestamps indicate that the ungrab will fails.
This commit is contained in:
committed by
Matthias Clasen
parent
ddd27f21a6
commit
c719b4bf3d
@ -567,20 +567,26 @@ gtk_im_context_xim_finalize (GObject *obj)
|
||||
|
||||
if (context_xim->im_info)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
XIMCallback im_destroy_callback;
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user