Recreate the packet list on DND columns.

This is a quick'n'dirty fix and not optimal, but it fixes the problems we
have with DND columns.  We have to rewrite new_packet_list_recreate() to
handle both new, delete and reorder columns.

svn path=/trunk/; revision=33400
This commit is contained in:
Stig Bjørlykke 2010-07-01 14:33:36 +00:00
parent 6b5a031808
commit 0c2e3652e6
1 changed files with 41 additions and 0 deletions

View File

@ -73,6 +73,7 @@
static PacketList *packetlist;
static gboolean last_at_end = FALSE;
static gboolean enable_color;
static gulong column_changed_handler_id;
static GtkWidget *create_view_and_model(void);
static void scroll_to_and_select_iter(GtkTreeModel *model, GtkTreeSelection *selection, GtkTreeIter *iter);
@ -112,6 +113,7 @@ new_packet_list_create(void)
void
new_packet_list_recreate(void)
{
g_signal_handler_block(packetlist->view, column_changed_handler_id);
gtk_widget_destroy(pkt_scrollw);
prefs.num_cols = g_list_length(prefs.col_list);
@ -512,6 +514,44 @@ new_packet_list_column_button_pressed_cb (GtkWidget *widget, GdkEvent *event, gp
popup_menu_handler (widget, event, menu);
}
static void
column_dnd_changed_cb(GtkTreeView *tree_view, gpointer data _U_)
{
GtkTreeViewColumn *column;
GtkTreeSelection *selection;
GtkTreeModel *model;
GtkTreeIter iter;
GList *columns, *list, *clp, *new_col_list = NULL;
gint old_col_id, new_col_id = 0;
fmt_data *cfmt;
selection = gtk_tree_view_get_selection(tree_view);
if (!gtk_tree_selection_get_selected(selection, &model, &iter))
return;
list = columns = gtk_tree_view_get_columns(tree_view);
while (columns) {
column = columns->data;
old_col_id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(column), E_MPACKET_LIST_COL_KEY));
clp = g_list_nth (prefs.col_list, old_col_id);
cfmt = (fmt_data *) clp->data;
new_col_list = g_list_append (new_col_list, cfmt);
columns = g_list_next (columns);
new_col_id++;
}
g_list_free (list);
g_list_free (prefs.col_list);
prefs.col_list = new_col_list;
if (!prefs.gui_use_pref_save) {
prefs_main_write();
}
new_packet_list_recreate();
}
static GtkWidget *
create_view_and_model(void)
{
@ -541,6 +581,7 @@ create_view_and_model(void)
PM_PACKET_LIST_KEY));
g_signal_connect(packetlist->view, "button_press_event", G_CALLBACK(popup_menu_handler),
g_object_get_data(G_OBJECT(popup_menu_object), PM_PACKET_LIST_KEY));
column_changed_handler_id = g_signal_connect(packetlist->view, "columns-changed", G_CALLBACK(column_dnd_changed_cb), NULL);
g_object_set_data(G_OBJECT(popup_menu_object), E_MPACKET_LIST_KEY, packetlist);
/* g_object_unref(packetlist); */ /* Destroy automatically with view for now */ /* XXX - Messes up freezing & thawing */