aboutsummaryrefslogtreecommitdiffstats
path: root/ui/gtk/proto_tree_model.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2012-06-30 10:43:50 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2012-06-30 10:43:50 +0000
commit8c1d02377e7ee4b7ebf57b18a862c25063e32738 (patch)
treefe1367d43a30aa8e2a212cf905140419a7882e0c /ui/gtk/proto_tree_model.c
parent3a4678b00f248200524fb044aa77abb595fc8897 (diff)
Fix bug #7425: Per-packet right-click network or MAC name resolution not working
proto_tree_draw() from r43189 is lazy, and it don't fills tree with all item labels. To fix it, move 'gbl_resolv_flags' hack to proto_tree_model_get_value(). XXX could we pass resolving flags to proto_item_fill_label()? svn path=/trunk/; revision=43550
Diffstat (limited to 'ui/gtk/proto_tree_model.c')
-rw-r--r--ui/gtk/proto_tree_model.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/ui/gtk/proto_tree_model.c b/ui/gtk/proto_tree_model.c
index 66ecc0aacf..46c66ee278 100644
--- a/ui/gtk/proto_tree_model.c
+++ b/ui/gtk/proto_tree_model.c
@@ -34,6 +34,7 @@
#include <gtk/gtk.h>
#include <glib.h>
+#include <epan/addr_resolv.h>
#include <epan/proto.h>
static GObjectClass *parent_class = NULL;
@@ -51,6 +52,9 @@ struct proto_tree_model {
proto_tree *protocol_tree;
int with_hidden;
+
+ gboolean resolv_forced;
+ guint32 resolv_flags;
};
#include "proto_tree_model.h"
@@ -195,9 +199,19 @@ proto_tree_model_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, gint col
switch (column) {
case 0:
+ {
g_value_init(value, G_TYPE_STRING);
- g_value_take_string(value, fi_get_string(fi));
+ if (model->resolv_forced) {
+ guint32 old_flags = gbl_resolv_flags;
+
+ gbl_resolv_flags = model->resolv_flags;
+ g_value_take_string(value, fi_get_string(fi));
+ gbl_resolv_flags = old_flags;
+
+ } else
+ g_value_take_string(value, fi_get_string(fi));
break;
+ }
case 1:
g_value_init(value, G_TYPE_POINTER);
@@ -440,6 +454,13 @@ proto_tree_model_get_type(void)
return proto_tree_type;
}
+void
+proto_tree_model_force_resolv(ProtoTreeModel *model, guint32 flags)
+{
+ model->resolv_forced = TRUE;
+ model->resolv_flags = flags;
+}
+
ProtoTreeModel *
proto_tree_model_new(proto_tree *protocol_tree, int display_hidden_proto_items)
{
@@ -449,7 +470,8 @@ proto_tree_model_new(proto_tree *protocol_tree, int display_hidden_proto_items)
g_assert(model != NULL);
model->protocol_tree = protocol_tree;
- model->with_hidden = display_hidden_proto_items;
+ model->with_hidden = display_hidden_proto_items;
+ model->resolv_forced = FALSE;
return model;
}