Одним из самых простых способов было бы просто отправить информацию, когда вы подключаетесь к обратному вызову в виде данных. Что-то на этих строках:
...
typedef struct _identifier{
int x;
int y;
}identifier;
static void button_clicked_cb(GtkButton *button, gpointer data)
{
(void)button; /*To get rid of compiler warning*/
identifier *id = data;
printf("\n id = %d, %d\n", id->x, id->y);
return;
}
....
identifier id[x*y]; /* Size of x*y of the board*/
unsigned int counter = 0;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
id[counter].x = i;
id[counter].y = j;
board[i][j] = gtk_button_new ();
g_signal_connect(board[i][j], "clicked", G_CALLBACK(button_clicked_cb), &id[counter]);
counter++;
}
}
Обратите внимание, что сигнал "clicked"
связан только с GtkButton
. Если вам нужно использовать с GtkWidget
, посмотрите на "button-press-event"
или "button-release-event"
, и в этом случае сигнатура обратного вызова также изменится.
Надеюсь, это поможет!