[Glade-users] Closing a dialog window
Keith Sharp
kms@passback.co.uk
Sun, 30 Jan 2005 15:58:10 +0000
On Sun, 2005-01-30 at 15:55 +0000, Keith Sharp wrote:
> On Sun, 2005-01-30 at 14:06 +0000, Chris Morrison wrote:
> > On Sat, 2005-01-29 at 20:52 +0000, Keith Sharp wrote:
> > > On Sat, 2005-01-29 at 12:34 +0000, Chris Morrison wrote:
> > > >
> > > > I have placed the following code in the signal handler for the Close
> > > > button's click event.
> > > >
> > > > void on_closebutton_clicked(GtkButton *button, gpointer window_ptr)
> > > > {
> > > > GtkDialog *window = GTK_DIALOG(window_ptr);
> > > > gtk_widget_destroy(GTK_WIDGET(window));
> > > > }
> > > >
> > > > However, when I click on the Close button nothing happens and the
> > > > following message is displayed in the terminal window.
> > > >
> > > > (my-program:5534): Gtk-CRITICAL **: file gtkwidget.c: line 1911
> > > > (gtk_widget_destroy): assertion `GTK_IS_WIDGET (widget)' failed
> > >
> > > 1) How are you connecting the callback, which you show above, to the
> > > object and the signal? I assume you have a call to g_signal_connect
> > > somewhere in your code. Can you show us some more of your code?
> >
> > g_signal_connect ((gpointer) closebutton, "clicked", G_CALLBACK
> > (on_closebutton_clicked), NULL);
>
> The last parameter of this function is for extra data you want to pass
> to the callback, in your case this would the pointer to your window.
> You need to change this code to somethings like:
>
> GtkDialog *dialog;
>
> /* Create and setup dialog here */
>
> g_signal_connect (closebutton, "clicked", G_CALLBACK (on_closebutton_clicked), window);
This should of course be:
g_signal_connect (closebutton, "clicked", G_CALLBACK (on_closebutton_clicked), dialog);
Keith.