diff options
-rw-r--r-- | widgets/table/e-table-config.c | 53 | ||||
-rw-r--r-- | widgets/table/e-table-config.h | 3 | ||||
-rw-r--r-- | widgets/table/e-table-sort-info.c | 17 | ||||
-rw-r--r-- | widgets/table/e-table-sort-info.h | 1 | ||||
-rw-r--r-- | widgets/table/e-table.c | 16 |
5 files changed, 79 insertions, 11 deletions
diff --git a/widgets/table/e-table-config.c b/widgets/table/e-table-config.c index accef6f174..f25e77245d 100644 --- a/widgets/table/e-table-config.c +++ b/widgets/table/e-table-config.c @@ -26,6 +26,13 @@ static GtkObjectClass *config_parent_class; +enum { + CHANGED, + LAST_SIGNAL +}; + +static guint e_table_config_signals [LAST_SIGNAL] = { 0, }; + static void config_destroy (GtkObject *object) { @@ -42,11 +49,36 @@ config_destroy (GtkObject *object) } static void -config_class_init (GtkObjectClass *klass) +e_table_config_changed (ETableConfig *config, ETableState *state) { - config_parent_class = gtk_type_class (PARENT_TYPE); + g_return_if_fail (config != NULL); + g_return_if_fail (E_IS_TABLE_CONFIG (config)); + + gtk_signal_emit(GTK_OBJECT(config), + e_table_config_signals [CHANGED], + state); +} + +static void +config_class_init (GtkObjectClass *object_class) +{ + ETableConfigClass *klass = E_TABLE_CONFIG_CLASS(object_class); + + config_parent_class = gtk_type_class (PARENT_TYPE); - klass->destroy = config_destroy; + klass->changed = NULL; + + object_class->destroy = config_destroy; + + e_table_config_signals [CHANGED] = + gtk_signal_new ("changed", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (ETableConfigClass, changed), + gtk_marshal_NONE__OBJECT, + GTK_TYPE_NONE, 1, E_TABLE_STATE_TYPE); + + gtk_object_class_add_signals (object_class, e_table_config_signals, LAST_SIGNAL); } static ETableColumnSpecification * @@ -351,6 +383,15 @@ dialog_destroyed (GtkObject *dialog, ETableConfig *config) gtk_object_destroy (GTK_OBJECT (config)); } +static void +dialog_apply (GnomePropertyBox *pbox, gint page_num, ETableConfig *config) +{ + if (page_num != -1) + return; + + e_table_config_changed (config, config->state); +} + /* * Invoked by the Glade auto-connect code */ @@ -361,6 +402,7 @@ e_table_proxy_gtk_combo_text_new (void) return gtk_combo_text_new (TRUE); } +#if 0 static GtkWidget * configure_dialog (GladeXML *gui, const char *widget_name, ETableConfig *config) { @@ -370,6 +412,7 @@ configure_dialog (GladeXML *gui, const char *widget_name, ETableConfig *config) return w; } +#endif static void connect_button (ETableConfig *config, GladeXML *gui, const char *widget_name, void *cback) @@ -633,6 +676,10 @@ setup_gui (ETableConfig *config) gtk_signal_connect ( GTK_OBJECT (config->dialog_toplevel), "destroy", GTK_SIGNAL_FUNC (dialog_destroyed), config); + + gtk_signal_connect ( + GTK_OBJECT (config->dialog_toplevel), "apply", + GTK_SIGNAL_FUNC (dialog_apply), config); gtk_object_unref (GTK_OBJECT (gui)); } diff --git a/widgets/table/e-table-config.h b/widgets/table/e-table-config.h index df224c4a2a..e33aab33bf 100644 --- a/widgets/table/e-table-config.h +++ b/widgets/table/e-table-config.h @@ -56,6 +56,9 @@ typedef struct { typedef struct { GtkObjectClass parent_class; + + /* Signals */ + void (*changed) (ETableConfig *config); } ETableConfigClass; GtkType e_table_config_get_type (void); diff --git a/widgets/table/e-table-sort-info.c b/widgets/table/e-table-sort-info.c index 47f22ee5ff..c723ded8d8 100644 --- a/widgets/table/e-table-sort-info.c +++ b/widgets/table/e-table-sort-info.c @@ -428,3 +428,20 @@ e_table_sort_info_save_to_node (ETableSortInfo *info, return grouping; } +ETableSortInfo * +e_table_sort_info_duplicate (ETableSortInfo *info) +{ + ETableSortInfo *new_info; + + new_info = e_table_sort_info_new(); + + new_info->group_count = info->group_count; + new_info->groupings = g_new(ETableSortColumn, new_info->group_count); + memmove(new_info->groupings, info->groupings, sizeof (ETableSortColumn) * new_info->group_count); + + new_info->sort_count = info->sort_count; + new_info->sortings = g_new(ETableSortColumn, new_info->sort_count); + memmove(new_info->sortings, info->sortings, sizeof (ETableSortColumn) * new_info->sort_count); + + return new_info; +} diff --git a/widgets/table/e-table-sort-info.h b/widgets/table/e-table-sort-info.h index 71822337b7..c79eb019b3 100644 --- a/widgets/table/e-table-sort-info.h +++ b/widgets/table/e-table-sort-info.h @@ -70,5 +70,6 @@ void e_table_sort_info_load_from_node (ETableSortInfo *info, gdouble state_version); xmlNode *e_table_sort_info_save_to_node (ETableSortInfo *info, xmlNode *parent); +ETableSortInfo *e_table_sort_info_duplicate (ETableSortInfo *info); #endif /* _E_TABLE_SORT_INFO_H_ */ diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c index 238183ec8d..19db9e807e 100644 --- a/widgets/table/e-table.c +++ b/widgets/table/e-table.c @@ -831,16 +831,16 @@ e_table_set_state_object(ETable *e_table, ETableState *state) e_table->group_info_change_id); gtk_object_unref(GTK_OBJECT(e_table->sort_info)); } - e_table->sort_info = state->sort_info; - if (e_table->sort_info) { - gtk_object_ref(GTK_OBJECT(e_table->sort_info)); + if (state->sort_info) { + e_table->sort_info = e_table_sort_info_duplicate(state->sort_info); e_table->group_info_change_id = - gtk_signal_connect ( - GTK_OBJECT (e_table->sort_info), - "group_info_changed", - GTK_SIGNAL_FUNC (sort_info_changed), - e_table); + gtk_signal_connect (GTK_OBJECT (e_table->sort_info), + "group_info_changed", + GTK_SIGNAL_FUNC (sort_info_changed), + e_table); } + else + e_table->sort_info = NULL; if (e_table->sorter) gtk_object_set(GTK_OBJECT(e_table->sorter), |