aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkglobals.h5
-rw-r--r--gtk/main.c85
-rw-r--r--gtk/packet_win.c51
-rw-r--r--gtk/packet_win.h3
-rw-r--r--gtk/proto_draw.c54
-rw-r--r--gtk/proto_draw.h6
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);