aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table/e-tree-memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/table/e-tree-memory.c')
-rw-r--r--widgets/table/e-tree-memory.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/widgets/table/e-tree-memory.c b/widgets/table/e-tree-memory.c
index 081716f0f1..e3283f7730 100644
--- a/widgets/table/e-tree-memory.c
+++ b/widgets/table/e-tree-memory.c
@@ -52,6 +52,8 @@ struct ETreeMemoryPriv {
ETreeMemoryPath *root;
gboolean expanded_default; /* whether nodes are created expanded or collapsed by default */
gint frozen;
+ GFunc destroy_func;
+ gpointer destroy_user_data;
};
@@ -325,6 +327,8 @@ e_tree_memory_init (GtkObject *object)
priv->root = NULL;
priv->frozen = 0;
priv->expanded_default = 0;
+ priv->destroy_func = NULL;
+ priv->destroy_user_data = NULL;
}
E_MAKE_TYPE(e_tree_memory, "ETreeMemory", ETreeMemory, e_tree_memory_class_init, e_tree_memory_init, PARENT_TYPE)
@@ -507,6 +511,10 @@ child_free(ETreeMemory *etree, ETreeMemoryPath *node)
child = next;
}
+ if (etree->priv->destroy_func) {
+ etree->priv->destroy_func (node->node_data, etree->priv->destroy_user_data);
+ }
+
g_chunk_free(node, node_chunk);
}
@@ -625,3 +633,12 @@ e_tree_memory_sort_node (ETreeMemory *etmm,
e_tree_model_node_changed(E_TREE_MODEL(etmm), node);
}
+
+void
+e_tree_memory_set_node_destroy_func (ETreeMemory *etmm,
+ GFunc destroy_func,
+ gpointer user_data)
+{
+ etmm->priv->destroy_func = destroy_func;
+ etmm->priv->destroy_user_data = user_data;
+}