changeset 17721:4ebed8fa4fcb

(selection_data_to_lisp_data): If TYPE is `STRING' and DATA contains 8-bit codes, decode them as Latin-1 characters. (lisp_data_to_selection_data): Supply 4th arg TABLE as Qnil to find_charset_in_str.
author Kenichi Handa <handa@m17n.org>
date Sat, 10 May 1997 03:37:01 +0000
parents 530ee47cb56b
children 27df69e20b98
files src/xselect.c
diffstat 1 files changed, 22 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/xselect.c	Sat May 10 03:37:01 1997 +0000
+++ b/src/xselect.c	Sat May 10 03:37:01 1997 +0000
@@ -1463,14 +1463,31 @@
   else if (format == 8)
     {
       Lisp_Object str;
+      int require_encoding = 0;
 
-      if (type != dpyinfo->Xatom_TEXT && type != dpyinfo->Xatom_COMPOUND_TEXT)
+      /* If TYPE is `TEXT' or `COMPOUND_TEXT', we should decode DATA
+	 to Emacs internal format because DATA may be encoded in
+	 compound text format.  In addtion, if TYPE is `STRING' and
+	 DATA contains any 8-bit Latin-1 code, we should also decode
+	 it.  */
+      if (type == dpyinfo->Xatom_TEXT || type == dpyinfo->Xatom_COMPOUND_TEXT)
+	require_encoding = 1;
+      else if (type == XA_STRING)
+	{
+	  int i;
+	  for (i = 0; i < size; i++)
+	    {
+	      if (data[i] >= 0x80)
+		{
+		  require_encoding = 1;
+		  break;
+		}
+	    }
+	}
+      if (!require_encoding)
 	str = make_string ((char *) data, size);
       else
 	{
-	  /* If TYPE is `TEXT' or `COMPOUND_TEXT', we should decode
-	     DATA to Emacs internal format because DATA may be
-	     encoded in compound text format.  */
 	  int bufsize, dummy;
 	  unsigned char *buf;
 	  struct coding_system coding;
@@ -1588,7 +1605,7 @@
       bzero (charsets, MAX_CHARSET + 1);
       num = ((*size_ret <= 1)	/* Check the possibility of short cut.  */
 	     ? 0
-	     : find_charset_in_str (*data_ret, *size_ret, charsets));
+	     : find_charset_in_str (*data_ret, *size_ret, charsets, Qnil));
 
       if (!num || (num == 1 && charsets[CHARSET_ASCII]))
 	{