aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-table-specification.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2013-06-27 01:05:02 +0800
committerMatthew Barnes <mbarnes@redhat.com>2013-07-02 22:34:08 +0800
commit37aae129f397e5973910ff227a0f18efb1b5d2fe (patch)
tree94d9a557c3ea44dc1892df1f3931e6f7ca7c60cc /e-util/e-table-specification.c
parente663dec920f8359f07c6047f2ef3eb10f052f1e8 (diff)
downloadgsoc2013-evolution-37aae129f397e5973910ff227a0f18efb1b5d2fe.tar
gsoc2013-evolution-37aae129f397e5973910ff227a0f18efb1b5d2fe.tar.gz
gsoc2013-evolution-37aae129f397e5973910ff227a0f18efb1b5d2fe.tar.bz2
gsoc2013-evolution-37aae129f397e5973910ff227a0f18efb1b5d2fe.tar.lz
gsoc2013-evolution-37aae129f397e5973910ff227a0f18efb1b5d2fe.tar.xz
gsoc2013-evolution-37aae129f397e5973910ff227a0f18efb1b5d2fe.tar.zst
gsoc2013-evolution-37aae129f397e5973910ff227a0f18efb1b5d2fe.zip
ETableSpecification: Make the columns array private.
Use e_table_specification_ref_columns() to access column specs.
Diffstat (limited to 'e-util/e-table-specification.c')
-rw-r--r--e-util/e-table-specification.c49
1 files changed, 12 insertions, 37 deletions
diff --git a/e-util/e-table-specification.c b/e-util/e-table-specification.c
index 3dbff96c8a..d6ca13bec4 100644
--- a/e-util/e-table-specification.c
+++ b/e-util/e-table-specification.c
@@ -34,7 +34,7 @@
((obj), E_TYPE_TABLE_SPECIFICATION, ETableSpecificationPrivate))
struct _ETableSpecificationPrivate {
- gint placeholder;
+ GPtrArray *columns;
};
G_DEFINE_TYPE (
@@ -46,19 +46,13 @@ static void
table_specification_dispose (GObject *object)
{
ETableSpecification *specification;
- gint ii;
specification = E_TABLE_SPECIFICATION (object);
- if (specification->columns != NULL) {
- for (ii = 0; specification->columns[ii] != NULL; ii++)
- g_object_unref (specification->columns[ii]);
- g_free (specification->columns);
- specification->columns = NULL;
- }
-
g_clear_object (&specification->state);
+ g_ptr_array_set_size (specification->priv->columns, 0);
+
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_table_specification_parent_class)->dispose (object);
}
@@ -73,6 +67,8 @@ table_specification_finalize (GObject *object)
g_free (specification->click_to_add_message);
g_free (specification->domain);
+ g_ptr_array_unref (specification->priv->columns);
+
/* Chain up to parent's finalize() method. */
G_OBJECT_CLASS (e_table_specification_parent_class)->finalize (object);
}
@@ -94,6 +90,9 @@ e_table_specification_init (ETableSpecification *specification)
{
specification->priv =
E_TABLE_SPECIFICATION_GET_PRIVATE (specification);
+ specification->priv->columns =
+ g_ptr_array_new_with_free_func (
+ (GDestroyNotify) g_object_unref);
specification->alternating_row_colors = TRUE;
specification->no_headers = FALSE;
@@ -138,18 +137,9 @@ e_table_specification_new (void)
GPtrArray *
e_table_specification_ref_columns (ETableSpecification *specification)
{
- GPtrArray *array;
- guint ii;
-
g_return_val_if_fail (E_IS_TABLE_SPECIFICATION (specification), NULL);
- g_return_val_if_fail (specification->columns != NULL, NULL);
-
- array = g_ptr_array_new ();
- for (ii = 0; specification->columns[ii] != NULL; ii++)
- g_ptr_array_add (array, specification->columns[ii]);
-
- return array;
+ return g_ptr_array_ref (specification->priv->columns);
}
/**
@@ -228,8 +218,6 @@ e_table_specification_load_from_node (ETableSpecification *specification,
{
gchar *temp;
xmlNode *children;
- GQueue columns = G_QUEUE_INIT;
- guint ii = 0;
specification->no_headers = e_xml_get_bool_prop_by_name (node, (const guchar *)"no-headers");
specification->click_to_add = e_xml_get_bool_prop_by_name (node, (const guchar *)"click-to-add");
@@ -284,20 +272,15 @@ e_table_specification_load_from_node (ETableSpecification *specification,
if (specification->state)
g_object_unref (specification->state);
specification->state = NULL;
- if (specification->columns) {
- for (ii = 0; specification->columns[ii] != NULL; ii++) {
- g_object_unref (specification->columns[ii]);
- }
- g_free (specification->columns);
- }
- specification->columns = NULL;
+
+ g_ptr_array_set_size (specification->priv->columns, 0);
for (children = node->xmlChildrenNode; children; children = children->next) {
if (!strcmp ((gchar *) children->name, "ETableColumn")) {
ETableColumnSpecification *col_spec = e_table_column_specification_new ();
e_table_column_specification_load_from_node (col_spec, children);
- g_queue_push_tail (&columns, col_spec);
+ g_ptr_array_add (specification->priv->columns, col_spec);
} else if (specification->state == NULL && !strcmp ((gchar *) children->name, "ETableState")) {
specification->state = e_table_state_new (specification);
e_table_state_load_from_node (specification->state, children);
@@ -305,14 +288,6 @@ e_table_specification_load_from_node (ETableSpecification *specification,
}
}
- ii = 0;
- specification->columns = g_new0 (
- ETableColumnSpecification *,
- g_queue_get_length (&columns) + 1);
- while (!g_queue_is_empty (&columns))
- specification->columns[ii++] = g_queue_pop_head (&columns);
-
- /* e_table_state_vanilla() uses the columns array we just created. */
if (specification->state == NULL)
specification->state = e_table_state_vanilla (specification);
}