# HG changeset patch # User Dave Love # Date 1053555110 0 # Node ID e9be5c94117e88517d0c165fb04cbe916f6f4c85 # Parent d0f7882a3321158b92e2b11ba1aa19caceea9516 (use_xim): Initialize. (xim_open_dpy, xim_initialize, xim_close_dpy): Use use_xim. (x_term_init): Maybe set use_xim. diff -r d0f7882a3321 -r e9be5c94117e src/xterm.c --- a/src/xterm.c Wed May 21 22:11:31 2003 +0000 +++ b/src/xterm.c Wed May 21 22:11:50 2003 +0000 @@ -158,6 +158,8 @@ #define abs(x) ((x) < 0 ? -(x) : (x)) +/* Default to using XIM if available. */ +int use_xim = 1; /* Non-nil means Emacs uses toolkit scroll bars. */ @@ -6461,7 +6463,7 @@ require = decoding_buffer_size (&coding, nbytes); p = (unsigned char *) alloca (require); coding.mode |= CODING_MODE_LAST_BLOCK; - /* We explicitely disable composition + /* We explicitly disable composition handling because key data should not contain any composition sequence. */ @@ -8025,31 +8027,33 @@ struct x_display_info *dpyinfo; char *resource_name; { -#ifdef USE_XIM XIM xim; - xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name, EMACS_CLASS); - dpyinfo->xim = xim; - - if (xim) - { + if (use_xim) + { + xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name, + EMACS_CLASS); + dpyinfo->xim = xim; + + if (xim) + { #ifdef HAVE_X11R6 - XIMCallback destroy; -#endif - - /* Get supported styles and XIM values. */ - XGetIMValues (xim, XNQueryInputStyle, &dpyinfo->xim_styles, NULL); + XIMCallback destroy; +#endif + + /* Get supported styles and XIM values. */ + XGetIMValues (xim, XNQueryInputStyle, &dpyinfo->xim_styles, NULL); #ifdef HAVE_X11R6 - destroy.callback = xim_destroy_callback; - destroy.client_data = (XPointer)dpyinfo; - XSetIMValues (xim, XNDestroyCallback, &destroy, NULL); -#endif - } - -#else /* not USE_XIM */ - dpyinfo->xim = NULL; -#endif /* not USE_XIM */ + destroy.callback = xim_destroy_callback; + destroy.client_data = (XPointer)dpyinfo; + XSetIMValues (xim, XNDestroyCallback, &destroy, NULL); +#endif + } + } + + else + dpyinfo->xim = NULL; } @@ -8123,32 +8127,33 @@ struct x_display_info *dpyinfo; char *resource_name; { -#ifdef USE_XIM + if (use_xim) + { #ifdef HAVE_X11R6_XIM - struct xim_inst_t *xim_inst; - int len; - - dpyinfo->xim = NULL; - xim_inst = (struct xim_inst_t *) xmalloc (sizeof (struct xim_inst_t)); - xim_inst->dpyinfo = dpyinfo; - len = strlen (resource_name); - xim_inst->resource_name = (char *) xmalloc (len + 1); - bcopy (resource_name, xim_inst->resource_name, len + 1); - XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, - resource_name, EMACS_CLASS, - xim_instantiate_callback, - /* Fixme: This is XPointer in - XFree86 but (XPointer *) on - Tru64, at least. */ - (XPointer) xim_inst); + struct xim_inst_t *xim_inst; + int len; + + dpyinfo->xim = NULL; + xim_inst = (struct xim_inst_t *) xmalloc (sizeof (struct xim_inst_t)); + xim_inst->dpyinfo = dpyinfo; + len = strlen (resource_name); + xim_inst->resource_name = (char *) xmalloc (len + 1); + bcopy (resource_name, xim_inst->resource_name, len + 1); + XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, + resource_name, EMACS_CLASS, + xim_instantiate_callback, + /* Fixme: This is XPointer in + XFree86 but (XPointer *) on + Tru64, at least. */ + (XPointer) xim_inst); #else /* not HAVE_X11R6_XIM */ - dpyinfo->xim = NULL; - xim_open_dpy (dpyinfo, resource_name); + dpyinfo->xim = NULL; + xim_open_dpy (dpyinfo, resource_name); #endif /* not HAVE_X11R6_XIM */ -#else /* not USE_XIM */ - dpyinfo->xim = NULL; -#endif /* not USE_XIM */ + } + else + dpyinfo->xim = NULL; } @@ -8158,18 +8163,19 @@ xim_close_dpy (dpyinfo) struct x_display_info *dpyinfo; { -#ifdef USE_XIM + if (use_xim) + { #ifdef HAVE_X11R6_XIM - if (dpyinfo->display) - XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, - NULL, EMACS_CLASS, - xim_instantiate_callback, NULL); + if (dpyinfo->display) + XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, + NULL, EMACS_CLASS, + xim_instantiate_callback, NULL); #endif /* not HAVE_X11R6_XIM */ - if (dpyinfo->display) - XCloseIM (dpyinfo->xim); - dpyinfo->xim = NULL; - XFree (dpyinfo->xim_styles); -#endif /* USE_XIM */ + if (dpyinfo->display) + XCloseIM (dpyinfo->xim); + dpyinfo->xim = NULL; + XFree (dpyinfo->xim_styles); + } } #endif /* not HAVE_X11R6_XIM */ @@ -10536,6 +10542,18 @@ || !strcmp (SDATA (value), "on"))) XSynchronize (dpyinfo->display, True); } + + { + Lisp_Object value; + value = display_x_get_resource (dpyinfo, + build_string ("useXIM"), + build_string ("UseXIM"), + Qnil, Qnil); + if (STRINGP (value) + && (!strcmp (XSTRING (value)->data, "false") + || !strcmp (XSTRING (value)->data, "off"))) + use_xim = 0; + } UNBLOCK_INPUT;