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
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list