Re: strange gtk_set_data_full behavior ...
- From: Sven LUTHER <luther maxime u-strasbg fr>
- To: Owen Taylor <otaylor redhat com>, luther dpt-info u-strasbg fr
- Cc: gtk-devel-list redhat com
- Subject: Re: strange gtk_set_data_full behavior ...
- Date: Wed, 9 Jun 1999 16:54:08 +0200
On Wed, Jun 09, 1999 at 07:51:42AM -0400, Owen Taylor wrote:
> > > The warning is indicating that you can't set a destroy function
> > > for a NULL data pointer. (The reason for this is that
> > > gtk_object_set_data (object, key, NULL) actually removes
> > > that key from the list attached to the widget.
> >
> > Why not just ignore the function then, and remove the data ? Why give an error
> > for that ?
>
> I think the reason that there is a warning there is so that
> people won't expect the destroy function to be called if
> that key is subsequently set again. Ignoring that argument
huh ?
if you reset the key, you have to provide a new destroy function, isn't it ? Or do
you mean that the people expect the destroy function to be called with the NULL
argument then ...
> > PS : is this kind of mail correct for this list, or should it go to
> > gtk-list ? I am not sure where to address my mails. I am writting a
> > binding for the ocaml language, not an application.
>
> This mail would be more appropriate on gtk-list, since it
> doesn't really deal with development plans for future versions
> of GTK+.
Ok, i will no more post here then,
> #include <gtk/gtk.h>
> #include <stdio.h>
>
> char data1[] = "Hello";
> char data2[] = "Bye";
> char data3[] = "XXX";
>
>
> void sven_free (gpointer data)
> {
> printf ("Hello you %u.\n", data);
> printf ("Data is %s.\n", data);
> }
>
> int main (int argc, char **argv)
> {
> GtkWidget *window;
>
> gtk_init (&argc, &argv);
>
> window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
>
> printf ("Data1 = %u.\n", data1);
> printf ("Data2 = %u.\n", data2);
> printf ("Data3 = %u.\n", data3);
> gtk_object_set_data_full (GTK_OBJECT (window), "Sven_data",\
> (gpointer)data1, (GtkDestroyNotify)&sven_free);
> gtk_object_set_data_full (GTK_OBJECT (window), "Sven_data",\
> (gpointer)data2, (GtkDestroyNotify)&sven_free);
> gtk_object_set_data_full (GTK_OBJECT (window), "Sven_data",\
> (gpointer)data3, (GtkDestroyNotify)&sven_free);
> gtk_object_set_data_full (GTK_OBJECT (window), "Sven_data",\
> (gpointer)NULL, (GtkDestroyNotify)&sven_free);
>
> gtk_widget_show (window);
>
> gtk_widget_destroy (window);
> }
So the main difference is that the button press callback calls gtk_exit (0);
in my example.
I suppose gtk_exit exits without doing any cleanup after himself, while
gtk_widget_destroy kills the widget cleanly ...
Friendly,
Sven LUTHER
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]