Re: g_signal_connect
- From: Paul Pogonyshev <pogonyshev gmx net>
- To: Tomaz Canabrava <tumaix gmail com>, gtk-app-devel-list gnome org
- Cc:
- Subject: Re: g_signal_connect
- Date: Tue, 3 May 2005 16:43:56 +0300
Tomaz Canabrava wrote:
Little trouble here =)
the g_signal_connect works like what?
g_signal_connect(GTK_WIDGET(widget), signal("clicked"),
G_CALLBACK(Function), (gpointer) "Data");
but the callbacks functions have the GtkWidget *Widget as a 1st
parameter, and...
well, i simply don't get it. =)
Does anyone cares to explain to this little noob the arts and secrets
of the g_signal_connect?
void
some_callback (GtkWidget *widget, MyData *data)
{
...
}
void
alternative_callback (MyData *data, GtkWidget *widget)
{
...
}
...
MyData *data = g_malloc (sizeof (MyData));
data->foo = ...;
data->bar = ...;
/* Connect'em! */
g_signal_connect (widget, "some-cute-signal-name",
G_CALLBACK (some_callback), data);
g_signal_connect_swapped (widget, "some-cute-signal-name",
G_CALLBACK (alternative_callback), data);
If the signal has additional parameters, they always appear between
the instance argument and user data argument, no matter what their
order is (i.e. whether you use swapped/normal connection.)
You can drop arguments you don't use anyway from the functions if
you prefer. Of course, you can only drop a tail of the argument list,
not e.g. remove the first argument and keep the second.
In the example above, `data' is leaked. One common way to avoid it is
to use
g_signal_connect_swapped (widget, "destroy",
G_CALLBACK (g_free), data);
However, be aware that certain widgets can be destroyed more than
once...
Paul
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]