Strip whitespace from clipboard contents

This commit is contained in:
Přemysl Eric Janouch 2018-06-30 13:23:30 +02:00
parent 4b191cce3d
commit b0d3b2dcb5
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 13 additions and 5 deletions

View File

@ -1905,10 +1905,10 @@ on_terminated (gpointer user_data)
#ifdef WITH_GTK #ifdef WITH_GTK
static void static void
app_set_input (Application *self, const gchar *input) app_set_input (Application *self, const gchar *text, gsize text_len)
{ {
glong size; glong size;
gunichar *output = g_utf8_to_ucs4 (input, -1, NULL, &size, NULL); gunichar *output = g_utf8_to_ucs4 (text, text_len, NULL, &size, NULL);
// XXX: signal invalid data? // XXX: signal invalid data?
if (!output) if (!output)
@ -1943,12 +1943,20 @@ on_selection_text_received (G_GNUC_UNUSED GtkClipboard *clipboard,
if (text) if (text)
{ {
if (app->selection_contents && !strcmp (app->selection_contents, text)) // Strip ASCII whitespace: this is compatible with UTF-8
while (g_ascii_isspace (*text))
text++;
gsize text_len = strlen (text);
while (text_len && g_ascii_isspace (text[text_len - 1]))
text_len--;
if (app->selection_contents &&
!strncmp (app->selection_contents, text, text_len))
return; return;
g_free (app->selection_contents); g_free (app->selection_contents);
app->selection_contents = g_strdup (text); app->selection_contents = g_strndup (text, text_len);
app_set_input (app, text); app_set_input (app, text, text_len);
} }
else if (app->selection_contents) else if (app->selection_contents)
{ {