[Glade-users] Re: data in g_signal_connect

Olexiy Avramchenko olexiy@irtech.cn.ua
Thu, 13 Nov 2003 18:32:59 +0200


olafandjasper@hushmail.com wrote:

>=========================================================
>mySupport.c:
>void selectActionBin(GtkWidget      *button,
>                     struct MY_DATA *data)
>{
>  /* This is the code that does not work */
>  printf("In call back, data = <%s>\n",data->bin);
>  printf("In call back, data = <%s>\n",data->doc);
>  printf("In call back, data is at %p\n", data);
>  printf("In call back, &data is at %p\n", &data);
>}
>
This is completely broken, prototype should be:
gboolean selectActionBin(GtkWidget *button, GdkEventButton *event, 
struct MY_DATA *data);
(marking this as ''static" is not a bad idea too).
1. Return value of this callback should be gboolean (TRUE means that 
this event is handled and no other callbacks will be executed).
2. You will get a pointer to GdkEventButton structure instead of pointer 
to MY_DATA.
Look at:
http://developer.gnome.org/doc/API/2.0/gtk/GtkWidget.html#GtkWidget-button-press-event

>  g_signal_connect(G_OBJECT (butWidget),
>                   "button_press_event",
>                   G_CALLBACK (selectActionBin),
>                   &mydata);
>  
>