Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
|
Hi All, find attached the patches against the latest SVN. Regards Alejandro Anders Broman wrote:
|
Index: graph_analysis.h
===================================================================
--- graph_analysis.h (revision 15774)
+++ graph_analysis.h (working copy)
@@ -82,6 +82,7 @@
typedef struct _dialog_data_t {
GtkWidget *window;
gboolean needs_redraw;
+ gboolean inverse; /* set the nodes in reverse mode as "dst <---- src" instead of "src ----> dst"*/
gint selected_row;
GtkWidget *draw_area_time;
GtkWidget *draw_area;
Index: graph_analysis.c
===================================================================
--- graph_analysis.c (revision 15774)
+++ graph_analysis.c (working copy)
@@ -164,6 +164,7 @@
user_data->dlg.left_x_border=0;
user_data->dlg.selected_item=0xFFFFFFFF; /*not item selected */
user_data->dlg.window=NULL;
+ user_data->dlg.inverse = FALSE;
}
/****************************************************************************/
@@ -184,21 +185,6 @@
user_data->dlg.window = NULL;
}
-/****************************************************************************/
-#if 0
-static void dialog_graph_set_title(graph_analysis_data_t* user_data)
-{
- char *title;
- if (!user_data->dlg.window){
- return;
- }
- title = g_strdup_printf("Ale");
-
- gtk_window_set_title(GTK_WINDOW(user_data->dlg.window), title);
- g_free(title);
-}
-#endif
-
#define RIGHT_ARROW 1
#define LEFT_ARROW 0
#define WIDTH_ARROW 8
@@ -671,7 +657,7 @@
top_y_border=TOP_Y_BORDER; /* to display the node address */
bottom_y_border=2;
- draw_height=user_data->dlg.pixmap_height-top_y_border-bottom_y_border;
+ draw_height=user_data->dlg.draw_area->allocation.height-top_y_border-bottom_y_border;
first_item = user_data->dlg.first_item;
display_items = draw_height/ITEM_HEIGHT;
@@ -757,12 +743,6 @@
#endif
/* resize the "time" draw area */
-/* XXX is this version late enough? Fails on 2.2.1; is OK on 2.6.4 */
-#if GTK_CHECK_VERSION(2,4,0)
- /* in GTK 1 and early GTK 2 it causes a loop of configure events */
- WIDGET_SET_SIZE(user_data->dlg.draw_area_time, label_width + 6, user_data->dlg.pixmap_height);
- gtk_widget_show(user_data->dlg.draw_area_time);
-#endif
left_x_border=3;
user_data->dlg.left_x_border = left_x_border;
@@ -898,7 +878,7 @@
left_x_border+NODE_WIDTH/2+NODE_WIDTH*i,
top_y_border,
left_x_border+NODE_WIDTH/2+NODE_WIDTH*i,
- user_data->dlg.pixmap_height-bottom_y_border);
+ user_data->dlg.draw_area->allocation.height-bottom_y_border);
}
}
@@ -1353,7 +1333,6 @@
widget->allocation.width,
widget->allocation.height,
-1);
- user_data->dlg.pixmap_height=widget->allocation.height;
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) )
gdk_draw_rectangle(user_data->dlg.pixmap,
@@ -1391,8 +1370,9 @@
gdk_gc_set_rgb_fg_color(user_data->dlg.bg_gc[i], &col[i]);
#endif
}
+
+ dialog_graph_redraw(user_data);
- dialog_graph_redraw(user_data);
return TRUE;
}
@@ -1459,6 +1439,7 @@
widget->allocation.height);
dialog_graph_redraw(user_data);
+
return TRUE;
}
#if GTK_MAJOR_VERSION >= 2
@@ -1592,8 +1573,8 @@
gtk_box_pack_start(GTK_BOX(hbox), user_data->dlg.draw_area_time, FALSE, FALSE, 0);
user_data->dlg.hpane = gtk_hpaned_new();
- gtk_paned_pack1(GTK_PANED (user_data->dlg.hpane), user_data->dlg.scroll_window, TRUE, TRUE);
- gtk_paned_pack2(GTK_PANED (user_data->dlg.hpane), scroll_window_comments, FALSE, TRUE);
+ gtk_paned_pack1(GTK_PANED (user_data->dlg.hpane), user_data->dlg.scroll_window, FALSE, TRUE);
+ gtk_paned_pack2(GTK_PANED (user_data->dlg.hpane), scroll_window_comments, TRUE, TRUE);
#if GTK_MAJOR_VERSION >= 2
SIGNAL_CONNECT(user_data->dlg.hpane, "notify::position", pane_callback, user_data);
#endif
@@ -1692,34 +1673,67 @@
gai = list->data;
if (gai->display){
user_data->num_items++;
- /* check source node address */
- index = is_node_array(user_data, &(gai->src_addr));
- switch(index){
- case -2: /* array full */
- gai->src_node = NODE_OVERFLOW;
- break;
- case -1: /* not in array */
- COPY_ADDRESS(&(user_data->nodes[user_data->num_nodes]),&(gai->src_addr));
- gai->src_node = user_data->num_nodes;
- user_data->num_nodes++;
- break;
- default: /* it is in the array, just update the src_node */
- gai->src_node = (guint16)index;
- }
+ if (!user_data->dlg.inverse) {
+ /* check source node address */
+ index = is_node_array(user_data, &(gai->src_addr));
+ switch(index){
+ case -2: /* array full */
+ gai->src_node = NODE_OVERFLOW;
+ break;
+ case -1: /* not in array */
+ COPY_ADDRESS(&(user_data->nodes[user_data->num_nodes]),&(gai->src_addr));
+ gai->src_node = user_data->num_nodes;
+ user_data->num_nodes++;
+ break;
+ default: /* it is in the array, just update the src_node */
+ gai->src_node = (guint16)index;
+ }
- /* check destination node address*/
- index = is_node_array(user_data, &(gai->dst_addr));
- switch(index){
- case -2: /* array full */
- gai->dst_node = NODE_OVERFLOW;
- break;
- case -1: /* not in array */
- COPY_ADDRESS(&(user_data->nodes[user_data->num_nodes]),&(gai->dst_addr));
- gai->dst_node = user_data->num_nodes;
- user_data->num_nodes++;
- break;
- default: /* it is in the array, just update the dst_node */
- gai->dst_node = (guint16)index;
+ /* check destination node address*/
+ index = is_node_array(user_data, &(gai->dst_addr));
+ switch(index){
+ case -2: /* array full */
+ gai->dst_node = NODE_OVERFLOW;
+ break;
+ case -1: /* not in array */
+ COPY_ADDRESS(&(user_data->nodes[user_data->num_nodes]),&(gai->dst_addr));
+ gai->dst_node = user_data->num_nodes;
+ user_data->num_nodes++;
+ break;
+ default: /* it is in the array, just update the dst_node */
+ gai->dst_node = (guint16)index;
+ }
+ } else {
+ /* check destination node address*/
+ index = is_node_array(user_data, &(gai->dst_addr));
+ switch(index){
+ case -2: /* array full */
+ gai->dst_node = NODE_OVERFLOW;
+ break;
+ case -1: /* not in array */
+ COPY_ADDRESS(&(user_data->nodes[user_data->num_nodes]),&(gai->dst_addr));
+ gai->dst_node = user_data->num_nodes;
+ user_data->num_nodes++;
+ break;
+ default: /* it is in the array, just update the dst_node */
+ gai->dst_node = (guint16)index;
+ }
+
+ /* check source node address */
+ index = is_node_array(user_data, &(gai->src_addr));
+ switch(index){
+ case -2: /* array full */
+ gai->src_node = NODE_OVERFLOW;
+ break;
+ case -1: /* not in array */
+ COPY_ADDRESS(&(user_data->nodes[user_data->num_nodes]),&(gai->src_addr));
+ gai->src_node = user_data->num_nodes;
+ user_data->num_nodes++;
+ break;
+ default: /* it is in the array, just update the src_node */
+ gai->src_node = (guint16)index;
+ }
+
}
}
- Follow-Ups:
- SV: SV: [Ethereal-dev] Re: Patch to prevent loop in flow analysisgraph
- From: Anders Broman
- SV: SV: [Ethereal-dev] Re: Patch to prevent loop in flow analysisgraph
- Prev by Date: [Ethereal-dev] Buildbot crash output
- Next by Date: SV: SV: [Ethereal-dev] Re: Patch to prevent loop in flow analysisgraph
- Previous by thread: [Ethereal-dev] Too much 'tvb_ensure_bytes_exist()'-ness
- Next by thread: SV: SV: [Ethereal-dev] Re: Patch to prevent loop in flow analysisgraph
- Index(es):





