Mercurial > emacs
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])) {