gtk gtk2 gtktreeview

gtk - GLib-CRITICAL**: No se encontrĂ³ el ID de fuente XXX al intentar eliminarlo



gtk2 gtktreeview (1)

Esto no es un error en su código, y tampoco es un fallo. En realidad, solo es una advertencia de que se llamó a g_source_remove() para desconectar cierto controlador de eventos que ya estaba desconectado, en este caso, en el código que forma parte de gtk.

La advertencia en sí se introdujo en glib 2.39, en esta confirmación , y parece que solo los usuarios de arch linux se ven afectados porque otras distribuciones no se han actualizado todavía.

En la mayoría de los casos esto es completamente inofensivo, y solo una molestia. Podría valer la pena verlo si se origina con una llamada g_source_remove() en tu propio código.

Establezca un punto de interrupción en g_log para encontrar lo que lo está causando:

(gdb) break g_log Breakpoint 1 at 0x7ffff5ea5a70 (gdb) c Continuing. Breakpoint 1, 0x00007ffff5ea5a70 in g_log () from /usr/lib/libglib-2.0.so.0 (gdb) bt #0 0x00007ffff5ea5a70 in g_log () from /usr/lib/libglib-2.0.so.0 #1 0x00007ffff5e9d9dc in g_source_remove () from /usr/lib/libglib-2.0.so.0 #2 0x00007ffff79bd0f5 in ?? () from /usr/lib/libgtk-x11-2.0.so.0 #3 0x00007ffff79cc1a4 in ?? () from /usr/lib/libgtk-x11-2.0.so.0 #4 0x00007ffff79cda66 in ?? () from /usr/lib/libgtk-x11-2.0.so.0 #5 0x00007ffff78d7435 in ?? () from /usr/lib/libgtk-x11-2.0.so.0 #6 0x00007ffff616e3d8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #7 0x00007ffff617fb1b in ?? () from /usr/lib/libgobject-2.0.so.0 #8 0x00007ffff6187719 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #9 0x00007ffff6187d02 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0 #10 0x00007ffff79e6fe4 in ?? () from /usr/lib/libgtk-x11-2.0.so.0 #11 0x00007ffff78d5be4 in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0 #12 0x00007ffff78d5f9b in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0 #13 0x00007ffff75519cc in ?? () from /usr/lib/libgdk-x11-2.0.so.0 #14 0x00007ffff5e9eb84 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #15 0x00007ffff5e9edc8 in ?? () from /usr/lib/libglib-2.0.so.0 #16 0x00007ffff5e9f08a in g_main_loop_run () from /usr/lib/libglib-2.0.so.0 #17 0x00007ffff78d5087 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0 #18 0x000000000040152f in main ()

El retroceso va desde gtk_main a g_log sin pasar una sola vez a través de su código, por lo que esto probablemente afecta a cualquier programa de gtk con una vista de árbol.

Hice un treeview con un treestore como modelo. La ventana se muestra como se esperaba, pero cuando hago clic en "+" para expandir los elementos, recibo este mensaje:

GLib-CRITICAL **: No se encontró el ID de la fuente 221 al intentar eliminarlo

Aquí está mi código:

#include <gtk/gtk.h> /* compile with: */ /* gcc main.c -o boxy `pkg-config --cflags --libs gtk+-2.0` */ typedef struct { GtkWidget *toplevel; GtkWidget *treeview; } Widgets; enum { ITEM_PARENT, ITEM_CHILD }; typedef struct { gint tipo; gint id; gchar *nombre; gint cantidad; } Lista; void addColumn (GtkTreeView *tv, const gchar* title, gint pos) { GtkCellRenderer *tmp; tmp = gtk_cell_renderer_text_new (); g_object_set (tmp, "editable", TRUE, "editable-set", TRUE, NULL); gtk_tree_view_insert_column_with_attributes (tv, -1, title, tmp, "text", pos, NULL); } void setupTree (GtkTreeView *tv) { const Lista lista[] = { {ITEM_PARENT, 125, "Superman", 2}, {ITEM_CHILD, 23, "Batman", 1}, {ITEM_CHILD, 7, "Hulk", 5}, {ITEM_PARENT, 65, "Iron Man", 2}, {-1, -1, NULL, -1} }; GtkTreeStore *model; GtkTreeIter last; gint pos; model = gtk_tree_store_new (3, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT); addColumn (tv, "ID", 0); addColumn (tv, "Nombre", 1); addColumn (tv, "Cantidad", 2); for (pos = 0; lista[pos].tipo != -1; pos++) { GtkTreeIter iter; if (lista[pos].tipo == ITEM_PARENT) { gtk_tree_store_append (model, &iter, NULL); last = iter; } else if (lista[pos].tipo == ITEM_CHILD) { gtk_tree_store_append (model, &iter, &last); } gtk_tree_store_set (model, &iter, 0, lista[pos].id, 1, lista[pos].nombre, 2, lista[pos].cantidad, -1); } gtk_tree_view_set_model (tv, GTK_TREE_MODEL (model)); g_object_unref (model); } int main (int argc, char *argv[]) { Widgets *ptr; GtkWidget *scroll; gtk_init (&argc, &argv); ptr = g_slice_new0(Widgets); ptr->toplevel = gtk_window_new (GTK_WINDOW_TOPLEVEL); scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_OUT); ptr->treeview = gtk_tree_view_new (); setupTree (GTK_TREE_VIEW (ptr->treeview)); g_signal_connect (ptr->toplevel, "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_container_set_border_width (GTK_CONTAINER (ptr->toplevel), 10); gtk_container_add (GTK_CONTAINER (scroll), ptr->treeview); gtk_container_add (GTK_CONTAINER (ptr->toplevel), scroll); gtk_widget_show_all (ptr->toplevel); gtk_main (); g_slice_free (Widgets, ptr); return 0; }

¿Algunas ideas?