forked from AuroraMiddleware/gtk
Fix some live cycle issues
svn path=/trunk/; revision=18888
This commit is contained in:
parent
11a4e7dce7
commit
35dc88e778
@ -1,3 +1,8 @@
|
|||||||
|
2007-10-07 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* modules/input/gtkimcontextxim.c: Clean up issues around
|
||||||
|
with life cycle handling. (#483223, Karl Tomlinson)
|
||||||
|
|
||||||
2007-10-05 Murray Cumming <murrayc@murrayc.com>
|
2007-10-05 Murray Cumming <murrayc@murrayc.com>
|
||||||
|
|
||||||
* gtk/gtkprintoperation.c: (print_pages_idle):
|
* gtk/gtkprintoperation.c: (print_pages_idle):
|
||||||
|
@ -86,6 +86,7 @@ struct _GtkXIMInfo
|
|||||||
GtkSettings *settings;
|
GtkSettings *settings;
|
||||||
gulong status_set;
|
gulong status_set;
|
||||||
gulong preedit_set;
|
gulong preedit_set;
|
||||||
|
gulong display_closed_cb;
|
||||||
XIMStyles *xim_styles;
|
XIMStyles *xim_styles;
|
||||||
GSList *ics;
|
GSList *ics;
|
||||||
|
|
||||||
@ -143,6 +144,10 @@ static void xim_destroy_callback (XIM xim,
|
|||||||
XPointer call_data);
|
XPointer call_data);
|
||||||
|
|
||||||
static XIC gtk_im_context_xim_get_ic (GtkIMContextXIM *context_xim);
|
static XIC gtk_im_context_xim_get_ic (GtkIMContextXIM *context_xim);
|
||||||
|
static void xim_info_display_closed (GdkDisplay *display,
|
||||||
|
gboolean is_error,
|
||||||
|
GtkXIMInfo *info);
|
||||||
|
|
||||||
static GObjectClass *parent_class;
|
static GObjectClass *parent_class;
|
||||||
|
|
||||||
GType gtk_type_im_context_xim = 0;
|
GType gtk_type_im_context_xim = 0;
|
||||||
@ -307,6 +312,7 @@ setup_im (GtkXIMInfo *info)
|
|||||||
{
|
{
|
||||||
XIMValuesList *ic_values = NULL;
|
XIMValuesList *ic_values = NULL;
|
||||||
XIMCallback im_destroy_callback;
|
XIMCallback im_destroy_callback;
|
||||||
|
GdkDisplay *display;
|
||||||
|
|
||||||
if (info->im == NULL)
|
if (info->im == NULL)
|
||||||
return;
|
return;
|
||||||
@ -376,6 +382,10 @@ setup_im (GtkXIMInfo *info)
|
|||||||
|
|
||||||
status_style_change (info);
|
status_style_change (info);
|
||||||
preedit_style_change (info);
|
preedit_style_change (info);
|
||||||
|
|
||||||
|
display = gdk_screen_get_display (info->screen);
|
||||||
|
info->display_closed_cb = g_signal_connect (display, "closed",
|
||||||
|
G_CALLBACK (xim_info_display_closed), info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -395,10 +405,14 @@ xim_info_display_closed (GdkDisplay *display,
|
|||||||
|
|
||||||
g_slist_free (ics);
|
g_slist_free (ics);
|
||||||
|
|
||||||
|
if (info->status_set)
|
||||||
g_signal_handler_disconnect (info->settings, info->status_set);
|
g_signal_handler_disconnect (info->settings, info->status_set);
|
||||||
|
if (info->preedit_set)
|
||||||
g_signal_handler_disconnect (info->settings, info->preedit_set);
|
g_signal_handler_disconnect (info->settings, info->preedit_set);
|
||||||
|
if (info->display_closed_cb)
|
||||||
|
g_signal_handler_disconnect (display, info->display_closed_cb);
|
||||||
|
|
||||||
XFree (info->xim_styles->supported_styles);
|
if (info->xim_styles)
|
||||||
XFree (info->xim_styles);
|
XFree (info->xim_styles);
|
||||||
g_free (info->locale);
|
g_free (info->locale);
|
||||||
|
|
||||||
@ -455,9 +469,6 @@ xim_info_try_im (GtkXIMInfo *info)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setup_im (info);
|
setup_im (info);
|
||||||
|
|
||||||
g_signal_connect (display, "closed",
|
|
||||||
G_CALLBACK (xim_info_display_closed), info);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,7 +482,9 @@ xim_destroy_callback (XIM xim,
|
|||||||
info->im = NULL;
|
info->im = NULL;
|
||||||
|
|
||||||
g_signal_handler_disconnect (info->settings, info->status_set);
|
g_signal_handler_disconnect (info->settings, info->status_set);
|
||||||
|
info->status_set = 0;
|
||||||
g_signal_handler_disconnect (info->settings, info->preedit_set);
|
g_signal_handler_disconnect (info->settings, info->preedit_set);
|
||||||
|
info->preedit_set = 0;
|
||||||
|
|
||||||
reinitialize_all_ics (info);
|
reinitialize_all_ics (info);
|
||||||
xim_info_try_im (info);
|
xim_info_try_im (info);
|
||||||
@ -520,6 +533,7 @@ get_im (GdkWindow *client_window,
|
|||||||
info->settings = NULL;
|
info->settings = NULL;
|
||||||
info->preedit_set = 0;
|
info->preedit_set = 0;
|
||||||
info->status_set = 0;
|
info->status_set = 0;
|
||||||
|
info->display_closed_cb = 0;
|
||||||
info->ics = NULL;
|
info->ics = NULL;
|
||||||
info->reconnecting = FALSE;
|
info->reconnecting = FALSE;
|
||||||
info->im = NULL;
|
info->im = NULL;
|
||||||
@ -1860,4 +1874,13 @@ gtk_im_context_xim_shutdown (void)
|
|||||||
{
|
{
|
||||||
while (status_windows)
|
while (status_windows)
|
||||||
status_window_free (status_windows->data);
|
status_window_free (status_windows->data);
|
||||||
|
|
||||||
|
while (open_ims)
|
||||||
|
{
|
||||||
|
GtkXIMInfo *info = open_ims->data;
|
||||||
|
GdkDisplay *display = gdk_screen_get_display (info->screen);
|
||||||
|
|
||||||
|
xim_info_display_closed (display, FALSE, info);
|
||||||
|
open_ims = g_slist_remove_link (open_ims, open_ims);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user