From 3276b4fe6e4f69b9e5008b955191e1c8d345787e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 22 Feb 2002 14:09:07 +0000 Subject: [PATCH] (Fw16_set_clipboard_data): Run pre-write-conversion on the string before encoding it. (Fw16_get_clipboard_data): Run post-read-conversion on the string after decoding it. --- src/ChangeLog | 7 ++++++ src/w16select.c | 61 ++++++++++++++++++++++++++----------------------- 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 579370e65cd..8ba27b3625f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2002-02-22 Eli Zaretskii + + * w16select.c (Fw16_set_clipboard_data): Run pre-write-conversion + on the string before encoding it. + (Fw16_get_clipboard_data): Run post-read-conversion on the string + after decoding it. + 2002-02-22 Eli Zaretskii Support for ICCCM Extended Segments in X selections: diff --git a/src/w16select.c b/src/w16select.c index 582c5019e6f..4f8a8951567 100644 --- a/src/w16select.c +++ b/src/w16select.c @@ -492,14 +492,14 @@ DEFUN ("w16-set-clipboard-data", Fw16_set_clipboard_data, Sw16_set_clipboard_dat int no_crlf_conversion; CHECK_STRING (string); - + if (NILP (frame)) frame = Fselected_frame (); CHECK_LIVE_FRAME (frame); if ( !FRAME_MSDOS_P (XFRAME (frame))) goto done; - + BLOCK_INPUT; nbytes = STRING_BYTES (XSTRING (string)); @@ -528,6 +528,13 @@ DEFUN ("w16-set-clipboard-data", Fw16_set_clipboard_data, Sw16_set_clipboard_dat Vnext_selection_coding_system = Vselection_coding_system; setup_coding_system (Fcheck_coding_system (Vnext_selection_coding_system), &coding); + if (SYMBOLP (coding.pre_write_conversion) + && !NILP (Ffboundp (coding.pre_write_conversion))) + { + string = run_pre_post_conversion_on_str (string, &coding, 1); + src = XSTRING (string)->data; + nbytes = STRING_BYTES (XSTRING (string)); + } coding.src_multibyte = 1; coding.dst_multibyte = 0; Vnext_selection_coding_system = Qnil; @@ -543,7 +550,7 @@ DEFUN ("w16-set-clipboard-data", Fw16_set_clipboard_data, Sw16_set_clipboard_dat if (!open_clipboard ()) goto error; - + ok = empty_clipboard () && ((put_status = set_clipboard_data (CF_OEMTEXT, src, nbytes, no_crlf_conversion)) @@ -552,11 +559,11 @@ DEFUN ("w16-set-clipboard-data", Fw16_set_clipboard_data, Sw16_set_clipboard_dat if (!no_crlf_conversion) Vlast_coding_system_used = Qraw_text; close_clipboard (); - + if (ok) goto unblock; error: - + ok = 0; unblock: @@ -585,7 +592,7 @@ DEFUN ("w16-set-clipboard-data", Fw16_set_clipboard_data, Sw16_set_clipboard_dat } sit_for (2, 0, 0, 1, 1); } - + done: return (ok && put_status == 0 ? string : Qnil); @@ -608,9 +615,9 @@ DEFUN ("w16-get-clipboard-data", Fw16_get_clipboard_data, Sw16_get_clipboard_dat CHECK_LIVE_FRAME (frame); if ( !FRAME_MSDOS_P (XFRAME (frame))) goto done; - + BLOCK_INPUT; - + if (!open_clipboard ()) goto unblock; @@ -625,27 +632,20 @@ DEFUN ("w16-get-clipboard-data", Fw16_get_clipboard_data, Sw16_get_clipboard_dat goto closeclip; /* Do we need to decode it? */ - if ( -#if 1 - 1 -#else - ! NILP (buffer_defaults.enable_multibyte_characters) -#endif - ) - { - /* If the clipboard data contains any 8-bit Latin-1 code, we - need to decode it. */ - int i; - - for (i = 0; i < truelen; i++) - { - if (htext[i] >= 0x80) - { - require_encoding = 1; - break; - } - } - } + { + /* If the clipboard data contains any 8-bit Latin-1 code, we + need to decode it. */ + int i; + + for (i = 0; i < truelen; i++) + { + if (htext[i] >= 0x80) + { + require_encoding = 1; + break; + } + } + } if (require_encoding) { int bufsize; @@ -667,6 +667,9 @@ DEFUN ("w16-get-clipboard-data", Fw16_get_clipboard_data, Sw16_get_clipboard_dat ret = make_string_from_bytes ((char *) buf, coding.produced_char, coding.produced); xfree (buf); + if (SYMBOLP (coding.post_read_conversion) + && !NILP (Ffboundp (coding.post_read_conversion))) + ret = run_pre_post_conversion_on_str (ret, coding, 0); Vlast_coding_system_used = coding.symbol; } else -- 2.39.5