From: Ignazio Pillai Date: Thu, 22 Dec 2022 11:55:30 +0000 (+0100) Subject: clipboard: improve EOL conversion of plain text X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~9^2~6^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8ecb62493477c7722d8d2bebc39ccb3bcd4d480f;p=gtk4.git clipboard: improve EOL conversion of plain text Handle the case of clipboard text with CR line endings --- diff --git a/gdk/win32/gdkclipdrop-win32.c b/gdk/win32/gdkclipdrop-win32.c index 57ade2180d..aeadad56c8 100644 --- a/gdk/win32/gdkclipdrop-win32.c +++ b/gdk/win32/gdkclipdrop-win32.c @@ -2081,23 +2081,30 @@ transmute_cf_unicodetext_to_utf8_string (const guchar *data, gsize *set_data_length, GDestroyNotify *set_data_destroy) { - wchar_t *ptr, *p, *q; + wchar_t *ptr, *p, *q, *endp; char *result; glong wclen, u8_len; - /* Strip out \r */ + /* Replace CR and CR+LF with LF */ ptr = (wchar_t *) data; p = ptr; q = ptr; + endp = ptr + length / 2; wclen = 0; - while (p < ptr + length / 2) + while (p < endp) { if (*p != L'\r') { *q++ = *p; wclen++; } + else if (p + 1 >= endp || *(p + 1) != L'\n') + { + *q++ = L'\n'; + wclen++; + } + p++; } @@ -2282,7 +2289,7 @@ transmute_cf_text_to_utf8_string (const guchar *data, gsize *set_data_length, GDestroyNotify *set_data_destroy) { - char *ptr, *p, *q; + char *ptr, *p, *q, *endp; char *result; glong wclen, u8_len; wchar_t *wstr; @@ -2291,15 +2298,22 @@ transmute_cf_text_to_utf8_string (const guchar *data, ptr = (char *) data; p = ptr; q = ptr; + endp = ptr + length / 2; wclen = 0; - while (p < ptr + length / 2) + while (p < endp) { if (*p != '\r') { *q++ = *p; wclen++; } + else if (p + 1 > endp || *(p + 1) != '\n') + { + *q++ = '\n'; + wclen++; + } + p++; }