diff options
Diffstat (limited to 'widgets/table/e-table-sorter.c')
-rw-r--r-- | widgets/table/e-table-sorter.c | 36 |
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")); |