aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2000-03-02 07:05:57 +0000
committerGuy Harris <guy@alum.mit.edu>2000-03-02 07:05:57 +0000
commit6c2961e44782196de213123731ddb11dca12aec6 (patch)
tree724df09b1bedc3ba1dd0f53761f07b97b3ccf344 /gtk
parentf84392ac60c08ec825b7f006f6376b1673a4b89d (diff)
downloadwireshark-6c2961e44782196de213123731ddb11dca12aec6.tar.gz
wireshark-6c2961e44782196de213123731ddb11dca12aec6.tar.bz2
wireshark-6c2961e44782196de213123731ddb11dca12aec6.zip
Use GtkScrolledWindows to add scrollbars to the hex/ASCII panes and to
the "Follow TCP Stream" displays; that means we can use the same GTK+ calls to set the scrollbar placement on them that is used to set it on other widgets. Keep a list of all the GtkScrolledWindows whose scrollbar placement we control with the GUI preference item for that, and change them all when the GUI preference item is changed (which means that the GUI preference item now applies to the "Follow TCP Stream" window as well as to the hex/ASCII panes). svn path=/trunk/; revision=1676
Diffstat (limited to 'gtk')
-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);