Типичный способ сделать это:
g_object_set_data (context_object, "entry1", entry1);
g_object_set_data (context_object, "entry2", entry2);
g_signal_connect (G_OBJECT (Apply), "clicked", G_CALLBACK (apply_clicked), context_object);
, а затем в apply_clicked:
GtkEntry *entry1 = g_object_get_data (context_object, "entry1");
...
Обычно context_object будет GtkDialog или чем-то еще, на котором существуют эти виджеты.
В качестве альтернативы, если вы подкласс GtkDialog, вы можете сделать:
struct _MyDialog {
GtkDialog parent_object;
GtkEntry *entry1;
GtkEntry *entry2;
...
};
Затем, при построении вашего диалога, просто установите entry1, 2, 3 и т. Д ... и вам не нужно использовать хак g_object_ [g, s] et_data ().