button_add = gtk_button_new_with_label('Добавить');
 button_clear = gtk_button_new_with_label('Очистить');
 button_hide_show = gtk_button_new_with_label('Спрятать/отобразить');
 gtk_box_pack_start(GTK_BOX(hbox), button_add,
  TRUE, TRUE, 0);
 gtk_box_pack_start(GTK_BOX(hbox), button_clear,
  TRUE, TRUE, 0);
 gtk_box_pack_start(GTK_BOX(hbox), button_hide_show,
  TRUE, TRUE, 0);
 /* Связываем обработчики */
 gtk_signal_connect_object(GTK_OBJECT(button_add),
  'clicked',
  GTK_SIGNAL_FUNC(button_add_clicked), (gpointer) clist);
  gtk_signal_connect_object(GTK_OBJECT(button_clear),
  'clicked',
  GTK_SIGNAL_FUNC(button_clear_clicked),(gpointer)clist);
 gtk_signal_connect_object(GTK_OBJECT(button_hide_show),
  'clicked', GTK_SIGNAL_FUNC(button_hide_show_clicked),
  (gpointer)clist);
 gtk_widget_show(button_add);
 gtk_widget_show(button_clear);
 gtk_widget_show(button_hide_show);
 gtk_widget_show(window);
 gtk_main();
 return(0);
}
Программа работает так: при нажатии кнопки Добавить создается список, состоящий из названий четырех популярных дистрибутивов Linux. Кнопка Очистить очищает список, а Спрятать/отобразить прячет или отображает заголовки списка. При щелчке на определенной ячейке списка на консоль выводится соответствующее сообщение — координаты ячейки и ее текст.
 Рис 23.5.
< … стр. 639–640 … >
void destroy(GtkWidget *widget, gpointer data);
static void button_click(GtkWidget *widget, gpointer data);
int main(int argc, char *argv[]) {
 GtkWidget *window;
 GtkWidget *button;
 GtkWidget *label;
 w_ctrl ctrl;
 gchar *caption;
 setlocale(LC_ALL, 'ru_RU.KOI8-R');
 caption = g_strdup_printf('Доброго времени суток!');
 gtk_init(&argc, &argv);
 window = gtk_window_new( GTK_WINDOW_TOPLEVEL);
 gtk_signal_connect(GTK_OBJECT(window), 'delete_event',
  GTK_SIGNAL_FUNC(delete_event), NULL);
 gtk_signal_connect(GTK_OBJECT(window), 'destroy',
  GTK_SIGNAL_FUNC(destroy), &ctrl);
 gtk_window_set_title(GTK_WINDOW(window), caption);
 gtk_container_set_border_width(GTK_CONTAINER(window), 10);
 button = gtk_button_new();
 label = gtk_label_new(' -== Нажмите кнопку ==- ' );
 ctrl.app_window = window;
 ctrl.label = label;
 gtk_container_add(GTK_CONTAINER(button), label);
 gtk_container_add(GTK_CONTAINER(window), button);
 gtk_signal_connect(GTK_OBJECT(button), 'clicked',
  GTK_SIGNAL_FUNC(button_click), &ctrl);
 gtk_widget_show_all(window);
 gtk_main();
 return(0);
}
// ****************************************************
void quit_confirm(GtkWidget *widget) {
 GtkWidget *quit_form;
 GtkWidget *label;
 GtkWidget *yes_button, *no_button;
 quit_form = gtk_dialog_new();
 gtk_window_set_position(GTK_WINDOW(quit_form),
  GTK_WIN_POS_CENTER);
 gtk_container_set_border_width(GTK_CONTAINER(quit_form),
  10);
 label =
  gtk_label_new('
 Вы действительно хотите выйти? 
*);
 yes_button = gtk_button_new_with_label('Да');
 no_button = gtk_button_new_with_label('Нет');
 gtk_signal_connect_object(GTK_OBJECT(yes_button),
  'clicked',
