diff options
-rw-r--r-- | gtk/gtkglobals.h | 5 | ||||
-rw-r--r-- | gtk/main.c | 85 | ||||
-rw-r--r-- | gtk/packet_win.c | 51 | ||||
-rw-r--r-- | gtk/packet_win.h | 3 | ||||
-rw-r--r-- | gtk/proto_draw.c | 54 | ||||
-rw-r--r-- | gtk/proto_draw.h | 6 |
6 files changed, 74 insertions, 130 deletions
diff --git a/gtk/gtkglobals.h b/gtk/gtkglobals.h index 59bb2f9c5b..b09a288c6a 100644 --- a/gtk/gtkglobals.h +++ b/gtk/gtkglobals.h @@ -1,7 +1,7 @@ /* gtkglobals.h * GTK-related Global defines, etc. * - * $Id: gtkglobals.h,v 1.6 2000/02/29 06:24:36 guy Exp $ + * $Id: gtkglobals.h,v 1.7 2000/03/02 07:05:55 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -37,8 +37,9 @@ extern GdkFont *m_r_font, *m_b_font; extern GtkStyle *item_style; void set_scrollbar_placement_scrollw(GtkWidget *, int); /* 0=left, 1=right */ -void set_scrollbar_placement_textw(GtkWidget *, GtkWidget *, int pos); /* 0=left, 1=right */ void set_scrollbar_placement_all(int); /* 1=right, 0=left */ +void remember_scrolled_window(GtkWidget *); +void forget_scrolled_window(GtkWidget *); void set_plist_sel_browse(gboolean); void set_ptree_sel_browse(GtkWidget *, gboolean); void set_ptree_sel_browse_all(gboolean); diff --git a/gtk/main.c b/gtk/main.c index 391a85ecfa..900d955ce1 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1,6 +1,6 @@ /* main.c * - * $Id: main.c,v 1.107 2000/02/29 06:24:37 guy Exp $ + * $Id: main.c,v 1.108 2000/03/02 07:05:56 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -118,7 +118,7 @@ packet_info pi; capture_file cf; GtkWidget *top_level, *file_sel, *packet_list, *tree_view, *byte_view, *prog_bar, *info_bar, *tv_scrollw, *pkt_scrollw; -static GtkWidget *bv_vscroll_left, *bv_vscroll_right; +static GtkWidget *bv_scrollw; GdkFont *m_r_font, *m_b_font; guint main_ctx, file_ctx; gchar comp_info_str[256]; @@ -139,7 +139,6 @@ static void follow_charset_toggle_cb(GtkWidget *w, gpointer parent_w); static void follow_load_text(GtkWidget *text, char *filename, guint8 show_type); static void follow_print_stream(GtkWidget *w, gpointer parent_w); static char* hfinfo_numeric_format(header_field_info *hfinfo); -static void set_scrollbar_placement_main_window(int pos); /* 0=left, 1=right */ static void create_main_window(gint, gint, gint, e_prefs*); /* About Ethereal window */ @@ -163,8 +162,7 @@ about_ethereal( GtkWidget *w, gpointer data ) { void follow_stream_cb( GtkWidget *w, gpointer data ) { char filename1[128+1]; - GtkWidget *streamwindow, *box, *text, *vscrollbar, *table, - *filter_te; + GtkWidget *streamwindow, *box, *txt_scrollw, *text, *filter_te; GtkWidget *hbox, *close_bt, *print_bt; GtkWidget *b_ascii, *b_ebcdic, *b_hexdump; int tmp_fd; @@ -234,18 +232,20 @@ follow_stream_cb( GtkWidget *w, gpointer data ) { gtk_container_add( GTK_CONTAINER(streamwindow), box ); gtk_widget_show( box ); - /* set up the table we attach to */ - table = gtk_table_new( 1, 2, FALSE ); - gtk_table_set_col_spacing( GTK_TABLE(table), 0, 2); - gtk_box_pack_start( GTK_BOX(box), table, TRUE, TRUE, 0 ); - gtk_widget_show( table ); + /* create a scrolled window for the text */ + txt_scrollw = gtk_scrolled_window_new( NULL, NULL ); + gtk_box_pack_start( GTK_BOX(box), txt_scrollw, TRUE, TRUE, 0 ); + gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(txt_scrollw), + GTK_POLICY_NEVER, + GTK_POLICY_ALWAYS ); + set_scrollbar_placement_scrollw(txt_scrollw, prefs.gui_scrollbar_on_right); + remember_scrolled_window(txt_scrollw); + gtk_widget_show( txt_scrollw ); /* create a text box */ text = gtk_text_new( NULL, NULL ); gtk_text_set_editable( GTK_TEXT(text), FALSE); - gtk_table_attach( GTK_TABLE(table), text, 0, 1, 0, 1, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0 ); + gtk_container_add( GTK_CONTAINER(txt_scrollw), text ); gtk_widget_show(text); /* Create hbox */ @@ -305,13 +305,6 @@ follow_stream_cb( GtkWidget *w, gpointer data ) { gtk_box_pack_end( GTK_BOX(hbox), print_bt, FALSE, FALSE, 0); gtk_widget_show( print_bt ); - /* create the scrollbar */ - vscrollbar = gtk_vscrollbar_new( GTK_TEXT(text)->vadj ); - gtk_table_attach( GTK_TABLE(table), vscrollbar, 1, 2, 0, 1, - GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0 ); - gtk_widget_show( vscrollbar ); - gtk_widget_realize( text ); - /* Tuck away the filename and textbox into streamwindow */ #define E_FOLLOW_FILENAME_KEY "follow_filename_key" #define E_FOLLOW_TEXT_KEY "follow_text_key" @@ -908,38 +901,37 @@ set_scrollbar_placement_scrollw(GtkWidget *scrollw, int pos) /* 0=left, 1=right } } -/* Set the scrollbar placement of a 3-box text window (hex display) based - upon pos value: 0 = left, 1 = right */ +/* List of all scrolled windows, so we can globally set the scrollbar + placement of them. */ +static GList *scrolled_windows; + +/* Add a scrolled window to the list of scrolled windows. */ void -set_scrollbar_placement_textw(GtkWidget *vscroll_left, GtkWidget *vscroll_right, - int pos) +remember_scrolled_window(GtkWidget *scrollw) { - if (pos) { - gtk_widget_hide(vscroll_left); - gtk_widget_show(vscroll_right); - } else { - gtk_widget_hide(vscroll_right); - gtk_widget_show(vscroll_left); - } + scrolled_windows = g_list_append(scrolled_windows, scrollw); +} + +/* Remove a scrolled window from the list of scrolled windows. */ +void +forget_scrolled_window(GtkWidget *scrollw) +{ + scrolled_windows = g_list_remove(scrolled_windows, scrollw); } -/* Set the scrollbar placement of all the subwindows of the main window - based on pos value: 0 = left, 1 = right */ static void -set_scrollbar_placement_main_window(int pos) +set_scrollbar_placement_cb(gpointer data, gpointer user_data) { - set_scrollbar_placement_scrollw(pkt_scrollw, pos); - set_scrollbar_placement_scrollw(tv_scrollw, pos); - set_scrollbar_placement_textw(bv_vscroll_left, bv_vscroll_right, pos); + set_scrollbar_placement_scrollw((GtkWidget *)data, + *(int *)user_data); } -/* Set the scrollbar placement of all windows based on pos value: +/* Set the scrollbar placement of all scrolled windows based on pos value: 0 = left, 1 = right */ void set_scrollbar_placement_all(int pos) { - set_scrollbar_placement_main_window(pos); - set_scrollbar_placement_packet_wins(pos); + g_list_foreach(scrolled_windows, set_scrollbar_placement_cb, &pos); } /* Set the selection mode of the packet list window. */ @@ -1586,6 +1578,8 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs) pkt_scrollw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(pkt_scrollw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + set_scrollbar_placement_scrollw(pkt_scrollw, prefs->gui_scrollbar_on_right); + remember_scrolled_window(pkt_scrollw); gtk_widget_show(pkt_scrollw); gtk_paned_add1(GTK_PANED(u_pane), pkt_scrollw); @@ -1622,7 +1616,8 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs) gtk_widget_show(packet_list); /* Tree view */ - create_tree_view(tv_size, prefs, l_pane, &tv_scrollw, &tree_view); + create_tree_view(tv_size, prefs, l_pane, &tv_scrollw, &tree_view, + prefs->gui_scrollbar_on_right); gtk_signal_connect(GTK_OBJECT(tree_view), "tree-select-row", GTK_SIGNAL_FUNC(tree_view_select_row_cb), NULL); gtk_signal_connect(GTK_OBJECT(tree_view), "tree-unselect-row", @@ -1636,12 +1631,8 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs) item_style->font = m_r_font; /* Byte view. */ - create_byte_view(bv_size, l_pane, &byte_view, &bv_vscroll_left, - &bv_vscroll_right); - - /* Now that the 3 panes are created, set the vertical scrollbar - * on the left or right according to the user's preference */ - set_scrollbar_placement_main_window(prefs->gui_scrollbar_on_right); + create_byte_view(bv_size, l_pane, &byte_view, &bv_scrollw, + prefs->gui_scrollbar_on_right); /* Progress/filter/info box */ stat_hbox = gtk_hbox_new(FALSE, 1); diff --git a/gtk/packet_win.c b/gtk/packet_win.c index 392a6cf87e..ca88f9c1f4 100644 --- a/gtk/packet_win.c +++ b/gtk/packet_win.c @@ -3,7 +3,7 @@ * * Copyright 2000, Jeffrey C. Foster <jfoste@woodward.com> * - * $Id: packet_win.c,v 1.2 2000/03/01 06:50:18 guy Exp $ + * $Id: packet_win.c,v 1.3 2000/03/02 07:05:57 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -78,9 +78,8 @@ struct PacketWinData { GtkWidget *main; GtkWidget *tv_scrollw; GtkWidget *tree_view; + GtkWidget *bv_scrollw; GtkWidget *byte_view; - GtkWidget *bv_vscroll_left; - GtkWidget *bv_vscroll_right; }; /* List of all the packet-detail windows popped up. */ @@ -95,9 +94,6 @@ static void new_tree_view_unselect_row_cb( GtkCTree *ctree, GList *node, static void create_new_window( char *Title, gint tv_size, gint bv_size); static void destroy_new_window(GtkObject *object, gpointer user_data); -static void set_scrollbar_placement_packet_win(struct PacketWinData *DataPtr, - int pos); - void new_window_cb(GtkWidget *w){ #define NewWinTitleLen 1000 @@ -132,7 +128,7 @@ create_new_window ( char *Title, gint tv_size, gint bv_size){ GtkWidget *main_w, *main_vbox, *pane, *tree_view, *byte_view, *tv_scrollw, - *bv_vscroll_left, *bv_vscroll_right; + *bv_scrollw; struct PacketWinData *DataPtr; main_w = gtk_window_new(GTK_WINDOW_TOPLEVEL); @@ -153,12 +149,13 @@ create_new_window ( char *Title, gint tv_size, gint bv_size){ gtk_widget_show(pane); /* Tree view */ - create_tree_view(tv_size, &prefs, pane, &tv_scrollw, &tree_view); + create_tree_view(tv_size, &prefs, pane, &tv_scrollw, &tree_view, + prefs.gui_scrollbar_on_right); gtk_widget_show(tree_view); /* Byte view */ - create_byte_view(bv_size, pane, &byte_view, &bv_vscroll_left, - &bv_vscroll_right); + create_byte_view(bv_size, pane, &byte_view, &bv_scrollw, + prefs.gui_scrollbar_on_right); /* Allocate data structure to represent this window. */ DataPtr = (struct PacketWinData *) g_malloc(sizeof(struct PacketWinData)); @@ -173,14 +170,9 @@ create_new_window ( char *Title, gint tv_size, gint bv_size){ DataPtr->tv_scrollw = tv_scrollw; DataPtr->tree_view = tree_view; DataPtr->byte_view = byte_view; - DataPtr->bv_vscroll_left = bv_vscroll_left; - DataPtr->bv_vscroll_right = bv_vscroll_right; + DataPtr->bv_scrollw = bv_scrollw; detail_windows = g_list_append(detail_windows, DataPtr); - /* Now that the 2 panes are created, set the vertical scrollbar - * on the left or right according to the user's preference */ - set_scrollbar_placement_packet_win(DataPtr, prefs.gui_scrollbar_on_right); - /* load callback handlers */ gtk_signal_connect(GTK_OBJECT(tree_view), "tree-select-row", GTK_SIGNAL_FUNC(new_tree_view_select_row_cb), DataPtr); @@ -205,6 +197,8 @@ destroy_new_window(GtkObject *object, gpointer user_data) struct PacketWinData *DataPtr = user_data; detail_windows = g_list_remove(detail_windows, DataPtr); + forget_scrolled_window(DataPtr->tv_scrollw); + forget_scrolled_window(DataPtr->bv_scrollw); proto_tree_free(DataPtr->protocol_tree); g_free(DataPtr->pd); g_free(DataPtr); @@ -265,31 +259,6 @@ destroy_packet_wins(void) } } -/* Set the scrollbar position of a given popup packet window based upon - pos value: 0 = left, 1 = right */ -static void -set_scrollbar_placement_packet_win(struct PacketWinData *DataPtr, int pos) -{ - set_scrollbar_placement_scrollw(DataPtr->tv_scrollw, pos); - set_scrollbar_placement_textw(DataPtr->bv_vscroll_left, - DataPtr->bv_vscroll_right, pos); -} - -static void -set_scrollbar_placement_cb(gpointer data, gpointer user_data) -{ - set_scrollbar_placement_packet_win((struct PacketWinData *)data, - *(int *)user_data); -} - -/* Set the scrollbar position of all the popup packet windows based upon - pos value: 0 = left, 1 = right */ -void -set_scrollbar_placement_packet_wins(int pos) -{ - g_list_foreach(detail_windows, set_scrollbar_placement_cb, &pos); -} - static void set_ptree_sel_browse_cb(gpointer data, gpointer user_data) { diff --git a/gtk/packet_win.h b/gtk/packet_win.h index be2f4d3d84..53fb1ca013 100644 --- a/gtk/packet_win.h +++ b/gtk/packet_win.h @@ -3,7 +3,7 @@ * * Copyright 2000, Jeffrey C. Foster <jfoste@woodward.com> * - * $Id: packet_win.h,v 1.1 2000/02/29 06:24:40 guy Exp $ + * $Id: packet_win.h,v 1.2 2000/03/02 07:05:57 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -25,7 +25,6 @@ */ extern void new_window_cb(GtkWidget *w); -void set_scrollbar_placement_packet_wins(int pos); void set_ptree_sel_browse_packet_wins(gboolean val); void set_ptree_line_style_packet_wins(gint style); void set_ptree_expander_style_packet_wins(gint style); diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c index 1b2ef78c63..bdd0ce76bc 100644 --- a/gtk/proto_draw.c +++ b/gtk/proto_draw.c @@ -1,7 +1,7 @@ /* gtkpacket.c * Routines for GTK+ packet display * - * $Id: proto_draw.c,v 1.14 2000/02/29 06:24:40 guy Exp $ + * $Id: proto_draw.c,v 1.15 2000/03/02 07:05:57 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -59,47 +59,29 @@ proto_tree_draw_node(GNode *node, gpointer data); void create_byte_view(gint bv_size, GtkWidget *pane, GtkWidget **byte_view_p, - GtkWidget **bv_vscroll_left_p, GtkWidget **bv_vscroll_right_p) + GtkWidget **bv_scrollw_p, int pos) { - GtkWidget *bv_table, *byte_view, *bv_vscroll_left, *bv_vscroll_right; - - /* Byte view. The table is only one row high, but 3 columns - * wide. The middle column contains the GtkText with the hex dump. - * The left and right columns contain vertical scrollbars. They both - * do the same thing, but only one will be shown at a time, in accordance - * with where the user wants the other vertical scrollbars places - * (on the left or the right). - */ - bv_table = gtk_table_new (1, 3, FALSE); - gtk_paned_pack2(GTK_PANED(pane), bv_table, FALSE, FALSE); - gtk_widget_set_usize(bv_table, -1, bv_size); - gtk_widget_show(bv_table); + GtkWidget *byte_view, *byte_scrollw; + + /* Byte view. Create a scrolled window for the text. */ + byte_scrollw = gtk_scrolled_window_new(NULL, NULL); + gtk_paned_pack2(GTK_PANED(pane), byte_scrollw, FALSE, FALSE); + gtk_widget_set_usize(byte_scrollw, -1, bv_size); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(byte_scrollw), + GTK_POLICY_NEVER, + GTK_POLICY_ALWAYS); + set_scrollbar_placement_scrollw(byte_scrollw, pos); + remember_scrolled_window(byte_scrollw); + gtk_widget_show(byte_scrollw); byte_view = gtk_text_new(NULL, NULL); gtk_text_set_editable(GTK_TEXT(byte_view), FALSE); gtk_text_set_word_wrap(GTK_TEXT(byte_view), FALSE); - gtk_table_attach (GTK_TABLE (bv_table), byte_view, 1, 2, 0, 1, - GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0); + gtk_container_add(GTK_CONTAINER(byte_scrollw), byte_view); gtk_widget_show(byte_view); - /* The gtk_text widget doesn't scroll horizontally (see gtktext.c) - * in the GTK+ distribution, so I removed the horizontal scroll bar - * that used to be here. I tried the gtk_text widget with a - * gtk_scrolled_window w/ viewport, but the vertical scrolling - * did not work well, and sometimes a few pixels were cut off on - * the bottom. */ - - bv_vscroll_left = gtk_vscrollbar_new(GTK_TEXT(byte_view)->vadj); - gtk_table_attach(GTK_TABLE(bv_table), bv_vscroll_left, 0, 1, 0, 1, - GTK_FILL, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); - - bv_vscroll_right = gtk_vscrollbar_new(GTK_TEXT(byte_view)->vadj); - gtk_table_attach(GTK_TABLE(bv_table), bv_vscroll_right, 2, 3, 0, 1, - GTK_FILL, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); - *byte_view_p = byte_view; - *bv_vscroll_left_p = bv_vscroll_left; - *bv_vscroll_right_p = bv_vscroll_right; + *bv_scrollw_p = byte_scrollw; } void @@ -210,7 +192,7 @@ packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen, void create_tree_view(gint tv_size, e_prefs *prefs, GtkWidget *pane, - GtkWidget **tv_scrollw_p, GtkWidget **tree_view_p) + GtkWidget **tv_scrollw_p, GtkWidget **tree_view_p, int pos) { GtkWidget *tv_scrollw, *tree_view; @@ -218,6 +200,8 @@ create_tree_view(gint tv_size, e_prefs *prefs, GtkWidget *pane, tv_scrollw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(tv_scrollw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + set_scrollbar_placement_scrollw(tv_scrollw, pos); + remember_scrolled_window(tv_scrollw); gtk_paned_pack1(GTK_PANED(pane), tv_scrollw, TRUE, TRUE); gtk_widget_set_usize(tv_scrollw, -1, tv_size); gtk_widget_show(tv_scrollw); diff --git a/gtk/proto_draw.h b/gtk/proto_draw.h index dadcf9d81a..4708b2dd7d 100644 --- a/gtk/proto_draw.h +++ b/gtk/proto_draw.h @@ -1,7 +1,7 @@ /* gtkpacket.h * Definitions for GTK+ packet display structures and routines * - * $Id: proto_draw.h,v 1.5 2000/02/29 06:24:41 guy Exp $ + * $Id: proto_draw.h,v 1.6 2000/03/02 07:05:57 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -28,13 +28,13 @@ #define __GTKPACKET_H__ void create_byte_view(gint bv_size, GtkWidget *pane, GtkWidget **byte_view_p, - GtkWidget **bv_vscroll_left_p, GtkWidget **bv_vscroll_right_p); + GtkWidget **bv_scrollw_p, int pos); void packet_hex_print(GtkText *, guint8 *, gint, gint, gint, char_enc); #define E_TREEINFO_FIELD_INFO_KEY "tree_info_finfo" void create_tree_view(gint tv_size, e_prefs *prefs, GtkWidget *pane, - GtkWidget **tv_scrollw_p, GtkWidget **tree_view_p); + GtkWidget **tv_scrollw_p, GtkWidget **tree_view_p, int pos); void proto_tree_draw(proto_tree *protocol_tree, GtkWidget *tree_view); void expand_all_tree(proto_tree *protocol_tree, GtkWidget *tree_view); void collapse_all_tree(proto_tree *protocol_tree, GtkWidget *tree_view); |