Added "Hide Column" functionality.

svn path=/trunk/; revision=33266
This commit is contained in:
Stig Bjørlykke 2010-06-20 16:23:43 +00:00
parent 1069c8dccf
commit d3e1e2df1e
8 changed files with 279 additions and 21 deletions

View File

@ -655,6 +655,34 @@ get_column_title(const gint col)
return(cfmt->title);
}
gboolean
get_column_visible(const gint col)
{
GList *clp = g_list_nth(prefs.col_list, col);
fmt_data *cfmt;
if (!clp) /* Invalid column requested */
return TRUE;
cfmt = (fmt_data *) clp->data;
return(cfmt->visible);
}
void
set_column_visible(const gint col, gboolean visible)
{
GList *clp = g_list_nth(prefs.col_list, col);
fmt_data *cfmt;
if (!clp) /* Invalid column requested */
return;
cfmt = (fmt_data *) clp->data;
cfmt->visible = visible;
}
const gchar *
get_column_custom_field(const gint col)
{

View File

@ -33,6 +33,7 @@ typedef struct _fmt_data {
gchar *title;
gchar *fmt;
gchar *custom_field;
gboolean visible;
} fmt_data;
const gchar *col_format_to_string(const gint);
@ -41,6 +42,8 @@ gint get_column_format(const gint);
void get_column_format_matches(gboolean *, const gint);
gint get_column_format_from_str(const gchar *);
gchar *get_column_title(const gint);
gboolean get_column_visible(const gint);
void set_column_visible(const gint, gboolean);
const gchar *get_column_custom_field(const gint);
const gchar *get_column_width_string(const gint, const gint);
const char *get_column_longest_string(const gint);

View File

@ -68,6 +68,7 @@ static void free_col_info(e_prefs *);
static gboolean prefs_initialized = FALSE;
static gchar *gpf_path = NULL;
static gchar *cols_hidden_list = NULL;
/*
* XXX - variables to allow us to attempt to interpret the first
@ -1083,6 +1084,7 @@ init_prefs(void) {
cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
cfmt->title = g_strdup(col_fmt[i * 2]);
cfmt->fmt = g_strdup(col_fmt[(i * 2) + 1]);
cfmt->visible = TRUE;
cfmt->custom_field = NULL;
prefs.col_list = g_list_append(prefs.col_list, cfmt);
}
@ -1639,6 +1641,30 @@ prefs_is_capture_device_hidden(const char *name)
return FALSE;
}
/*
* Returns TRUE if the given column is hidden
*/
static gboolean
prefs_is_column_hidden(const gchar *cols_hidden, const char *fmt)
{
gchar *tok, *cols;
size_t len;
if (cols_hidden && fmt) {
cols = g_strdup (cols_hidden);
len = strlen (fmt);
for (tok = strtok (cols, ","); tok; tok = strtok(NULL, ",")) {
if (strlen (tok) == len && strcmp (fmt, tok) == 0) {
g_free (cols);
return TRUE;
}
}
g_free (cols);
}
return FALSE;
}
/*
* Returns TRUE if the given device should capture in monitor mode by default
*/
@ -1667,6 +1693,7 @@ prefs_capture_device_monitor_mode(const char *name)
#define PRS_PRINT_DEST "print.destination"
#define PRS_PRINT_FILE "print.file"
#define PRS_PRINT_CMD "print.command"
#define PRS_COL_HIDDEN "column.hidden"
#define PRS_COL_FMT "column.format"
#define PRS_STREAM_CL_FG "stream.client.fg"
#define PRS_STREAM_CL_BG "stream.client.bg"
@ -1902,6 +1929,8 @@ set_pref(gchar *pref_name, gchar *value, void *private_data _U_)
} else if (strcmp(pref_name, PRS_PRINT_CMD) == 0) {
g_free(prefs.pr_cmd);
prefs.pr_cmd = g_strdup(value);
} else if (strcmp(pref_name, PRS_COL_HIDDEN) == 0) {
cols_hidden_list = g_strdup (value);
} else if (strcmp(pref_name, PRS_COL_FMT) == 0) {
col_l = prefs_get_string_list(value);
if (col_l == NULL)
@ -1946,22 +1975,27 @@ set_pref(gchar *pref_name, gchar *value, void *private_data _U_)
prefs.num_cols = llen / 2;
col_l_elt = g_list_first(col_l);
while(col_l_elt) {
gchar *prefs_fmt;
cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
cfmt->title = g_strdup(col_l_elt->data);
col_l_elt = col_l_elt->next;
if (strncmp(col_l_elt->data, cust_format, cust_format_len) == 0) {
gchar *fmt = g_strdup(col_l_elt->data);
cfmt->fmt = g_strdup(cust_format);
cfmt->custom_field = g_strdup(&fmt[cust_format_len+1]); /* add 1 for ':' */
g_free (fmt);
prefs_fmt = g_strdup(col_l_elt->data);
cfmt->custom_field = g_strdup(&prefs_fmt[cust_format_len+1]); /* add 1 for ':' */
} else {
cfmt->fmt = g_strdup(col_l_elt->data);
prefs_fmt = g_strdup(cfmt->fmt);
cfmt->custom_field = NULL;
}
cfmt->visible = prefs_is_column_hidden (cols_hidden_list, prefs_fmt) ? FALSE : TRUE;
g_free (prefs_fmt);
col_l_elt = col_l_elt->next;
prefs.col_list = g_list_append(prefs.col_list, cfmt);
}
prefs_clear_string_list(col_l);
g_free (cols_hidden_list);
cols_hidden_list = NULL;
} else if (strcmp(pref_name, PRS_STREAM_CL_FG) == 0) {
cval = strtoul(value, NULL, 16);
prefs.st_client_fg.pixel = 0;
@ -2786,6 +2820,7 @@ write_prefs(char **pf_path_return)
GList *clp, *col_l;
fmt_data *cfmt;
const gchar *cust_format = col_format_to_string(COL_CUSTOM);
GString *cols_hidden = g_string_new ("");
/* Needed for "-G defaultprefs" */
init_prefs();
@ -2968,16 +3003,31 @@ write_prefs(char **pf_path_return)
clp = prefs.col_list;
col_l = NULL;
while (clp) {
gchar *prefs_fmt;
cfmt = (fmt_data *) clp->data;
col_l = g_list_append(col_l, g_strdup(cfmt->title));
if ((strcmp(cfmt->fmt, cust_format) == 0) && (cfmt->custom_field)) {
gchar *fmt = g_strdup_printf("%s:%s", cfmt->fmt, cfmt->custom_field);
col_l = g_list_append(col_l, fmt);
prefs_fmt = g_strdup_printf("%s:%s", cfmt->fmt, cfmt->custom_field);
col_l = g_list_append(col_l, prefs_fmt);
} else {
prefs_fmt = cfmt->fmt;
col_l = g_list_append(col_l, g_strdup(cfmt->fmt));
}
if (!cfmt->visible) {
if (strlen (cols_hidden->str)) {
g_string_append (cols_hidden, ", ");
}
g_string_append (cols_hidden, prefs_fmt);
}
clp = clp->next;
}
fprintf (pf, "\n# Packet list hidden columns.\n");
fprintf (pf, "# List all columns to hide in the packet list.\n");
fprintf (pf, "%s: %s\n", PRS_COL_HIDDEN, cols_hidden->str);
/* This frees the list of strings, but not the strings to which it
refers; they are free'ed in put_string_list(). */
g_string_free (cols_hidden, TRUE);
fprintf (pf, "\n# Packet list column format.\n");
fprintf (pf, "# Each pair of strings consists of a column title and its format.\n");
fprintf (pf, "%s: %s\n", PRS_COL_FMT, put_string_list(col_l));

View File

@ -43,6 +43,7 @@
#include <epan/strutil.h>
#include <epan/plugins.h>
#include <epan/epan_dissect.h>
#include <epan/column.h>
#include "../print.h"
#include "../register.h"
@ -618,6 +619,7 @@ static GtkItemFactoryEntry menu_items[] =
#ifdef NEW_PACKET_LIST
{"/View/Resize All Columns", "<shift><control>R", GTK_MENU_FUNC(new_packet_list_resize_columns_cb),
0, "<StockItem>", WIRESHARK_STOCK_RESIZE_COLUMNS,},
{"/View/Visible Columns", NULL, NULL, 0, NULL, NULL,},
#else
{"/View/Resize All Columns", "<shift><control>R", GTK_MENU_FUNC(packet_list_resize_columns_cb),
0, "<StockItem>", WIRESHARK_STOCK_RESIZE_COLUMNS,},
@ -807,6 +809,7 @@ static GtkItemFactoryEntry packet_list_heading_items[] =
{"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
{"/Hide Column", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_HIDE, NULL, NULL,},
{"/Remove Column", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_REMOVE, "<StockItem>", GTK_STOCK_DELETE,}
#else
{"/Sort Ascending", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_SORT_ASCENDING, "<StockItem>", GTK_STOCK_SORT_ASCENDING,},
@ -3326,6 +3329,56 @@ rebuild_protocol_prefs_menu (module_t *prefs_module_p, gboolean preferences)
}
#ifdef NEW_PACKET_LIST
static void
menu_visible_column_toggle (GtkWidget *w _U_, gpointer data)
{
new_packet_list_toggle_visible_column (GPOINTER_TO_INT(data));
}
static void
menu_activate_all_columns (GtkWidget *w _U_, gpointer data _U_)
{
new_packet_list_set_all_columns_visible ();
}
void
rebuild_visible_columns_menu (void)
{
GtkWidget *menu_columns, *menu_item;
GtkWidget *sub_menu;
GList *clp;
fmt_data *cfmt;
gint col_id = 0;
menu_columns = gtk_item_factory_get_widget(main_menu_factory, "/View/Visible Columns");
sub_menu = gtk_menu_new();
gtk_menu_item_set_submenu (GTK_MENU_ITEM(menu_columns), sub_menu);
clp = g_list_first (prefs.col_list);
while (clp) {
cfmt = (fmt_data *) clp->data;
menu_item = gtk_check_menu_item_new_with_label(cfmt->title);
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(menu_item), cfmt->visible);
g_signal_connect(menu_item, "activate", G_CALLBACK(menu_visible_column_toggle), GINT_TO_POINTER(col_id));
gtk_menu_shell_append (GTK_MENU_SHELL(sub_menu), menu_item);
gtk_widget_show (menu_item);
clp = g_list_next (clp);
col_id++;
}
menu_item = gtk_menu_item_new();
gtk_menu_shell_append (GTK_MENU_SHELL(sub_menu), menu_item);
gtk_widget_show (menu_item);
menu_item = gtk_menu_item_new_with_label ("Enable All");
gtk_menu_shell_append (GTK_MENU_SHELL(sub_menu), menu_item);
g_signal_connect(menu_item, "activate", G_CALLBACK(menu_activate_all_columns), NULL);
gtk_widget_show (menu_item);
}
#endif
void
menus_set_column_align_default (gboolean right_justify)
{

View File

@ -65,6 +65,8 @@ extern void menu_colorize_changed(gboolean packet_list_colorize);
/* Reset preferences menu on profile or preference change. */
extern void menu_prefs_reset(void);
extern void rebuild_visible_columns_menu (void);
#ifdef HAVE_LIBPCAP
/** The "Auto Scroll Packet List in Live Capture" option changed. */
extern void menu_auto_scroll_live_changed(gboolean auto_scroll_in);

View File

@ -199,6 +199,7 @@ col_title_change_ok (GtkWidget *w, gpointer parent_w)
prefs_main_write();
}
rebuild_visible_columns_menu ();
window_destroy(GTK_WIDGET(parent_w));
}
@ -351,6 +352,49 @@ new_packet_list_xalign_column (gint col_id, GtkTreeViewColumn *col, gchar xalign
gtk_widget_queue_draw (packetlist->view);
}
static void
new_packet_list_set_visible_column (gint col_id, GtkTreeViewColumn *col, gboolean visible)
{
gtk_tree_view_column_set_visible(col, visible);
set_column_visible(col_id, visible);
if (!prefs.gui_use_pref_save) {
prefs_main_write();
}
rebuild_visible_columns_menu ();
gtk_widget_queue_draw (packetlist->view);
}
void
new_packet_list_toggle_visible_column (gint col_id)
{
GtkTreeViewColumn *col =
gtk_tree_view_get_column(GTK_TREE_VIEW(GTK_TREE_VIEW(packetlist->view)), col_id);
new_packet_list_set_visible_column (col_id, col, get_column_visible(col_id) ? FALSE : TRUE);
}
void
new_packet_list_set_all_columns_visible (void)
{
GtkTreeViewColumn *col;
int col_id;
for (col_id = 0; col_id < cfile.cinfo.num_cols; col_id++) {
col = gtk_tree_view_get_column(GTK_TREE_VIEW(GTK_TREE_VIEW(packetlist->view)), col_id);
gtk_tree_view_column_set_visible(col, TRUE);
set_column_visible(col_id, TRUE);
}
if (!prefs.gui_use_pref_save) {
prefs_main_write();
}
rebuild_visible_columns_menu ();
gtk_widget_queue_draw (packetlist->view);
}
static void
new_packet_list_remove_column (gint col_id, GtkTreeViewColumn *col _U_)
{
@ -399,6 +443,9 @@ new_packet_list_column_menu_cb (GtkWidget *w _U_, gpointer user_data _U_, COLUMN
case COLUMN_SELECTED_RENAME:
col_title_edit_dlg (col);
break;
case COLUMN_SELECTED_HIDE:
new_packet_list_set_visible_column (col_id, col, FALSE);
break;
case COLUMN_SELECTED_REMOVE:
new_packet_list_remove_column (col_id, col);
break;
@ -494,6 +541,7 @@ create_view_and_model(void)
g_free (escaped_title);
gtk_tree_view_column_set_clickable(col, TRUE);
gtk_tree_view_column_set_resizable(col, TRUE);
gtk_tree_view_column_set_visible(col, get_column_visible(i));
gtk_tree_view_column_set_sizing(col,GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_reorderable(col, TRUE); /* XXX - Should this be saved in the prefs? */
@ -545,6 +593,8 @@ create_view_and_model(void)
}
}
rebuild_visible_columns_menu ();
return packetlist->view;
}

View File

@ -40,11 +40,14 @@ typedef enum {
COLUMN_SELECTED_ALIGN_DEFAULT,
COLUMN_SELECTED_RESIZE,
COLUMN_SELECTED_RENAME,
COLUMN_SELECTED_HIDE,
COLUMN_SELECTED_REMOVE
} COLUMN_SELECTED_E;
GtkWidget *new_packet_list_create(void);
void new_packet_list_recreate(void);
void new_packet_list_toggle_visible_column (gint col_id);
void new_packet_list_set_all_columns_visible (void);
void new_packet_list_column_menu_cb (GtkWidget *w, gpointer data, COLUMN_SELECTED_E action);
void new_packet_list_resize_columns_cb(GtkWidget *widget _U_, gpointer data _U_);
gboolean new_packet_list_get_event_row_column(GdkEventButton *event_button, gint *physical_row, gint *row, gint *column);

View File

@ -62,6 +62,43 @@ static void column_field_changed_cb(GtkEditable *, gpointer);
static void column_dnd_row_deleted_cb(GtkTreeModel *, GtkTreePath *, gpointer);
static gboolean column_title_changed_cb(GtkCellRendererText *, const gchar *, const gchar *, gpointer);
enum {
#ifdef NEW_PACKET_LIST
VISIBLE_COLUMN,
#endif
TITLE_COLUMN,
FORMAT_COLUMN,
DATA_COLUMN,
N_COLUMN /* The number of columns */
};
#ifdef NEW_PACKET_LIST
/* Visible toggled */
static void
visible_toggled(GtkCellRendererToggle *cell _U_, gchar *path_str, gpointer data)
{
GtkTreeModel *model = (GtkTreeModel *)data;
GtkTreeIter iter;
GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
GList *clp;
fmt_data *cfmt;
gtk_tree_model_get_iter(model, &iter, path);
gtk_tree_model_get(model, &iter, DATA_COLUMN, &clp, -1);
cfmt = (fmt_data *) clp->data;
if (cfmt->visible)
cfmt->visible = FALSE;
else
cfmt->visible = TRUE;
gtk_list_store_set(GTK_LIST_STORE(model), &iter, VISIBLE_COLUMN, cfmt->visible, -1);
cfile.cinfo.columns_changed = TRUE;
gtk_tree_path_free(path);
} /* visible_toggled */
#endif
/*
* Create and display the column selection widgets.
* Called as part of the creation of the Preferences notebook ( Edit ! Preferences )
@ -77,7 +114,11 @@ column_prefs_show(GtkWidget *prefs_window) {
gint i;
gchar *fmt;
gint cur_fmt;
#ifdef NEW_PACKET_LIST
const gchar *column_titles[] = {"Visible", "Title", "Field type"};
#else
const gchar *column_titles[] = {"Title", "Field type"};
#endif
GtkListStore *store;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
@ -107,7 +148,11 @@ column_prefs_show(GtkWidget *prefs_window) {
gtk_container_add(GTK_CONTAINER(list_vb), list_sc);
gtk_widget_show(list_sc);
store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
store = gtk_list_store_new(N_COLUMN,
#ifdef NEW_PACKET_LIST
G_TYPE_BOOLEAN,
#endif
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
column_row_deleted_handler_id =
g_signal_connect(GTK_TREE_MODEL(store), "row-deleted", G_CALLBACK(column_dnd_row_deleted_cb), NULL);
@ -118,15 +163,23 @@ column_prefs_show(GtkWidget *prefs_window) {
gtk_tooltips_set_tip (tooltips, column_l,
"Click on a title to change its name.\nDrag an item to change its order.", NULL);
#ifdef NEW_PACKET_LIST
renderer = gtk_cell_renderer_toggle_new();
g_signal_connect(renderer, "toggled", G_CALLBACK(visible_toggled), store);
column = gtk_tree_view_column_new_with_attributes(column_titles[VISIBLE_COLUMN], renderer, "active", VISIBLE_COLUMN, NULL);
gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
gtk_tree_view_append_column(GTK_TREE_VIEW(column_l), column);
#endif
renderer = gtk_cell_renderer_text_new();
g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL);
g_signal_connect (renderer, "edited", G_CALLBACK(column_title_changed_cb), GTK_TREE_MODEL(store));
column = gtk_tree_view_column_new_with_attributes(column_titles[0], renderer, "text", 0, NULL);
column = gtk_tree_view_column_new_with_attributes(column_titles[TITLE_COLUMN], renderer, "text", TITLE_COLUMN, NULL);
gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
gtk_tree_view_append_column(GTK_TREE_VIEW(column_l), column);
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(column_titles[1], renderer, "text", 1, NULL);
column = gtk_tree_view_column_new_with_attributes(column_titles[FORMAT_COLUMN], renderer, "text", FORMAT_COLUMN, NULL);
gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
gtk_tree_view_append_column(GTK_TREE_VIEW(column_l), column);
@ -152,8 +205,17 @@ column_prefs_show(GtkWidget *prefs_window) {
}
fmt = g_strdup_printf("%s", col_format_desc(cur_fmt));
}
#if GTK_CHECK_VERSION(2,6,0)
gtk_list_store_insert_with_values(store, &iter, G_MAXINT,
#else
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, cfmt->title, 1, fmt, 2, clp, -1);
gtk_list_store_set(store, &iter,
#endif
#ifdef NEW_PACKET_LIST
VISIBLE_COLUMN, cfmt->visible,
#endif
TITLE_COLUMN, cfmt->title, FORMAT_COLUMN, fmt, DATA_COLUMN, clp, -1);
if (first_row) {
first_iter = iter;
first_row = FALSE;
@ -332,11 +394,18 @@ column_list_new_cb(GtkWidget *w _U_, gpointer data) {
column_prefs_add_custom (cur_fmt, title, NULL);
model = gtk_tree_view_get_model(column_l);
#if GTK_CHECK_VERSION(2,6,0)
gtk_list_store_insert_with_values(GTK_LIST_STORE(model), &iter, G_MAXINT,
#else
gtk_list_store_append(GTK_LIST_STORE(model), &iter);
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
0, title,
1, col_format_desc(cur_fmt),
2, g_list_last(prefs.col_list),
#endif
#ifdef NEW_PACKET_LIST
VISIBLE_COLUMN, TRUE,
#endif
TITLE_COLUMN, title,
FORMAT_COLUMN, col_format_desc(cur_fmt),
DATA_COLUMN, g_list_last(prefs.col_list),
-1);
/* Triggers call to column_list_select_cb() */
@ -370,7 +439,7 @@ column_list_delete_cb(GtkWidget *w _U_, gpointer data) {
sel = gtk_tree_view_get_selection(column_l);
if (gtk_tree_selection_get_selected(sel, &model, &iter))
{
gtk_tree_model_get(model, &iter, 2, &clp, -1);
gtk_tree_model_get(model, &iter, DATA_COLUMN, &clp, -1);
cfmt = (fmt_data *) clp->data;
g_free(cfmt->title);
@ -432,9 +501,9 @@ column_title_changed_cb(GtkCellRendererText *cell _U_, const gchar *str_path, co
gtk_tree_model_get_iter(model, &iter, path);
gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, new_title, -1);
gtk_list_store_set(GTK_LIST_STORE(model), &iter, TITLE_COLUMN, new_title, -1);
gtk_tree_model_get(model, &iter, 2, &clp, -1);
gtk_tree_model_get(model, &iter, DATA_COLUMN, &clp, -1);
if (clp) {
cfmt = (fmt_data *) clp->data;
g_free(cfmt->title);
@ -463,7 +532,7 @@ column_list_select_cb(GtkTreeSelection *sel, gpointer data _U_)
/* if something was selected */
if (gtk_tree_selection_get_selected(sel, &model, &iter))
{
gtk_tree_model_get(model, &iter, 2, &clp, -1);
gtk_tree_model_get(model, &iter, DATA_COLUMN, &clp, -1);
g_assert(clp != NULL);
cfmt = (fmt_data *) clp->data;
cur_fmt = get_column_format_from_str(cfmt->fmt);
@ -532,7 +601,7 @@ column_menu_changed_cb(GtkWidget *w, gpointer data) {
return; /* no column list selection [Can this happen ?]: ignore callback */
cur_cb_fmt = gtk_combo_box_get_active(GTK_COMBO_BOX(w));
gtk_tree_model_get(model, &iter, 2, &clp, -1);
gtk_tree_model_get(model, &iter, DATA_COLUMN, &clp, -1);
cfmt = (fmt_data *) clp->data;
cur_fmt = get_column_format_from_str(cfmt->fmt);
@ -566,7 +635,7 @@ column_menu_changed_cb(GtkWidget *w, gpointer data) {
}
g_signal_handler_unblock(field_te, column_field_changed_handler_id);
gtk_list_store_set(GTK_LIST_STORE(model), &iter, 1, fmt, -1);
gtk_list_store_set(GTK_LIST_STORE(model), &iter, FORMAT_COLUMN, fmt, -1);
g_free(fmt);
g_free(cfmt->fmt);
cfmt->fmt = g_strdup(col_format_to_string(cur_cb_fmt));
@ -600,7 +669,7 @@ column_field_changed_cb(GtkEditable *te, gpointer data) {
}
field = gtk_editable_get_chars(te, 0, -1);
gtk_tree_model_get(model, &iter, 2, &clp, -1);
gtk_tree_model_get(model, &iter, DATA_COLUMN, &clp, -1);
cfmt = (fmt_data *) clp->data;
if (strcmp(cfmt->custom_field, field) == 0) {
return; /* no action req'd */
@ -610,7 +679,7 @@ column_field_changed_cb(GtkEditable *te, gpointer data) {
cur_fmt = get_column_format_from_str(cfmt->fmt);
fmt = g_strdup_printf("%s (%s)", col_format_desc(cur_fmt), field);
gtk_list_store_set(GTK_LIST_STORE(model), &iter, 1, fmt, -1);
gtk_list_store_set(GTK_LIST_STORE(model), &iter, FORMAT_COLUMN, fmt, -1);
g_free(fmt);
g_free(cfmt->custom_field);
cfmt->custom_field = field;
@ -647,7 +716,7 @@ column_dnd_row_deleted_cb(GtkTreeModel *model, GtkTreePath *path _U_, gpointer d
items_left;
items_left = gtk_tree_model_iter_next (model, &iter)) {
gtk_tree_model_get(model, &iter, 2, &clp, -1);
gtk_tree_model_get(model, &iter, DATA_COLUMN, &clp, -1);
if (clp) {
prefs.col_list = g_list_remove_link(prefs.col_list, clp);
new_col_list = g_list_concat(new_col_list, clp);