changeset 13232:e31057e55df7

(x_term_init, XTread_socket): Add HAVE_X_I18N support.
author Richard M. Stallman <rms@gnu.org>
date Tue, 17 Oct 1995 17:12:20 +0000
parents fb78cec8e440
children 8b29f638af52
files src/xterm.c
diffstat 1 files changed, 39 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Tue Oct 17 03:33:46 1995 +0000
+++ b/src/xterm.c	Tue Oct 17 17:12:20 1995 +0000
@@ -3265,6 +3265,9 @@
   int prefix;
   Lisp_Object part;
   struct x_display_info *dpyinfo;
+#ifdef HAVE_X_I18N
+  Status status_return;
+#endif
 
   if (interrupt_input_blocked)
     {
@@ -3339,6 +3342,11 @@
 			/* Since we set WM_TAKE_FOCUS, we must call
 			   XSetInputFocus explicitly.  But not if f is null,
 			   since that might be an event for a deleted frame.  */
+#ifdef HAVE_X_I18N
+			/* Not quite sure this is needed -pd */
+			if (f)
+			  XSetICFocus (FRAME_XIC (f));
+#endif
 			if (f)
 			  XSetInputFocus (event.xclient.display,
 					  event.xclient.window,
@@ -3645,8 +3653,25 @@
 					| dpyinfo->hyper_mod_mask
 					| dpyinfo->alt_mod_mask);
 
+#ifdef HAVE_X_I18N
+		  if (FRAME_XIC (f))
+		    {
+		      /* The necessity of the following line took me
+			 a full work-day to decipher from the docs!!  */
+		      if (XFilterEvent (&event, None))
+			break;
+		      nbytes = XmbLookupString (FRAME_XIC (f),
+						&event.xkey, copy_buffer,
+						80, &keysym,
+						&status_return);
+		    }
+		  else
+		    nbytes = XLookupString (&event.xkey, copy_buffer,
+					    80, &keysym, &compose_status);
+#else
 		  nbytes = XLookupString (&event.xkey, copy_buffer,
 					  80, &keysym, &compose_status);
+#endif
 
 		  orig_keysym = keysym;
 
@@ -3800,6 +3825,11 @@
 	      if (f)
 		x_new_focus_frame (dpyinfo, f);
 
+#ifdef HAVE_X_I18N
+	      if (f && FRAME_XIC (f))
+		XSetICFocus (FRAME_XIC (f));
+#endif
+
 #ifdef USE_X_TOOLKIT
 	      goto OTHER;
 #endif /* USE_X_TOOLKIT */
@@ -3838,6 +3868,11 @@
 	      if (f && f == dpyinfo->x_focus_frame)
 		x_new_focus_frame (dpyinfo, 0);
 
+#ifdef HAVE_X_I18N
+	      if (f && FRAME_XIC (f))
+		XUnsetICFocus (FRAME_XIC (f));
+#endif
+
 #ifdef USE_X_TOOLKIT
 	      goto OTHER;
 #endif /* USE_X_TOOLKIT */
@@ -5818,6 +5853,10 @@
       x_initialized = 1;
     }
 
+#ifdef HAVE_X_I18N
+  setlocale (LC_ALL, NULL);
+#endif
+
 #ifdef USE_X_TOOLKIT
   /* weiner@footloose.sps.mot.com reports that this causes
      errors with X11R5: