glade_xml_signal_connect_data (xml, "on_label1_control_button_clicked", GTK_SIGNAL_FUNC(on_label1_control_button _clicked), pud1 );
,
где xml это файл со структурой интерфейса (создан при помощи Glade), on_label1_control_button_clicked - это сигнал (и его одноимённый обработчик), а pud1 - указатель на пользовательскую (т.е. мою) структуру данных, передаваемых в обработчик. Унутре оной структуры - указатель на label внутри окна. То есть сначала загружается xml, из него извлекаются в числе прочих указатели на метки (по именам, при помощи glade_xml_get_widget), эти указатели сохраняются в соответствующих полях некоей структуры, на которую pud1 уже и указывает. Но когда по соответствующему событию вызывается обработчик, то вместо нужного указателя он получает ахинею.
Нет, я бы ещё понял, если бы я передавал указатель на локальную переменную, уже давно испарившуюся из стека - тогда читались бы совсем не те данные, но ведь даже САМ УКАЗАТЕЛЬ куда-то "теряется" по дороге: передаётся одно, а принимается совсем другое.
То есть, в библиотеке с обработчиками у меня есть такой, например:
void on_label1_control_button_clicked (GtkWidget *widget, gpointer user_data);
И вроде должно быть так, что передаваемый pud1 должен в итоге попасть в user_data, а дальше уже дело самого обработчика, как эти данные трактовать. Но - не фурычит. Мало того, я пробовал передавать просто константы -- с тем же результатом, принимается что-то совсем иное.
Нипанятно.