aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/e-table/e-table-config.c168
-rw-r--r--widgets/e-table/e-table-config.glade84
-rw-r--r--widgets/e-table/e-table-sort-info.c30
-rw-r--r--widgets/e-table/e-table.c3
-rw-r--r--widgets/table/e-table-config.c168
-rw-r--r--widgets/table/e-table-config.glade84
-rw-r--r--widgets/table/e-table-sort-info.c30
-rw-r--r--widgets/table/e-table.c3
8 files changed, 422 insertions, 148 deletions
diff --git a/widgets/e-table/e-table-config.c b/widgets/e-table/e-table-config.c
index da7dde1990..8367a727c1 100644
--- a/widgets/e-table/e-table-config.c
+++ b/widgets/e-table/e-table-config.c
@@ -9,7 +9,7 @@
*/
#include <config.h>
#include <gnome.h>
-#inclued <glade/glade.h>
+#include <glade/glade.h>
#include "e-util/e-util.h"
#include "e-util/e-xml-utils.h"
#include "e-util/e-canvas.h"
@@ -19,6 +19,112 @@
#include "e-table-item.h"
#include "e-table-group.h"
+typedef struct {
+ GladeXML *gui;
+ char *old_spec;
+} ConfigData;
+
+static void
+load_data (GladeXML *xml, char *label_widget, const char *content)
+{
+ GtkLabel *label = GTK_LABEL (glade_xml_get_widget (xml, label_widget));
+
+ gtk_label_set_text (label, content);
+}
+
+static char *
+get_fields (ETable *etable)
+{
+ xmlNode *xmlRoot, *xmlColumns;
+ xmlNode *column;
+ GString *res;
+ char *s;
+
+ res = g_string_new ("");
+ xmlRoot = xmlDocGetRootElement (xmlSpec);
+ xmlColumns = e_xml_get_child_by_name (xmlRoot, "columns-shown");
+
+ for (column = xmlColumns->childs; column; column = column->next){
+ ETableCol *ecol;
+ int col = atoi (colum->childs->content);
+
+ ecol = e_table_header_get_column (etable->header, col);
+
+ g_string_append (res, text);
+ if (column->next)
+ g_string_appen (res, ", ");
+ }
+ s = res->str;
+ g_string_free (res, FALSE);
+
+ return s;
+}
+
+static char *
+get_grouping (ETable *etable)
+{
+ return g_strdup ("None");
+}
+
+static char *
+get_sort (ETable *etable)
+{
+ return g_strdup ("None");
+}
+
+static char *
+get_filter (ETable *etable)
+{
+ return g_strdup ("None");
+}
+
+/*
+ * Loads a user-readable definition of the various e-table parameters
+ * into the dialog for configuring it
+ */
+static void
+load_label_data (GladeXML *gui, ETabel *etable)
+{
+ GtkWidget *l;
+ char *s;
+
+ s = get_fields (etable);
+ load_data (gui, "label1", s);
+ g_free (s);
+
+ s = get_grouping (etable);
+ load_data (gui, "label2", s);
+ g_free (s);
+
+ s = get_sort (etable);
+ load_data (gui, "label3", s);
+ g_free (s);
+
+ s = get_filter (etable);
+ load_data (gui, "label4", s);
+ g_free (s);
+}
+
+static void
+cb_button_fields (GtkWidget *widget, ETable *etable)
+{
+}
+
+static void
+cb_button_grouping (GtkWidget *widget, ETable *etable)
+{
+}
+
+static void
+cb_button_sort (GtkWidget *widget, ETable *etable)
+{
+}
+
+static void
+cb_button_filter (GtkWidget *widget, ETable *etable)
+{
+}
+
GtkWidget *
e_table_gui_config (ETable *etable)
{
@@ -30,12 +136,70 @@ e_table_gui_config (ETable *etable)
return NULL;
dialog = GNOME_DIALOG (glade_xml_get_widget (gui, "e-table-config"));
+
+ gtk_signal_connect (
+ GTK_OBJECT (glade_xml_get_widget (gui, "button-fields")),
+ "clicked", GTK_SIGNAL_FUNC (cb_button_fields), etable);
+ gtk_signal_connect (
+ GTK_OBJECT (glade_xml_get_widget (gui, "button-grouping")),
+ "clicked", GTK_SIGNAL_FUNC (cb_button_grouping), etable);
+ gtk_signal_connect (
+ GTK_OBJECT (glade_xml_get_widget (gui, "button-sort")),
+ "clicked", GTK_SIGNAL_FUNC (cb_button_sort), etable);
+ gtk_signal_connect (
+ GTK_OBJECT (glade_xml_get_widget (gui, "button-filter")),
+ "clicked", GTK_SIGNAL_FUNC (cb_button_filter), etable);
+
+ load_label_data (etable);
+
+ gtk_object_set_data (
+ GTK_OBJECT (dialog), "config-data",
+ config_data);
+
+ return dialog;
+}
+
+static void
+e_table_gui_destroy_config_data (GtkWidget *widget)
+{
+ ConfigData *cd = gtk_object_get_data (GTK_OBJECT (widget), "config-data");
+
+ g_free (cd->old_spec);
+ gtk_object_destroy (cd->gui);
+ g_free (cd);
+}
+
+void
+e_table_gui_config_accept (GtkWidget *widget, ETable *etable)
+{
+ e_table_gui_destroy_config_data (widget);
}
+void
+e_table_gui_config_cancel (GtkWidget *widget, ETable *etable)
+{
+ e_table_gui_destroy_config_data (widget);
+}
void
-e_table_do_gui_config (ETable *etable)
+e_table_do_gui_config (GtkWidget *parent, ETable *etable)
{
+ GnomeDialog *dialog;
+ int r;
+
+ dialog = GNOME_DIALOG (e_table_gui_config (etable));
+ if (!dialog)
+ return;
+
+ if (parent)
+ gnome_dialog_set_parent (dialog, parent);
+
+ r = gnome_dialog_run (GNOME_DIALOG (dialog));
+
+ if (r == -1 || r == 1)
+ e_table_gui_config_cancel (GTK_WIDGET (dialog), etable);
+ else
+ e_table_gui_config_accept (GTK_WIDGET (dialog), etable);
}
diff --git a/widgets/e-table/e-table-config.glade b/widgets/e-table/e-table-config.glade
index 176a8c3ab7..8affa8cefa 100644
--- a/widgets/e-table/e-table-config.glade
+++ b/widgets/e-table/e-table-config.glade
@@ -10,17 +10,9 @@
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
- <use_widget_names>False</use_widget_names>
<output_main_file>False</output_main_file>
<output_support_files>False</output_support_files>
<output_build_files>False</output_build_files>
- <backup_source_files>True</backup_source_files>
- <main_source_file>interface.c</main_source_file>
- <main_header_file>interface.h</main_header_file>
- <handler_source_file>callbacks.c</handler_source_file>
- <handler_header_file>callbacks.h</handler_header_file>
- <support_source_file>support.c</support_source_file>
- <support_header_file>support.h</support_header_file>
<output_translatable_strings>True</output_translatable_strings>
<translatable_strings_file>e-table-config.glade.h</translatable_strings_file>
</project>
@@ -51,6 +43,40 @@
</child>
<widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area2</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>0</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button12</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button14</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+
+ <widget>
<class>GtkFrame</class>
<name>top-frame</name>
<border_width>2</border_width>
@@ -75,7 +101,7 @@
<widget>
<class>GtkButton</class>
- <name>button3</name>
+ <name>button-fields</name>
<can_focus>True</can_focus>
<label>Fields</label>
<child>
@@ -96,7 +122,7 @@
<widget>
<class>GtkButton</class>
- <name>button4</name>
+ <name>button-groups</name>
<can_focus>True</can_focus>
<label>Grouping</label>
<child>
@@ -117,7 +143,7 @@
<widget>
<class>GtkButton</class>
- <name>button5</name>
+ <name>button-sort</name>
<can_focus>True</can_focus>
<label>Sort</label>
<child>
@@ -138,7 +164,7 @@
<widget>
<class>GtkButton</class>
- <name>button6</name>
+ <name>button-filter</name>
<can_focus>True</can_focus>
<label>Filter</label>
<child>
@@ -262,40 +288,6 @@
</widget>
</widget>
</widget>
-
- <widget>
- <class>GtkHButtonBox</class>
- <child_name>GnomeDialog:action_area</child_name>
- <name>dialog-action_area2</name>
- <layout_style>GTK_BUTTONBOX_END</layout_style>
- <spacing>0</spacing>
- <child_min_width>85</child_min_width>
- <child_min_height>27</child_min_height>
- <child_ipad_x>7</child_ipad_x>
- <child_ipad_y>0</child_ipad_y>
- <child>
- <padding>0</padding>
- <expand>False</expand>
- <fill>True</fill>
- <pack>GTK_PACK_END</pack>
- </child>
-
- <widget>
- <class>GtkButton</class>
- <name>button12</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
- </widget>
-
- <widget>
- <class>GtkButton</class>
- <name>button14</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
- </widget>
- </widget>
</widget>
</widget>
diff --git a/widgets/e-table/e-table-sort-info.c b/widgets/e-table/e-table-sort-info.c
index 9e8d6e8228..bf90a13602 100644
--- a/widgets/e-table/e-table-sort-info.c
+++ b/widgets/e-table/e-table-sort-info.c
@@ -11,10 +11,11 @@
#include <gtk/gtksignal.h>
#include <gnome-xml/tree.h>
#include "e-table-sort-info.h"
+#include "e-util/e-util.h"
#define ETM_CLASS(e) ((ETableSortInfoClass *)((GtkObject *)e)->klass)
-#define PARENT_TYPE gtk_object_get_type ();
+#define PARENT_TYPE gtk_object_get_type ()
static GtkObjectClass *e_table_sort_info_parent_class;
@@ -81,31 +82,8 @@ e_table_sort_info_class_init (GtkObjectClass *object_class)
GTK_ARG_READWRITE, ARG_GROUPING);
}
-
-guint
-e_table_sort_info_get_type (void)
-{
- static guint type = 0;
-
- if (!type)
- {
- GtkTypeInfo info =
- {
- "ETableSortInfo",
- sizeof (ETableSortInfo),
- sizeof (ETableSortInfoClass),
- (GtkClassInitFunc) e_table_sort_info_class_init,
- NULL,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
- };
-
- type = gtk_type_unique (gtk_object_get_type (), &info);
- }
-
- return type;
-}
+E_MAKE_TYPE(e_table_sort_info, "ETableSortInfo", ETableSortInfo,
+ e_table_sort_info_class_init, NULL, PARENT_TYPE);
void
e_table_sort_info_changed (ETableSortInfo *e_table_sort_info)
diff --git a/widgets/e-table/e-table.c b/widgets/e-table/e-table.c
index fbf0dbfa67..7360666d06 100644
--- a/widgets/e-table/e-table.c
+++ b/widgets/e-table/e-table.c
@@ -104,6 +104,7 @@ e_table_make_header (ETable *e_table, ETableHeader *full_header, xmlNode *xmlCol
const int max_cols = e_table_header_count (full_header);
nh = e_table_header_new ();
+
for (column = xmlColumns->childs; column; column = column->next) {
int col = atoi (column->childs->content);
@@ -881,6 +882,7 @@ e_table_get_specification (ETable *e_table)
xmlDoc *doc = et_build_tree (e_table);
xmlChar *buffer;
gint size;
+
xmlDocDumpMemory (doc,
&buffer,
&size);
@@ -892,6 +894,7 @@ void
e_table_save_specification (ETable *e_table, gchar *filename)
{
xmlDoc *doc = et_build_tree (e_table);
+
xmlSaveFile (filename, doc);
xmlFreeDoc (doc);
}
diff --git a/widgets/table/e-table-config.c b/widgets/table/e-table-config.c
index da7dde1990..8367a727c1 100644
--- a/widgets/table/e-table-config.c
+++ b/widgets/table/e-table-config.c
@@ -9,7 +9,7 @@
*/
#include <config.h>
#include <gnome.h>
-#inclued <glade/glade.h>
+#include <glade/glade.h>
#include "e-util/e-util.h"
#include "e-util/e-xml-utils.h"
#include "e-util/e-canvas.h"
@@ -19,6 +19,112 @@
#include "e-table-item.h"
#include "e-table-group.h"
+typedef struct {
+ GladeXML *gui;
+ char *old_spec;
+} ConfigData;
+
+static void
+load_data (GladeXML *xml, char *label_widget, const char *content)
+{
+ GtkLabel *label = GTK_LABEL (glade_xml_get_widget (xml, label_widget));
+
+ gtk_label_set_text (label, content);
+}
+
+static char *
+get_fields (ETable *etable)
+{
+ xmlNode *xmlRoot, *xmlColumns;
+ xmlNode *column;
+ GString *res;
+ char *s;
+
+ res = g_string_new ("");
+ xmlRoot = xmlDocGetRootElement (xmlSpec);
+ xmlColumns = e_xml_get_child_by_name (xmlRoot, "columns-shown");
+
+ for (column = xmlColumns->childs; column; column = column->next){
+ ETableCol *ecol;
+ int col = atoi (colum->childs->content);
+
+ ecol = e_table_header_get_column (etable->header, col);
+
+ g_string_append (res, text);
+ if (column->next)
+ g_string_appen (res, ", ");
+ }
+ s = res->str;
+ g_string_free (res, FALSE);
+
+ return s;
+}
+
+static char *
+get_grouping (ETable *etable)
+{
+ return g_strdup ("None");
+}
+
+static char *
+get_sort (ETable *etable)
+{
+ return g_strdup ("None");
+}
+
+static char *
+get_filter (ETable *etable)
+{
+ return g_strdup ("None");
+}
+
+/*
+ * Loads a user-readable definition of the various e-table parameters
+ * into the dialog for configuring it
+ */
+static void
+load_label_data (GladeXML *gui, ETabel *etable)
+{
+ GtkWidget *l;
+ char *s;
+
+ s = get_fields (etable);
+ load_data (gui, "label1", s);
+ g_free (s);
+
+ s = get_grouping (etable);
+ load_data (gui, "label2", s);
+ g_free (s);
+
+ s = get_sort (etable);
+ load_data (gui, "label3", s);
+ g_free (s);
+
+ s = get_filter (etable);
+ load_data (gui, "label4", s);
+ g_free (s);
+}
+
+static void
+cb_button_fields (GtkWidget *widget, ETable *etable)
+{
+}
+
+static void
+cb_button_grouping (GtkWidget *widget, ETable *etable)
+{
+}
+
+static void
+cb_button_sort (GtkWidget *widget, ETable *etable)
+{
+}
+
+static void
+cb_button_filter (GtkWidget *widget, ETable *etable)
+{
+}
+
GtkWidget *
e_table_gui_config (ETable *etable)
{
@@ -30,12 +136,70 @@ e_table_gui_config (ETable *etable)
return NULL;
dialog = GNOME_DIALOG (glade_xml_get_widget (gui, "e-table-config"));
+
+ gtk_signal_connect (
+ GTK_OBJECT (glade_xml_get_widget (gui, "button-fields")),
+ "clicked", GTK_SIGNAL_FUNC (cb_button_fields), etable);
+ gtk_signal_connect (
+ GTK_OBJECT (glade_xml_get_widget (gui, "button-grouping")),
+ "clicked", GTK_SIGNAL_FUNC (cb_button_grouping), etable);
+ gtk_signal_connect (
+ GTK_OBJECT (glade_xml_get_widget (gui, "button-sort")),
+ "clicked", GTK_SIGNAL_FUNC (cb_button_sort), etable);
+ gtk_signal_connect (
+ GTK_OBJECT (glade_xml_get_widget (gui, "button-filter")),
+ "clicked", GTK_SIGNAL_FUNC (cb_button_filter), etable);
+
+ load_label_data (etable);
+
+ gtk_object_set_data (
+ GTK_OBJECT (dialog), "config-data",
+ config_data);
+
+ return dialog;
+}
+
+static void
+e_table_gui_destroy_config_data (GtkWidget *widget)
+{
+ ConfigData *cd = gtk_object_get_data (GTK_OBJECT (widget), "config-data");
+
+ g_free (cd->old_spec);
+ gtk_object_destroy (cd->gui);
+ g_free (cd);
+}
+
+void
+e_table_gui_config_accept (GtkWidget *widget, ETable *etable)
+{
+ e_table_gui_destroy_config_data (widget);
}
+void
+e_table_gui_config_cancel (GtkWidget *widget, ETable *etable)
+{
+ e_table_gui_destroy_config_data (widget);
+}
void
-e_table_do_gui_config (ETable *etable)
+e_table_do_gui_config (GtkWidget *parent, ETable *etable)
{
+ GnomeDialog *dialog;
+ int r;
+
+ dialog = GNOME_DIALOG (e_table_gui_config (etable));
+ if (!dialog)
+ return;
+
+ if (parent)
+ gnome_dialog_set_parent (dialog, parent);
+
+ r = gnome_dialog_run (GNOME_DIALOG (dialog));
+
+ if (r == -1 || r == 1)
+ e_table_gui_config_cancel (GTK_WIDGET (dialog), etable);
+ else
+ e_table_gui_config_accept (GTK_WIDGET (dialog), etable);
}
diff --git a/widgets/table/e-table-config.glade b/widgets/table/e-table-config.glade
index 176a8c3ab7..8affa8cefa 100644
--- a/widgets/table/e-table-config.glade
+++ b/widgets/table/e-table-config.glade
@@ -10,17 +10,9 @@
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
- <use_widget_names>False</use_widget_names>
<output_main_file>False</output_main_file>
<output_support_files>False</output_support_files>
<output_build_files>False</output_build_files>
- <backup_source_files>True</backup_source_files>
- <main_source_file>interface.c</main_source_file>
- <main_header_file>interface.h</main_header_file>
- <handler_source_file>callbacks.c</handler_source_file>
- <handler_header_file>callbacks.h</handler_header_file>
- <support_source_file>support.c</support_source_file>
- <support_header_file>support.h</support_header_file>
<output_translatable_strings>True</output_translatable_strings>
<translatable_strings_file>e-table-config.glade.h</translatable_strings_file>
</project>
@@ -51,6 +43,40 @@
</child>
<widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area2</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>0</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button12</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button14</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+
+ <widget>
<class>GtkFrame</class>
<name>top-frame</name>
<border_width>2</border_width>
@@ -75,7 +101,7 @@
<widget>
<class>GtkButton</class>
- <name>button3</name>
+ <name>button-fields</name>
<can_focus>True</can_focus>
<label>Fields</label>
<child>
@@ -96,7 +122,7 @@
<widget>
<class>GtkButton</class>
- <name>button4</name>
+ <name>button-groups</name>
<can_focus>True</can_focus>
<label>Grouping</label>
<child>
@@ -117,7 +143,7 @@
<widget>
<class>GtkButton</class>
- <name>button5</name>
+ <name>button-sort</name>
<can_focus>True</can_focus>
<label>Sort</label>
<child>
@@ -138,7 +164,7 @@
<widget>
<class>GtkButton</class>
- <name>button6</name>
+ <name>button-filter</name>
<can_focus>True</can_focus>
<label>Filter</label>
<child>
@@ -262,40 +288,6 @@
</widget>
</widget>
</widget>
-
- <widget>
- <class>GtkHButtonBox</class>
- <child_name>GnomeDialog:action_area</child_name>
- <name>dialog-action_area2</name>
- <layout_style>GTK_BUTTONBOX_END</layout_style>
- <spacing>0</spacing>
- <child_min_width>85</child_min_width>
- <child_min_height>27</child_min_height>
- <child_ipad_x>7</child_ipad_x>
- <child_ipad_y>0</child_ipad_y>
- <child>
- <padding>0</padding>
- <expand>False</expand>
- <fill>True</fill>
- <pack>GTK_PACK_END</pack>
- </child>
-
- <widget>
- <class>GtkButton</class>
- <name>button12</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
- </widget>
-
- <widget>
- <class>GtkButton</class>
- <name>button14</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
- </widget>
- </widget>
</widget>
</widget>
diff --git a/widgets/table/e-table-sort-info.c b/widgets/table/e-table-sort-info.c
index 9e8d6e8228..bf90a13602 100644
--- a/widgets/table/e-table-sort-info.c
+++ b/widgets/table/e-table-sort-info.c
@@ -11,10 +11,11 @@
#include <gtk/gtksignal.h>
#include <gnome-xml/tree.h>
#include "e-table-sort-info.h"
+#include "e-util/e-util.h"
#define ETM_CLASS(e) ((ETableSortInfoClass *)((GtkObject *)e)->klass)
-#define PARENT_TYPE gtk_object_get_type ();
+#define PARENT_TYPE gtk_object_get_type ()
static GtkObjectClass *e_table_sort_info_parent_class;
@@ -81,31 +82,8 @@ e_table_sort_info_class_init (GtkObjectClass *object_class)
GTK_ARG_READWRITE, ARG_GROUPING);
}
-
-guint
-e_table_sort_info_get_type (void)
-{
- static guint type = 0;
-
- if (!type)
- {
- GtkTypeInfo info =
- {
- "ETableSortInfo",
- sizeof (ETableSortInfo),
- sizeof (ETableSortInfoClass),
- (GtkClassInitFunc) e_table_sort_info_class_init,
- NULL,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
- };
-
- type = gtk_type_unique (gtk_object_get_type (), &info);
- }
-
- return type;
-}
+E_MAKE_TYPE(e_table_sort_info, "ETableSortInfo", ETableSortInfo,
+ e_table_sort_info_class_init, NULL, PARENT_TYPE);
void
e_table_sort_info_changed (ETableSortInfo *e_table_sort_info)
diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c
index fbf0dbfa67..7360666d06 100644
--- a/widgets/table/e-table.c
+++ b/widgets/table/e-table.c
@@ -104,6 +104,7 @@ e_table_make_header (ETable *e_table, ETableHeader *full_header, xmlNode *xmlCol
const int max_cols = e_table_header_count (full_header);
nh = e_table_header_new ();
+
for (column = xmlColumns->childs; column; column = column->next) {
int col = atoi (column->childs->content);
@@ -881,6 +882,7 @@ e_table_get_specification (ETable *e_table)
xmlDoc *doc = et_build_tree (e_table);
xmlChar *buffer;
gint size;
+
xmlDocDumpMemory (doc,
&buffer,
&size);
@@ -892,6 +894,7 @@ void
e_table_save_specification (ETable *e_table, gchar *filename)
{
xmlDoc *doc = et_build_tree (e_table);
+
xmlSaveFile (filename, doc);
xmlFreeDoc (doc);
}