On Wed, Nov 25, 2009 at 08:41:58AM +0200, Dov Grobgeld wrote: > Assume I have a program with a widget MyApp that has a member called > my_dialog that is created to catch its destruction as follows: > > if (!priv->my_dialog) { > priv->my_dialog = my_dialog_new(); > > g_signal_connect(priv->my_dialog, "delete-event", > G_CALLBACK(cb_my_dialog_destroy), priv); > } > : > > static gboolean cb_my_dialog_destroy(GtkWidget *widget, > GdkEvent *event, > gpointer data) > { > MyAppPriv *priv = MY_APP_PRIV(data); > priv->my_dialog = NULL; > return FALSE; > } > > ... > > Trying to connect to the "destroy-event" in MyApp didn't work. I never got > any callback. > > So how should this be done? By inspecting the list of signals more closely. "delete-event" is sent when the delete event is received, i.e. (typically) when the user closes the window by window manager means. Receiving "delete-event" may and may not lead to actual destruction of the widget (destruction is just the default response). If you destroy the widget directly with gtk_widget_destroy(), no delete events are involved. "destroy" is emitted when the widget is destroyed. It is not an event-signal and has no "-event" in its name. g_object_add_weak_pointer() ensures clearing a pointer when an object is finalized. Note if the holder of the weak pointer can be finalized first, it needs to remove the weak pointer to avoid disaster. Yeti _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list