diff options
Diffstat (limited to 'src/gui_xim.c')
-rw-r--r-- | src/gui_xim.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/gui_xim.c b/src/gui_xim.c index 6d72ef1d6..4bd1a2eed 100644 --- a/src/gui_xim.c +++ b/src/gui_xim.c @@ -117,7 +117,7 @@ call_imstatusfunc(void) void free_xim_stuff(void) { -#if defined(FEAT_EVAL) && \ +# if defined(FEAT_EVAL) && \ (defined(FEAT_XIM) || defined(IME_WITHOUT_XIM) || defined(VIMDLL)) free_callback(&imaf_cb); free_callback(&imsf_cb); @@ -125,6 +125,24 @@ free_xim_stuff(void) } #endif +/* + * Mark the global 'imactivatefunc' and 'imstatusfunc' callbacks with 'copyID' + * so that they are not garbage collected. + */ + int +set_ref_in_im_funcs(int copyID UNUSED) +{ + int abort = FALSE; + +#if defined(FEAT_EVAL) && \ + (defined(FEAT_XIM) || defined(IME_WITHOUT_XIM) || defined(VIMDLL)) + abort = set_ref_in_callback(&imaf_cb, copyID); + abort = abort || set_ref_in_callback(&imsf_cb, copyID); +#endif + + return abort; +} + #if defined(FEAT_XIM) || defined(PROTO) |