From 37323f344cae62760f64eeebe82d7a7f7a0b3078 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 22 Feb 2002 13:14:27 +0000 Subject: [PATCH] (x_encode_text): Accept additional arg SELECTIONP; all callers changed. If SELECTIONP is non-zero, run the pre-write-conversion function before encoding the selection text. --- src/xfns.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/xfns.c b/src/xfns.c index b8818b6c5be..748d8925a53 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -2345,6 +2345,10 @@ x_set_scroll_bar_background (f, value, oldval) CODING_SYSTEM, and return a newly allocated memory area which should be freed by `xfree' by a caller. + SELECTIONP non-zero means the string is being encoded for an X + selection, so it is safe to run pre-write conversions (which + may run Lisp code). + Store the byte length of resulting text in *TEXT_BYTES. If the text contains only ASCII and Latin-1, store 1 in *STRING_P, @@ -2353,9 +2357,10 @@ x_set_scroll_bar_background (f, value, oldval) the result should be `COMPOUND_TEXT'. */ unsigned char * -x_encode_text (string, coding_system, text_bytes, stringp) +x_encode_text (string, coding_system, selectionp, text_bytes, stringp) Lisp_Object string, coding_system; int *text_bytes, *stringp; + int selectionp; { unsigned char *str = XSTRING (string)->data; int chars = XSTRING (string)->size; @@ -2375,6 +2380,15 @@ x_encode_text (string, coding_system, text_bytes, stringp) } setup_coding_system (coding_system, &coding); + if (selectionp + && SYMBOLP (coding.pre_write_conversion) + && !NILP (Ffboundp (coding.pre_write_conversion))) + { + string = run_pre_post_conversion_on_str (string, &coding, 1); + str = XSTRING (string)->data; + chars = XSTRING (string)->size; + bytes = STRING_BYTES (XSTRING (string)); + } coding.src_multibyte = 1; coding.dst_multibyte = 0; coding.mode |= CODING_MODE_LAST_BLOCK; @@ -2458,7 +2472,7 @@ x_set_name (f, name, explicit) coding_system = Vlocale_coding_system; if (NILP (coding_system)) coding_system = Qcompound_text; - text.value = x_encode_text (name, coding_system, &bytes, &stringp); + text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp); text.encoding = (stringp ? XA_STRING : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); text.format = 8; @@ -2470,7 +2484,7 @@ x_set_name (f, name, explicit) } else { - icon.value = x_encode_text (f->icon_name, coding_system, + icon.value = x_encode_text (f->icon_name, coding_system, 0, &bytes, &stringp); icon.encoding = (stringp ? XA_STRING : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); @@ -2565,7 +2579,7 @@ x_set_title (f, name, old_name) coding_system = Vlocale_coding_system; if (NILP (coding_system)) coding_system = Qcompound_text; - text.value = x_encode_text (name, coding_system, &bytes, &stringp); + text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp); text.encoding = (stringp ? XA_STRING : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); text.format = 8; @@ -2577,7 +2591,7 @@ x_set_title (f, name, old_name) } else { - icon.value = x_encode_text (f->icon_name, coding_system, + icon.value = x_encode_text (f->icon_name, coding_system, 0, &bytes, &stringp); icon.encoding = (stringp ? XA_STRING : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); -- 2.39.5