Thanks David,

It was the "destroy" signal that I was looking for. Indeed I mixed it up
with the "destroy-event" signal, as I only looked at the GtkWidget signals
and not at its parent signals.

I knew the solution was simple...

Regards,
Dov

2009/11/25 David Nečas <[email protected]>

> 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

Reply via email to