Re: GtkTreeView: g_signal_handlers_unblock_by_func
- From: Carlos Pereira <jose carlos pereira ist utl pt>
- To: Tadej BorovÅak <tadeboro gmail com>
- Cc: gtk-app-devel-list <gtk-app-devel-list gnome org>
- Subject: Re: GtkTreeView: g_signal_handlers_unblock_by_func
- Date: Sat, 31 Oct 2009 23:15:52 +0000
Tadej BorovÅak wrote:
Hello.
Only situation that comes to my mind that would cause
g_signal_handlers_block_by_func to misbehave is if you do something
inside blocked part of code that installs idle handler to do the real
work. What are you doing inside "do_stuff" part?
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...
I can prepare and send to you a working example, if you are interested.
Thank you very much,
Carlos
Tadej
[
Date Prev][Date Next] [
Thread Prev][Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]