GtkEntry connect_after paste-clipboard is inconsitent
When connecting on the event paste-clipboard
on a GtkEntry
with G_CONNECT_AFTER
to automatically strip the whitespaces after the paste.
However, sometimes the callback is triggered before the default behavior, and so gtk_entry_get_text
returns the old text, rather than the one after the paste.
However, the behavior goes back to normal when the text I'm pasting comes from the entry itself. I find that really hard to believe, so here is a demo.
Source code
#include <gtk/gtk.h>
void entry_paste_clipboard_after (GtkEntry *entry,
gpointer user_data)
{
g_print ("text '%s'\n", gtk_entry_get_text (entry));
}
int main(int argc, char **argv)
{
g_print ("gtk version %d.%d.%d\n", gtk_get_major_version(),
gtk_get_minor_version(), gtk_get_micro_version());
GtkWidget *win;
GtkWidget *entry;
GtkWidget *vbox;
GtkWidget *hbox;
gtk_init (&argc, &argv);
win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (win), "Window");
gtk_window_set_default_size (GTK_WINDOW (win), 200, 200);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
gtk_container_add (GTK_CONTAINER (win), vbox);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 12);
entry = gtk_entry_new();
gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (entry), FALSE, FALSE, 12);
g_signal_connect_after (entry, "paste-clipboard",
G_CALLBACK (entry_paste_clipboard_after),
NULL);
g_signal_connect (win, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (win);
gtk_main();
}
System infos
$ uname -a
Linux inspirux 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux