aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2006-03-15 01:41:39 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2006-03-15 01:41:39 +0000
commitc39b3330725220342d47d75514cc7c07355da4f1 (patch)
tree6887c2c50782bc00dab330266af96928595d78ca /gtk
parent329b915b66ea87f2cdff0cbec6ac2743d8597b21 (diff)
Fix bug 710 and avoid having it crash when more than one instance are open at once.
I think that whoever wrote the whole stats_tree thing should rewrite it ASAP, because it sucks! I did ?!?!?? ooops! svn path=/trunk/; revision=17627
Diffstat (limited to 'gtk')
-rw-r--r--gtk/stats_tree_stat.c42
1 files changed, 35 insertions, 7 deletions
diff --git a/gtk/stats_tree_stat.c b/gtk/stats_tree_stat.c
index b25da931ca..8840208701 100644
--- a/gtk/stats_tree_stat.c
+++ b/gtk/stats_tree_stat.c
@@ -190,17 +190,39 @@ static void free_gtk_tree(GtkWindow *win _U_, stats_tree *st)
st->root.pr->iter = NULL;
#endif
+ st->cfg->in_use = FALSE;
stats_tree_free(st);
}
+static void clear_node_pr(stat_node* n) {
+ stat_node* c;
+ for (c = n->children; c; c = c->next) {
+ clear_node_pr(c);
+ }
+
+#if GTK_MAJOR_VERSION >= 2
+ if (n->pr->iter) {
+ gtk_tree_store_remove(n->st->pr->store, n->pr->iter);
+ n->pr->iter = NULL;
+ }
+#else
+ if (n->pr->node) {
+ gtk_ctree_remove_node(n->st->pr->ctree,n->pr->node);
+ n->pr->node = NULL;
+ }
+#endif
+
+}
+
static void reset_tap(void* p) {
stats_tree* st = p;
-
- if (st->start > -1.0) {
- remove_tap_listener(st);
- }
-
+ stat_node* c;
+ for (c = st->root.children; c; c = c->next) {
+ clear_node_pr(c);
+ }
+
+ st->cfg->init(st);
}
/* initializes the stats_tree window */
@@ -231,6 +253,12 @@ static void init_gtk_tree(const char* optarg, void *userdata _U_) {
if (abbr) {
cfg = stats_tree_get_cfg_by_abbr(abbr);
+ if (cfg->in_use) {
+ /* XXX: ! */
+ report_failure("cannot open more than one tree of the same type at once");
+ return;
+ }
+
if (cfg != NULL) {
init_strlen = strlen(cfg->pr->stat_dlg->init_string);
@@ -257,6 +285,8 @@ static void init_gtk_tree(const char* optarg, void *userdata _U_) {
return;
}
+ cfg->in_use = TRUE;
+
window_name = g_strdup_printf("%s Stats Tree", cfg->name);
st->pr->win = window_new_with_geom(GTK_WINDOW_TOPLEVEL,window_name,window_name);
@@ -370,8 +400,6 @@ static void init_gtk_tree(const char* optarg, void *userdata _U_) {
gtk_tree_view_set_model(GTK_TREE_VIEW(st->pr->tree),GTK_TREE_MODEL(st->pr->store));
#endif
- st->cfg->init(st);
-
cf_retap_packets(&cfile, FALSE);
}