Ответ 1
Вы правильно понимаете.
Это позволяет вам делать трюки, как показано ниже: у вас есть кнопка (пусть назовите ее 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);
В основном это избавляет вас от необходимости писать дополнительную функцию, если вы вручную кодируете свой интерфейс. Конечно, может быть гораздо более практическое использование, которое я никогда не понимал.