Hello folks,
I ran into an endless loop when trying to replace a handler attached to a button from
within the original handler itself.
It seems that while a handler has yet to return, attaching another handler for the
same signal causes the new handler to immediately receive the signal that came from
originally pushing the button. Thus the code below endlessly prints out "pressed..."
once the button is clicked.
So my question is: is there a way upon entering a handler to stop the widget emitting
a signal(or perhaps all signals) while a new handler is being installed, reactivating
the widget afterwards?
I'm trying to structure my program in "continuation passing style" which emphasises
callbacks as self-contained future directions for the program. The least ugly
work-around I can think of is to generate a new button and replace the original on the
display, so being free to attach a handler without risk of looping.
Thanks for any assistance.
Chris
void continuation( GtkWidget *widget,
gpointer callback_data )
{
g_print("pressed...\n");
gtk_signal_disconnect(GTK_OBJECT(button),signo);
display_tree();
}
void display_tree()
{
signo = gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(continuation),
"clicked");
}
_______________________________________________
gtk-list mailing list
[EMAIL PROTECTED]
http://mail.gnome.org/mailman/listinfo/gtk-list