Вы правильно поняли.
Это позволяет вам выполнять трюки, подобные следующим: У вас есть кнопка (назовем ее button
), которая должна скрывать другой виджет (назовем его textview
) при нажатии.
Вы можете сделать
g_signal_connect_swapped(button, 'clicked', G_CALLBACK(gtk_widget_hide), textview);
чтобы достичь этого. Когда кнопка нажата, она генерирует сигнал «нажал», и обратный вызов вызывается с textview
в качестве первого аргумента и button
в качестве второго. В этом случае обратным вызовом является gtk_widget_hide()
, который принимает только один аргумент, поэтому второй аргумент игнорируется, потому что так работает соглашение о вызовах C.
Это то же самое, что и ниже, но короче.
static void
on_button_clicked(GtkButton *button, GtkWidget *textview)
{
gtk_widget_hide(textview);
}
...elsewhere...
g_signal_connect(button, 'clicked', G_CALLBACK(on_button_clicked), textview);
По сути, это избавляет вас от необходимости писать дополнительные функции, если вы вручную пишете код своего интерфейса. Конечно, может быть гораздо более практичное применение, которого я никогда не понимал.