diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/follow_dlg.c | 35 | ||||
-rw-r--r-- | gtk/follow_dlg.h | 5 | ||||
-rw-r--r-- | gtk/gui_prefs.c | 59 | ||||
-rw-r--r-- | gtk/help_dlg.c | 54 | ||||
-rw-r--r-- | gtk/help_dlg.h | 5 | ||||
-rw-r--r-- | gtk/main.c | 11 | ||||
-rw-r--r-- | gtk/main.h | 4 | ||||
-rw-r--r-- | gtk/packet_win.c | 21 | ||||
-rw-r--r-- | gtk/packet_win.h | 4 | ||||
-rw-r--r-- | gtk/proto_draw.c | 20 | ||||
-rw-r--r-- | gtk/proto_draw.h | 9 |
11 files changed, 167 insertions, 60 deletions
diff --git a/gtk/follow_dlg.c b/gtk/follow_dlg.c index 8dddc1da9a..c122b79d9a 100644 --- a/gtk/follow_dlg.c +++ b/gtk/follow_dlg.c @@ -1,6 +1,6 @@ /* follow_dlg.c * - * $Id: follow_dlg.c,v 1.8 2000/08/21 13:04:05 deniel Exp $ + * $Id: follow_dlg.c,v 1.9 2000/09/08 10:59:09 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -108,6 +108,37 @@ FILE *data_out_file = NULL; #define E_FOLLOW_INFO_KEY "follow_info_key" +/* List of "follow_info_t" structures for all "Follow TCP Stream" windows, + so we can redraw them all if the colors or font changes. */ +static GList *follow_infos; + +/* Add a "follow_info_t" structure to the list. */ +static void +remember_follow_info(follow_info_t *follow_info) +{ + follow_infos = g_list_append(follow_infos, follow_info); +} + +/* Remove a "follow_info_t" structure from the list. */ +static void +forget_follow_info(follow_info_t *follow_info) +{ + follow_infos = g_list_remove(follow_infos, follow_info); +} + +static void +follow_redraw(gpointer data, gpointer user_data) +{ + follow_load_text((follow_info_t *)data); +} + +/* Redraw the text in all "Follow TCP Stream" windows. */ +void +follow_redraw_all(void) +{ + g_list_foreach(follow_infos, follow_redraw, NULL); +} + /* Follow the TCP stream, if any, to which the last packet that we called a dissection routine on belongs (this might be the most recently selected packet, or it might be the last packet in the file). */ @@ -347,6 +378,7 @@ follow_stream_cb(GtkWidget * w, gpointer data) follow_info); follow_load_text(follow_info); + remember_follow_info(follow_info); data_out_file = NULL; @@ -367,6 +399,7 @@ follow_destroy_cb(GtkWidget *w, gpointer data) follow_info = gtk_object_get_data(GTK_OBJECT(w), E_FOLLOW_INFO_KEY); unlink(follow_info->data_out_filename); gtk_widget_destroy(w); + forget_follow_info(follow_info); g_free(follow_info); } diff --git a/gtk/follow_dlg.h b/gtk/follow_dlg.h index 07fb180eea..7c203b2137 100644 --- a/gtk/follow_dlg.h +++ b/gtk/follow_dlg.h @@ -1,6 +1,6 @@ /* follow_dlg.c * - * $Id: follow_dlg.h,v 1.2 2000/08/11 13:32:57 deniel Exp $ + * $Id: follow_dlg.h,v 1.3 2000/09/08 10:59:12 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -27,4 +27,7 @@ void follow_stream_cb( GtkWidget *, gpointer); +/* Redraw the text in all "Follow TCP Stream" windows. */ +void follow_redraw_all(void); + #endif diff --git a/gtk/gui_prefs.c b/gtk/gui_prefs.c index 2010dc5120..f9ef193c05 100644 --- a/gtk/gui_prefs.c +++ b/gtk/gui_prefs.c @@ -1,7 +1,7 @@ /* gui_prefs.c * Dialog box for GUI preferences * - * $Id: gui_prefs.c,v 1.17 2000/09/08 09:50:01 guy Exp $ + * $Id: gui_prefs.c,v 1.18 2000/09/08 10:59:12 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -33,6 +33,8 @@ #include "gui_prefs.h" #include "gtkglobals.h" #include "prefs_dlg.h" +#include "follow_dlg.h" +#include "help_dlg.h" #include "prefs.h" #include "prefs-int.h" #include "ui_util.h" @@ -385,34 +387,61 @@ gui_prefs_fetch(GtkWidget *w) void gui_prefs_apply(GtkWidget *w) { - GdkFont *font = NULL; + GdkFont *new_r_font, *new_b_font; + char *bold_font_name; + GdkFont *old_r_font = NULL, *old_b_font = NULL; if (font_changed) { - font = gdk_font_load(prefs.gui_font_name); - if (font == NULL) { + new_r_font = gdk_font_load(prefs.gui_font_name); + if (new_r_font == NULL) { /* XXX - make this a dialog box, and don't let them - continue! */ + continue! */ fprintf(stderr, "Can't open font %s\n", prefs.gui_font_name); + } else { + bold_font_name = boldify(prefs.gui_font_name); + new_b_font = gdk_font_load(bold_font_name); + if (new_b_font == NULL) { + /* XXX - make this a dialog box, and don't + let them continue! */ + fprintf(stderr, "Can't open font %s\n", + bold_font_name); + gdk_font_unref(new_r_font); + } else { + set_plist_font(new_r_font); + set_ptree_font_all(new_r_font); + old_r_font = m_r_font; + old_b_font = m_b_font; + m_r_font = new_r_font; + m_b_font = new_b_font; + } + g_free(bold_font_name); } } + /* Redraw the hex dump windows, in case either the font or the + highlight style changed. */ + redraw_hex_dump_all(); + + /* Redraw the help window. */ + help_redraw(); + + /* Redraw the "Follow TCP Stream" windows, in case either the font + or the colors to use changed. */ + follow_redraw_all(); + set_scrollbar_placement_all(prefs.gui_scrollbar_on_right); set_plist_sel_browse(prefs.gui_plist_sel_browse); set_ptree_sel_browse_all(prefs.gui_ptree_sel_browse); set_ptree_line_style_all(prefs.gui_ptree_line_style); set_ptree_expander_style_all(prefs.gui_ptree_expander_style); - set_hex_dump_highlight_style_all(prefs.gui_hex_dump_highlight_style); if (colors_changed) update_marked_frames(); - if (font != NULL) { - set_plist_font(font); - set_ptree_font_all(font); -#if 0 - gdk_font_unref(m_r_font); - m_r_font = font; - /* Do the windows that directly use m_r_font here. */ -#endif - } + + /* We're no longer using the old fonts; unreference them. */ + if (old_r_font != NULL) + gdk_font_unref(old_r_font); + if (old_b_font != NULL) + gdk_font_unref(old_b_font); } void diff --git a/gtk/help_dlg.c b/gtk/help_dlg.c index 00d0a2c5d5..8c7b2d4198 100644 --- a/gtk/help_dlg.c +++ b/gtk/help_dlg.c @@ -1,6 +1,6 @@ /* help_dlg.c * - * $Id: help_dlg.c,v 1.9 2000/09/07 05:08:19 gram Exp $ + * $Id: help_dlg.c,v 1.10 2000/09/08 10:59:13 guy Exp $ * * Laurent Deniel <deniel@worldnet.fr> * @@ -70,14 +70,19 @@ static void set_help_text(GtkWidget *w, help_type_t type); */ static GtkWidget *help_w = NULL; +/* + * Keep static pointers to the text widgets as well. + */ +GtkWidget *overview_text, *proto_text, *dfilter_text, *cfilter_text; + void help_cb(GtkWidget *w, gpointer data) { GtkWidget *main_vb, *bbox, *help_nb, *close_bt, *label, *txt_scrollw, - *overview_vb, *overview_text, - *proto_vb, *proto_text, - *dfilter_vb, *dfilter_text, - *cfilter_vb, *cfilter_text; + *overview_vb, + *proto_vb, + *dfilter_vb, + *cfilter_vb; if (help_w != NULL) { /* There's already a "Help" dialog box; reactivate it. */ @@ -398,3 +403,42 @@ static void set_help_text(GtkWidget *w, help_type_t type) gtk_text_thaw(GTK_TEXT(w)); } /* set_help_text */ + +static void clear_help_text(GtkWidget *w) +{ + GtkText *txt = GTK_TEXT(w); + + gtk_text_set_point(txt, 0); + /* Keep GTK+ 1.2.3 through 1.2.6 from dumping core - see + http://ethereal.zing.org/lists/ethereal-dev/199912/msg00312.html and + http://www.gnome.org/mailing-lists/archives/gtk-devel-list/1999-October/0051.shtml + for more information */ + gtk_adjustment_set_value(txt->vadj, 0.0); + gtk_text_forward_delete(txt, gtk_text_get_length(txt)); +} + +/* Redraw all the text widgets, to use a new font. */ +void help_redraw(void) +{ + if (help_w != NULL) { + gtk_text_freeze(GTK_TEXT(overview_text)); + clear_help_text(overview_text); + set_help_text(overview_text, OVERVIEW_HELP); + gtk_text_thaw(GTK_TEXT(overview_text)); + + gtk_text_freeze(GTK_TEXT(proto_text)); + clear_help_text(proto_text); + set_help_text(proto_text, PROTOCOL_HELP); + gtk_text_thaw(GTK_TEXT(proto_text)); + + gtk_text_freeze(GTK_TEXT(dfilter_text)); + clear_help_text(dfilter_text); + set_help_text(dfilter_text, DFILTER_HELP); + gtk_text_thaw(GTK_TEXT(dfilter_text)); + + gtk_text_freeze(GTK_TEXT(cfilter_text)); + clear_help_text(cfilter_text); + set_help_text(cfilter_text, CFILTER_HELP); + gtk_text_thaw(GTK_TEXT(cfilter_text)); + } +} diff --git a/gtk/help_dlg.h b/gtk/help_dlg.h index 99c1ed0cbe..88e6950b0f 100644 --- a/gtk/help_dlg.h +++ b/gtk/help_dlg.h @@ -1,6 +1,6 @@ /* help_dlg.h * - * $Id: help_dlg.h,v 1.2 2000/08/11 13:32:57 deniel Exp $ + * $Id: help_dlg.h,v 1.3 2000/09/08 10:59:14 guy Exp $ * * Laurent Deniel <deniel@worldnet.fr> * @@ -29,4 +29,7 @@ void help_cb(GtkWidget *, gpointer); +/* Redraw all the text widgets, to use a new font. */ +void help_redraw(void); + #endif diff --git a/gtk/main.c b/gtk/main.c index 1e3591a089..cbda9e18c4 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1,6 +1,6 @@ /* main.c * - * $Id: main.c,v 1.154 2000/09/08 09:50:03 guy Exp $ + * $Id: main.c,v 1.155 2000/09/08 10:59:15 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -136,7 +136,6 @@ GtkStyle *item_style; field_info *finfo_selected = NULL; static char* hfinfo_numeric_format(header_field_info *hfinfo); -static char *boldify(const char *font_name); static void create_main_window(gint, gint, gint, e_prefs*); /* About Ethereal window */ @@ -573,8 +572,7 @@ tree_view_select_row_cb(GtkCTree *ctree, GList *node, gint column, gpointer user } packet_hex_print(GTK_TEXT(byte_view), cfile.pd, cfile.current_frame->cap_len, - finfo->start, finfo->length, cfile.current_frame->flags.encoding, - prefs.gui_hex_dump_highlight_style); + finfo->start, finfo->length, cfile.current_frame->flags.encoding); } static void @@ -584,8 +582,7 @@ tree_view_unselect_row_cb(GtkCTree *ctree, GList *node, gint column, gpointer us finfo_selected = NULL; set_menus_for_selected_tree_row(FALSE); packet_hex_print(GTK_TEXT(byte_view), cfile.pd, cfile.current_frame->cap_len, - -1, -1, cfile.current_frame->flags.encoding, - prefs.gui_hex_dump_highlight_style); + -1, -1, cfile.current_frame->flags.encoding); } void collapse_all_cb(GtkWidget *widget, gpointer data) { @@ -1406,7 +1403,7 @@ static const struct { }; #define N_WEIGHTS (sizeof weight_map / sizeof weight_map[0]) -static char * +char * boldify(const char *font_name) { char *bold_font_name; diff --git a/gtk/main.h b/gtk/main.h index e0f41284e5..6eee7b6a6b 100644 --- a/gtk/main.h +++ b/gtk/main.h @@ -1,7 +1,7 @@ /* main.h * Global defines, etc. * - * $Id: main.h,v 1.19 2000/08/22 14:04:52 deniel Exp $ + * $Id: main.h,v 1.20 2000/09/08 10:59:17 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -63,4 +63,6 @@ void mark_all_frames_cb(GtkWidget *w, gpointer); void unmark_all_frames_cb(GtkWidget *w, gpointer); void update_marked_frames(void); +char *boldify(const char *); + #endif /* __MAIN_H__ */ diff --git a/gtk/packet_win.c b/gtk/packet_win.c index 8fd9fb5872..48084fe3cd 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.13 2000/09/08 09:50:06 guy Exp $ + * $Id: packet_win.c,v 1.14 2000/09/08 10:59:18 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -196,8 +196,7 @@ create_new_window ( char *Title, gint tv_size, gint bv_size){ /* draw the protocol tree & print hex data */ proto_tree_draw(DataPtr->protocol_tree, tree_view); packet_hex_print( GTK_TEXT(byte_view), DataPtr->pd, - DataPtr->cap_len, -1, -1, DataPtr->encoding, - prefs.gui_hex_dump_highlight_style); + DataPtr->cap_len, -1, -1, DataPtr->encoding); DataPtr->finfo_selected = NULL; gtk_widget_show(main_w); @@ -232,7 +231,7 @@ new_tree_view_select_row_cb(GtkCTree *ctree, GList *node, gint column, packet_hex_print(GTK_TEXT(DataPtr->byte_view), DataPtr->pd, DataPtr->cap_len, finfo->start, finfo->length, - DataPtr->encoding, prefs.gui_hex_dump_highlight_style); + DataPtr->encoding); } @@ -248,8 +247,7 @@ new_tree_view_unselect_row_cb(GtkCTree *ctree, GList *node, gint column, DataPtr->finfo_selected = NULL; packet_hex_print(GTK_TEXT(DataPtr->byte_view), DataPtr->pd, - DataPtr->cap_len, -1, -1, DataPtr->encoding, - prefs.gui_hex_dump_highlight_style); + DataPtr->cap_len, -1, -1, DataPtr->encoding); } /* Functions called from elsewhere to act on all popup packet windows. */ @@ -272,17 +270,16 @@ destroy_packet_wins(void) } static void -set_hex_dump_highlight_style_cb(gpointer data, gpointer user_data) +redraw_hex_dump_cb(gpointer data, gpointer user_data) { struct PacketWinData *DataPtr = (struct PacketWinData *)data; - set_hex_dump_highlight_style(DataPtr->byte_view, - DataPtr->finfo_selected, *(gint *)user_data); + redraw_hex_dump(DataPtr->byte_view, DataPtr->finfo_selected); } -/* Set the hex dump highlight style of all the popup packet windows. */ +/* Redraw the hex dump part of all the popup packet windows. */ void -set_hex_dump_highlight_style_packet_wins(gboolean style) +redraw_hex_dump_packet_wins(void) { - g_list_foreach(detail_windows, set_hex_dump_highlight_style_cb, &style); + g_list_foreach(detail_windows, redraw_hex_dump_cb, NULL); } diff --git a/gtk/packet_win.h b/gtk/packet_win.h index 42391ec99b..6ca94550c1 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.5 2000/09/08 09:50:07 guy Exp $ + * $Id: packet_win.h,v 1.6 2000/09/08 10:59:19 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -28,6 +28,6 @@ #define __PACKET_WIN_H__ extern void new_window_cb(GtkWidget *w); -void set_hex_dump_highlight_style_packet_wins(gboolean style); +void redraw_hex_dump_packet_wins(void); #endif diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c index 3e05ef43bf..c5d22cf06f 100644 --- a/gtk/proto_draw.c +++ b/gtk/proto_draw.c @@ -1,7 +1,7 @@ /* proto_draw.c * Routines for GTK+ packet display * - * $Id: proto_draw.c,v 1.19 2000/09/08 09:50:07 guy Exp $ + * $Id: proto_draw.c,v 1.20 2000/09/08 10:59:19 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -58,25 +58,25 @@ extern GdkFont *m_r_font, *m_b_font; static void proto_tree_draw_node(GNode *node, gpointer data); -/* Set the highlight style of a given byte view window. */ +/* Redraw a given byte view window. */ void -set_hex_dump_highlight_style(GtkWidget *bv, field_info *finfo, gboolean style) +redraw_hex_dump(GtkWidget *bv, field_info *finfo) { if (finfo != NULL) { packet_hex_print(GTK_TEXT(bv), cfile.pd, cfile.current_frame->cap_len, finfo->start, finfo->length, - cfile.current_frame->flags.encoding, style); + cfile.current_frame->flags.encoding); } else { packet_hex_print(GTK_TEXT(bv), cfile.pd, cfile.current_frame->cap_len, - -1, -1, cfile.current_frame->flags.encoding, style); + -1, -1, cfile.current_frame->flags.encoding); } } void -set_hex_dump_highlight_style_all(gboolean style) +redraw_hex_dump_all(void) { - set_hex_dump_highlight_style(byte_view, finfo_selected, style); - set_hex_dump_highlight_style_packet_wins(style); + redraw_hex_dump(byte_view, finfo_selected); + redraw_hex_dump_packet_wins(); } void @@ -108,7 +108,7 @@ create_byte_view(gint bv_size, GtkWidget *pane, GtkWidget **byte_view_p, void packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen, - char_enc encoding, gboolean style) { + char_enc encoding) { gint i = 0, j, k, cur; guchar line[128], hexchars[] = "0123456789abcdef", c = '\0'; GdkFont *cur_font, *new_font; @@ -138,7 +138,7 @@ packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen, sprintf(line, "%04x ", i); /* Display with inverse video ? */ - if (style) { + if (prefs.gui_hex_dump_highlight_style) { gtk_text_insert(bv, m_r_font, &BLACK, &WHITE, line, -1); /* Do we start in reverse? */ reverse = i >= bstart && i < bend; diff --git a/gtk/proto_draw.h b/gtk/proto_draw.h index 96fb55c89b..68d5126630 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.8 2000/09/08 09:50:08 guy Exp $ + * $Id: proto_draw.h,v 1.9 2000/09/08 10:59:21 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -27,12 +27,11 @@ #ifndef __GTKPACKET_H__ #define __GTKPACKET_H__ -void set_hex_dump_highlight_style(GtkWidget *bv, field_info *finfo, - gboolean style); -void set_hex_dump_highlight_style_all(gboolean); +void redraw_hex_dump(GtkWidget *bv, field_info *finfo); +void redraw_hex_dump_all(void); void create_byte_view(gint bv_size, GtkWidget *pane, GtkWidget **byte_view_p, GtkWidget **bv_scrollw_p, int pos); -void packet_hex_print(GtkText *, guint8 *, gint, gint, gint, char_enc, gboolean); +void packet_hex_print(GtkText *, guint8 *, gint, gint, gint, char_enc); #define E_TREEINFO_FIELD_INFO_KEY "tree_info_finfo" |