Доброго времени суток.
Кто-нибудь знает, как получить ID дочернего контрола, созданного Glade с GtkBuilder?
Что имеется ввиду:
При инициализации программы во время загрузки файла glade понятно как получить указатель на структуру нужного элемента:
что-то типа
typedef struct {
GtkWidget *m_window;
GtkWidget *statusbar;
GtkWidget *m_image;
guint statusbar_context_id;
gchar *filename;
} mozaic, * pmozaic;
GtkDialog * dialog_param;
....
gtk_builder_add_from_file (builder, BUILDER_XML_FILE, NULL);
pm->m_window = GTK_WIDGET (gtk_builder_get_object (builder, "main_window"));
pm->m_image = GTK_WIDGET (gtk_builder_get_object (builder, "m_image"));
pm->statusbar = GTK_WIDGET (gtk_builder_get_object (builder, "statusbar"));
dialog_param = GTK_DIALOG (gtk_builder_get_object (builder, "dialog_param"));
gtk_builder_connect_signals (builder, pm);
g_object_unref (G_OBJECT (builder));
а вот как потом в обработчике получить конкретный контрол GtkEntry, который вложен в dialog_param?
Я пока пришел только к такой вещи:
прохожу по всем элементам диалога
Это я вызываю в обработчике активации диалога:
gtk_container_foreach(GTK_CONTAINER(dialog_param),(GtkCallback) cb_get_param_value, NULL);
сама калбэк функция:
void
cb_get_param_value(GtkWidget * widget, gpointer callback_data)
{
g_print("%s\n",gtk_widget_get_name(widget));
if (GTK_IS_ENTRY(widget))
{
g_print("\t%s\n",gtk_entry_get_text(GTK_ENTRY(widget)));
.....
}
else if (GTK_IS_CONTAINER (widget))
{
gtk_container_foreach(GTK_CONTAINER(widget),(GtkCallback) cb_get_param_value, NULL);
}
}
И вот как мне в этой функции получить конкретный GtkEntry?
Потому что gtk_widget_get_name(widget) возвращает строку GtkEntry, а не имя, которое я задавал для него в Glade в поле name на вкладке General.
Как вообще получают дочерние элементы, когда интерфейс создается в glade с GtkBuilder?
Чтобы получать их не в момент загрузки файла glade, а получать именно тогда, когда нужно.
