`GtkContainerCellAccessible` is always leaked
Steps to reproduce
- Run the snippet provided below
- Notice that
gtk_container_cell_accessible_new()
is called butgtk_container_cell_accessible_finalize()
is not.
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "delete_event", gtk_main_quit, NULL);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
GtkWidget* tree = gtk_tree_view_new();
gtk_container_add (GTK_CONTAINER(window), tree);
GtkTreeViewColumn *column = gtk_tree_view_column_new();
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
// 2+ renderers are needed for 'create_cell_accessible()'
gtk_tree_view_column_pack_start(column, gtk_cell_renderer_text_new(), TRUE);
gtk_tree_view_column_pack_start(column, gtk_cell_renderer_text_new(), TRUE);
GtkTreeStore *treestore = gtk_tree_store_new(1, G_TYPE_STRING);
gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(treestore));
GtkTreeIter iter;
gtk_tree_store_append(treestore, &iter, NULL);
gtk_tree_store_set(treestore, &iter, 0, "item", -1);
GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter);
gtk_tree_view_set_cursor(GTK_TREE_VIEW(tree), path, column, FALSE);
gtk_tree_path_free(path);
gtk_widget_show_all(window);
gtk_main();
Current behavior
GtkContainerCellAccessible
is leaked.
Expected outcome
GtkContainerCellAccessible
shouldn't leak.
Version information
GTK 3.24.20
Additional information
The leak occurs because:
-
gtk_container_cell_accessible_add_child()
callsatk_object_set_parent()
-
atk_object_set_parent()
callsatk_object_real_set_parent
which callsg_object_ref()
onGtkContainerCellAccessible
. - This ref is never removed.