Commit 51f3cc3b authored by Dave Love's avatar Dave Love
Browse files

(use_xim): Initialize.

(xim_open_dpy, xim_initialize, xim_close_dpy): Use use_xim.
(x_term_init): Maybe set use_xim.
parent 7ad6faa7
...@@ -158,6 +158,8 @@ extern void _XEditResCheckMessages (); ...@@ -158,6 +158,8 @@ extern void _XEditResCheckMessages ();
#define abs(x) ((x) < 0 ? -(x) : (x)) #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. */ /* Non-nil means Emacs uses toolkit scroll bars. */
...@@ -6461,7 +6463,7 @@ handle_one_xevent (dpyinfo, eventp, bufp_r, numcharsp, finish) ...@@ -6461,7 +6463,7 @@ handle_one_xevent (dpyinfo, eventp, bufp_r, numcharsp, finish)
require = decoding_buffer_size (&coding, nbytes); require = decoding_buffer_size (&coding, nbytes);
p = (unsigned char *) alloca (require); p = (unsigned char *) alloca (require);
coding.mode |= CODING_MODE_LAST_BLOCK; coding.mode |= CODING_MODE_LAST_BLOCK;
/* We explicitely disable composition /* We explicitly disable composition
handling because key data should handling because key data should
not contain any composition not contain any composition
sequence. */ sequence. */
...@@ -8025,31 +8027,33 @@ xim_open_dpy (dpyinfo, resource_name) ...@@ -8025,31 +8027,33 @@ xim_open_dpy (dpyinfo, resource_name)
struct x_display_info *dpyinfo; struct x_display_info *dpyinfo;
char *resource_name; char *resource_name;
{ {
#ifdef USE_XIM
XIM xim; XIM xim;
xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name, EMACS_CLASS); if (use_xim)
dpyinfo->xim = xim;
if (xim)
{ {
xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name,
EMACS_CLASS);
dpyinfo->xim = xim;
if (xim)
{
#ifdef HAVE_X11R6 #ifdef HAVE_X11R6
XIMCallback destroy; XIMCallback destroy;
#endif #endif
/* Get supported styles and XIM values. */ /* Get supported styles and XIM values. */
XGetIMValues (xim, XNQueryInputStyle, &dpyinfo->xim_styles, NULL); XGetIMValues (xim, XNQueryInputStyle, &dpyinfo->xim_styles, NULL);
#ifdef HAVE_X11R6 #ifdef HAVE_X11R6
destroy.callback = xim_destroy_callback; destroy.callback = xim_destroy_callback;
destroy.client_data = (XPointer)dpyinfo; destroy.client_data = (XPointer)dpyinfo;
XSetIMValues (xim, XNDestroyCallback, &destroy, NULL); XSetIMValues (xim, XNDestroyCallback, &destroy, NULL);
#endif #endif
}
} }
#else /* not USE_XIM */ else
dpyinfo->xim = NULL; dpyinfo->xim = NULL;
#endif /* not USE_XIM */
} }
...@@ -8123,32 +8127,33 @@ xim_initialize (dpyinfo, resource_name) ...@@ -8123,32 +8127,33 @@ xim_initialize (dpyinfo, resource_name)
struct x_display_info *dpyinfo; struct x_display_info *dpyinfo;
char *resource_name; char *resource_name;
{ {
#ifdef USE_XIM if (use_xim)
{
#ifdef HAVE_X11R6_XIM #ifdef HAVE_X11R6_XIM
struct xim_inst_t *xim_inst; struct xim_inst_t *xim_inst;
int len; int len;
dpyinfo->xim = NULL; dpyinfo->xim = NULL;
xim_inst = (struct xim_inst_t *) xmalloc (sizeof (struct xim_inst_t)); xim_inst = (struct xim_inst_t *) xmalloc (sizeof (struct xim_inst_t));
xim_inst->dpyinfo = dpyinfo; xim_inst->dpyinfo = dpyinfo;
len = strlen (resource_name); len = strlen (resource_name);
xim_inst->resource_name = (char *) xmalloc (len + 1); xim_inst->resource_name = (char *) xmalloc (len + 1);
bcopy (resource_name, xim_inst->resource_name, len + 1); bcopy (resource_name, xim_inst->resource_name, len + 1);
XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
resource_name, EMACS_CLASS, resource_name, EMACS_CLASS,
xim_instantiate_callback, xim_instantiate_callback,
/* Fixme: This is XPointer in /* Fixme: This is XPointer in
XFree86 but (XPointer *) on XFree86 but (XPointer *) on
Tru64, at least. */ Tru64, at least. */
(XPointer) xim_inst); (XPointer) xim_inst);
#else /* not HAVE_X11R6_XIM */ #else /* not HAVE_X11R6_XIM */
dpyinfo->xim = NULL; dpyinfo->xim = NULL;
xim_open_dpy (dpyinfo, resource_name); xim_open_dpy (dpyinfo, resource_name);
#endif /* not HAVE_X11R6_XIM */ #endif /* not HAVE_X11R6_XIM */
#else /* not USE_XIM */ }
dpyinfo->xim = NULL; else
#endif /* not USE_XIM */ dpyinfo->xim = NULL;
} }
...@@ -8158,18 +8163,19 @@ static void ...@@ -8158,18 +8163,19 @@ static void
xim_close_dpy (dpyinfo) xim_close_dpy (dpyinfo)
struct x_display_info *dpyinfo; struct x_display_info *dpyinfo;
{ {
#ifdef USE_XIM if (use_xim)
{
#ifdef HAVE_X11R6_XIM #ifdef HAVE_X11R6_XIM
if (dpyinfo->display) if (dpyinfo->display)
XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
NULL, EMACS_CLASS, NULL, EMACS_CLASS,
xim_instantiate_callback, NULL); xim_instantiate_callback, NULL);
#endif /* not HAVE_X11R6_XIM */ #endif /* not HAVE_X11R6_XIM */
if (dpyinfo->display) if (dpyinfo->display)
XCloseIM (dpyinfo->xim); XCloseIM (dpyinfo->xim);
dpyinfo->xim = NULL; dpyinfo->xim = NULL;
XFree (dpyinfo->xim_styles); XFree (dpyinfo->xim_styles);
#endif /* USE_XIM */ }
} }
#endif /* not HAVE_X11R6_XIM */ #endif /* not HAVE_X11R6_XIM */
...@@ -10536,6 +10542,18 @@ x_term_init (display_name, xrm_option, resource_name) ...@@ -10536,6 +10542,18 @@ x_term_init (display_name, xrm_option, resource_name)
|| !strcmp (SDATA (value), "on"))) || !strcmp (SDATA (value), "on")))
XSynchronize (dpyinfo->display, True); 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; UNBLOCK_INPUT;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment