rendered paste body/* gcc -Wall -g `pkg-config --cflags --libs gtk+-2.0` -o entry entry.c */#include <gtk/gtk.h>#include <unistd.h>guint handler_id;void on_entry_changed(GtkEditable *editable, gpointer data){ gchar *string; int i; string = gtk_editable_get_chars(editable,0,-1); printf("on_entry_changed: %s\n",string); g_signal_handler_block(editable,handler_id); printf("on_entry_changed: Handler Blocked\n"); /* simulate busyness */ for(i=0;i<10;i++){ usleep(10000); } g_signal_handler_unblock(editable,handler_id); printf("on_entry_changed: Handler Unblocked\n");}int main(int argc, char **argv){ gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); GdkGeometry gdkGeometry; gdkGeometry.min_width= 640; gdkGeometry.min_height = 480; gtk_window_set_geometry_hints(GTK_WINDOW(window), window, &gdkGeometry, GDK_HINT_MIN_SIZE); GtkWidget *vbox = gtk_vbox_new(FALSE,10); GtkWidget *entry = gtk_entry_new(); handler_id = g_signal_connect(entry,"changed", G_CALLBACK(on_entry_changed),NULL); GtkWidget *label = gtk_label_new("Type something quickly and watch the signals keep going\n\even though the callback has been blocked"); gtk_box_pack_start(GTK_BOX(vbox),label,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(vbox),entry,TRUE,TRUE,0); gtk_container_add(GTK_CONTAINER(window), vbox); g_signal_connect(G_OBJECT(window), "destroy", gtk_main_quit, NULL); gtk_widget_show_all(window); gtk_main(); return 0;}