Hello. > Essentially adding a simple store model: > > store = gtk_list_store_new (1, G_TYPE_STRING); > while (foo_bar != NULL) > { > gtk_list_store_append (store, &iter); > gtk_list_store_set (store, &iter, 0, my_name, -1); > } > gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store)); > g_object_unref (store); > > I need to block before and unblock in the end because treeview is connected > to this signal: > > g_signal_connect (treeview, "cursor-changed", > G_CALLBACK (update_model), window); > > Everytime a user clicks on a row, "cursor-changed" is triggered, > update_model is called, and a new model replaces the previous one. It > happens that this model change triggers again the "cursor-changed" signal, > so to prevent "cursor-changed" from calling again update_model, I have to > block the signal before I change the store model. The issue here is the > signal must be unblocked again only at the very end. What happens now is, > the signal is unblocked at the end, but GTK still calls update_model AFTER > that... the timer solves the issue, because it forces GTK to clean all his > stuff before calling the timer... in fact this works even with the delay set > to zero...
My assumptions were correct. The thing that is causing you troubles here is GtkTreeView's internally installed idle callbacks that update the tree view after the function that caused the changes returns. I'm afraid that there is no other way around it but to use g_idle_add. Idle callbacks that are installed by GtkTreeView have quite high priority, so your installed timeout/idle handlers will be called after the ones GtkTreeView installed. Tadej -- Tadej Borovšak tadeboro.blogspot.com tadeb...@gmail.com tadej.borov...@gmail.com _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list