Hi All,
I've been having a little trouble with signals. I'm using gladeXML to change
views inside of my application. In the .glade file that I'm opening, there are
some custom widgets. When I create a custom widget, I keep a pointer to it for
some internal purposes. But I want the pointer to be set to null when the
widget is destroyed (or a new .glade file is loaded). So I'm using signals, but
I end up with some strange behavior...
// globals
GtkWidget *pointerToCustomWidget=NULL;
guint signalHandlerId=0;
// this function called when gladeXML creates the widget GtkWidget
*createCustomWidget(gchar *widget_name, gchar *string1, gchar *string2, gint
int1, gint int2)
{
GtkWidget *myCustomWidget=createMyCustomWidget(); // my code to create the
widget
pointerToCustomWidget=myCustomWidget;
signalHandlerId=g_signal_connect(gpointer(myCustomWidget), "destroy",
G_CALLBACK(gtk_widget_destroyed), &pointerToCustomWidget);
// also tried this
signalHandlerId=gtk_signal_connect(GTK_OBJECT(myCustomWidget), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed), &pointerToCustomWidget);
}
// At some pointer user clicks a button and I do the following
if (pointerToCustomWidget!=NULL && signalHandlerId>0)
{
GtkWidget *tempWidgetPointer=pointerToCustomWidget;
guint tempSignalHandlerId;
tempSignalHandlerId=g_signal_connect(gpointer(tempWidgetPointer),
"destroy", G_CALLBACK(gtk_widget_destroyed), &tempWidgetPointer);
// do some other stuff
g_signal_handler_disconnect(gpointer(tempWidgetPointer),
tempSignalHandlerId);
tempWidgetPointer=NULL;
}
I get some errors like this..
Gtk-CRITICAL **: gtk_signal_compat_matched: assertion 'GTK_IS_OBJECT(object)'
failed
My actual code has a more assignments like the above, so sometimes I end up
having 3 or 4 pointers and handlers using the same techniques.
If I remove the following line of code...
assignment tempWidgetPointer=NULL;
I get errors like this...
Gtk-WARNING **: unable to find signal handler for
object(CustomWidget:0x8b5e4b0) with func(0x81a1618) and data (0xbffeca30)
I thought I understood how signals work, but I now I know that I don't have a
clue.
Thanks for any help,
Mark
-
No need to miss a message. Get email on-the-go
with Yahoo! Mail for Mobile. Get started.___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list