aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table/e-table-sorter.c
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/table/e-table-sorter.c')
-rw-r--r--widgets/table/e-table-sorter.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/widgets/table/e-table-sorter.c b/widgets/table/e-table-sorter.c
index 879234b742..6afafb6824 100644
--- a/widgets/table/e-table-sorter.c
+++ b/widgets/table/e-table-sorter.c
@@ -45,6 +45,8 @@ static ESorterClass *parent_class;
static void ets_model_changed (ETableModel *etm, ETableSorter *ets);
static void ets_model_row_changed (ETableModel *etm, int row, ETableSorter *ets);
static void ets_model_cell_changed (ETableModel *etm, int col, int row, ETableSorter *ets);
+static void ets_model_rows_inserted (ETableModel *etm, int row, int count, ETableSorter *ets);
+static void ets_model_rows_deleted (ETableModel *etm, int row, int count, ETableSorter *ets);
static void ets_sort_info_changed (ETableSortInfo *info, ETableSorter *ets);
static void ets_clean (ETableSorter *ets);
static void ets_sort (ETableSorter *ets);
@@ -67,13 +69,22 @@ ets_destroy (GtkObject *object)
ets->table_model_row_changed_id);
gtk_signal_disconnect (GTK_OBJECT (ets->source),
ets->table_model_cell_changed_id);
+ gtk_signal_disconnect (GTK_OBJECT (ets->source),
+ ets->table_model_rows_inserted_id);
+ gtk_signal_disconnect (GTK_OBJECT (ets->source),
+ ets->table_model_rows_deleted_id);
gtk_signal_disconnect (GTK_OBJECT (ets->sort_info),
ets->sort_info_changed_id);
+ gtk_signal_disconnect (GTK_OBJECT (ets->sort_info),
+ ets->group_info_changed_id);
ets->table_model_changed_id = 0;
ets->table_model_row_changed_id = 0;
ets->table_model_cell_changed_id = 0;
+ ets->table_model_rows_inserted_id = 0;
+ ets->table_model_rows_deleted_id = 0;
ets->sort_info_changed_id = 0;
+ ets->group_info_changed_id = 0;
if (ets->sort_info)
gtk_object_unref(GTK_OBJECT(ets->sort_info));
@@ -95,6 +106,8 @@ ets_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
if (ets->sort_info) {
if (ets->sort_info_changed_id)
gtk_signal_disconnect(GTK_OBJECT(ets->sort_info), ets->sort_info_changed_id);
+ if (ets->group_info_changed_id)
+ gtk_signal_disconnect(GTK_OBJECT(ets->sort_info), ets->group_info_changed_id);
gtk_object_unref(GTK_OBJECT(ets->sort_info));
}
@@ -102,6 +115,8 @@ ets_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
gtk_object_ref(GTK_OBJECT(ets->sort_info));
ets->sort_info_changed_id = gtk_signal_connect (GTK_OBJECT (ets->sort_info), "sort_info_changed",
GTK_SIGNAL_FUNC (ets_sort_info_changed), ets);
+ ets->group_info_changed_id = gtk_signal_connect (GTK_OBJECT (ets->sort_info), "group_info_changed",
+ GTK_SIGNAL_FUNC (ets_sort_info_changed), ets);
ets_clean (ets);
break;
@@ -155,7 +170,10 @@ ets_init (ETableSorter *ets)
ets->table_model_changed_id = 0;
ets->table_model_row_changed_id = 0;
ets->table_model_cell_changed_id = 0;
+ ets->table_model_rows_inserted_id = 0;
+ ets->table_model_rows_deleted_id = 0;
ets->sort_info_changed_id = 0;
+ ets->group_info_changed_id = 0;
}
E_MAKE_TYPE(e_table_sorter, "ETableSorter", ETableSorter, ets_class_init, ets_init, PARENT_TYPE);
@@ -178,8 +196,14 @@ e_table_sorter_new (ETableModel *source, ETableHeader *full_header, ETableSortIn
GTK_SIGNAL_FUNC (ets_model_row_changed), ets);
ets->table_model_cell_changed_id = gtk_signal_connect (GTK_OBJECT (source), "model_cell_changed",
GTK_SIGNAL_FUNC (ets_model_cell_changed), ets);
+ ets->table_model_rows_inserted_id = gtk_signal_connect (GTK_OBJECT (source), "model_rows_inserted",
+ GTK_SIGNAL_FUNC (ets_model_rows_inserted), ets);
+ ets->table_model_rows_deleted_id = gtk_signal_connect (GTK_OBJECT (source), "model_rows_deleted",
+ GTK_SIGNAL_FUNC (ets_model_rows_deleted), ets);
ets->sort_info_changed_id = gtk_signal_connect (GTK_OBJECT (sort_info), "sort_info_changed",
GTK_SIGNAL_FUNC (ets_sort_info_changed), ets);
+ ets->group_info_changed_id = gtk_signal_connect (GTK_OBJECT (sort_info), "group_info_changed",
+ GTK_SIGNAL_FUNC (ets_sort_info_changed), ets);
return ets;
}
@@ -203,6 +227,18 @@ ets_model_cell_changed (ETableModel *etm, int col, int row, ETableSorter *ets)
}
static void
+ets_model_rows_inserted (ETableModel *etm, int row, int count, ETableSorter *ets)
+{
+ ets_clean(ets);
+}
+
+static void
+ets_model_rows_deleted (ETableModel *etm, int row, int count, ETableSorter *ets)
+{
+ ets_clean(ets);
+}
+
+static void
ets_sort_info_changed (ETableSortInfo *info, ETableSorter *ets)
{
d(g_print ("sort info changed\n"));