diff options
author | Matthias Clasen <mclasen@redhat.com> | 2022-12-22 13:31:07 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2022-12-22 13:31:07 +0000 |
commit | 99320f99c3c61fa6b2acbac0694476928e338f49 (patch) | |
tree | 43f69efd5b88288d2af5f211f08f13d104a16268 | |
parent | 123eebb93d746322c5c93481e71bca10da6b32d7 (diff) | |
parent | 8ecb62493477c7722d8d2bebc39ccb3bcd4d480f (diff) | |
download | gtk+-99320f99c3c61fa6b2acbac0694476928e338f49.tar.gz |
Merge branch 'wip/ignazp/clipboard_eol' into 'main'
clipboard: improve EOL conversion of plain text
See merge request GNOME/gtk!5367
-rw-r--r-- | gdk/win32/gdkclipdrop-win32.c | 24 |
1 files changed, 19 insertions, 5 deletions
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++; } |