У меня есть простой Glade-файл, включенный в C-источник.Вот интересные части:
int main(int argc, char *argv[]) {
GtkBuilder *builder;
gtk_init(&argc, &argv);
gdk_gl_init(&argc, &argv);
// ... some OpenGL specific initializations
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "gui.ui", NULL);
gtk_builder_connect_signals(builder, NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
drawingArea = GTK_wIDGET(gtk_builder_get_object(builder, "drawing_area"));
gtk_container_set_reallocate_redraws(GTK_CONTAINER(window), TRUE);
gtk_widget_set_gl_capability(drawingArea, glConfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
// ...
}
Если я скомпилирую это, я получу это предупреждение:
gtk_widget_set_gl_capability: assertion `!gtk_widget_get_realized (widget)' failed
Если я теперь использую LibGlade вместо GtkBuilder с этим кодом (я сохранилGlade-файл для совместимости с Libglade):
int main(int argc, char *argv[]) {
GladeXML *xml;
gtk_init(&argc, &argv);
gdk_gl_init(&argc, &argv);
// ... some OpenGL specific initializations
xml = glade_xml_new("gui.glade", NULL, NULL);
glade_xml_signal_autoconnect(xml);
window = glade_xml_get_widget(xml, "main_window");
drawingArea = glade_xml_get_widget(xml, "drawing_area");
gtk_container_set_reallocate_redraws(GTK_CONTAINER(window), TRUE);
gtk_widget_set_gl_capability(drawingArea, glConfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
// ...
}
Все работает нормально и никаких ошибок не появляется.Я попытался сделать несколько вещей, чтобы заставить draw_area реализовать версию GtkBuilder, но ничего не получалось.Есть ли какая-то волшебная уловка, которую я здесь забыл?