]> git.eshelyaron.com Git - emacs.git/commitdiff
(selection_data_to_lisp_data): If TYPE is `STRING'
authorKenichi Handa <handa@m17n.org>
Sat, 10 May 1997 03:37:01 +0000 (03:37 +0000)
committerKenichi Handa <handa@m17n.org>
Sat, 10 May 1997 03:37:01 +0000 (03:37 +0000)
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.

src/xselect.c

index 8a8bf362dc8c04c30947a45f9b51169c5509a0a4..cf2fe19a4ae41100e817c95ba808a8389aa3ed16 100644 (file)
@@ -1463,14 +1463,31 @@ selection_data_to_lisp_data (display, data, size, type, format)
   else if (format == 8)
     {
       Lisp_Object str;
-
-      if (type != dpyinfo->Xatom_TEXT && type != dpyinfo->Xatom_COMPOUND_TEXT)
+      int require_encoding = 0;
+
+      /* 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 @@ lisp_data_to_selection_data (display, obj,
       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]))
        {