summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-03-07 18:02:30 +0100
committerBram Moolenaar <Bram@vim.org>2013-03-07 18:02:30 +0100
commite2e663f67d9f44ae876659bd492f734d48bd2970 (patch)
tree68d090a7dd23ed00c415eab3868aa9ae5ad055d4
parent210f3704f795870c513a136725718e10ac2bdbfc (diff)
updated for version 7.3.852v7.3.852
Problem: system() breaks clipboard text. (Yukihiro Nakadaira) Solution: Use Xutf8TextPropertyToTextList(). (Christian Brabandt) Also do not put the text in the clip buffer if conversion fails.
-rw-r--r--src/ops.c21
-rw-r--r--src/ui.c8
-rw-r--r--src/version.c2
3 files changed, 28 insertions, 3 deletions
diff --git a/src/ops.c b/src/ops.c
index 9b669b3317..f3588eb279 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -5828,6 +5828,8 @@ x11_export_final_selection()
&& len < 1024*1024 && len > 0)
{
#ifdef FEAT_MBYTE
+ int ok = TRUE;
+
/* The CUT_BUFFER0 is supposed to always contain latin1. Convert from
* 'enc' when it is a multi-byte encoding. When 'enc' is an 8-bit
* encoding conversion usually doesn't work, so keep the text as-is.
@@ -5842,6 +5844,7 @@ x11_export_final_selection()
int intlen = len;
char_u *conv_str;
+ vc.vc_fail = TRUE;
conv_str = string_convert(&vc, str, &intlen);
len = intlen;
if (conv_str != NULL)
@@ -5849,12 +5852,26 @@ x11_export_final_selection()
vim_free(str);
str = conv_str;
}
+ else
+ {
+ ok = FALSE;
+ }
convert_setup(&vc, NULL, NULL);
}
+ else
+ {
+ ok = FALSE;
+ }
}
+
+ /* Do not store the string if conversion failed. Better to use any
+ * other selection than garbled text. */
+ if (ok)
#endif
- XStoreBuffer(dpy, (char *)str, (int)len, 0);
- XFlush(dpy);
+ {
+ XStoreBuffer(dpy, (char *)str, (int)len, 0);
+ XFlush(dpy);
+ }
}
vim_free(str);
diff --git a/src/ui.c b/src/ui.c
index 372e0375fc..4a4506efc9 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -2119,7 +2119,13 @@ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
text_prop.encoding = *type;
text_prop.format = *format;
text_prop.nitems = len;
- status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
+#ifdef FEAT_MBYTE
+ if (*type == utf8_atom)
+ status = Xutf8TextPropertyToTextList(X_DISPLAY, &text_prop,
+ &text_list, &n_text);
+ else
+#endif
+ status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
&text_list, &n_text);
if (status != Success || n_text < 1)
{
diff --git a/src/version.c b/src/version.c
index 97fdd990ca..eeb4f61280 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 852,
+/**/
851,
/**/
850,