diff --git a/gtk/capture_dlg.c b/gtk/capture_dlg.c index 671411a123..e5b6425598 100644 --- a/gtk/capture_dlg.c +++ b/gtk/capture_dlg.c @@ -1080,11 +1080,7 @@ capture_prep(void) help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); gtk_tooltips_set_tip(tooltips, help_bt, "Show help about capturing.", NULL); -#ifdef ETHEREAL_EUG_DIR - SIGNAL_CONNECT(help_bt, "clicked", url_page_cb, HELP_CAPTURE_OPTIONS_DIALOG); -#else - SIGNAL_CONNECT(help_bt, "clicked", help_topic_cb, "Capturing"); -#endif + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_CAPTURE_OPTIONS_DIALOG); gtk_widget_grab_default(ok_bt); diff --git a/gtk/capture_if_dlg.c b/gtk/capture_if_dlg.c index d90a76150e..2ea8113cc8 100644 --- a/gtk/capture_if_dlg.c +++ b/gtk/capture_if_dlg.c @@ -62,6 +62,7 @@ #include "wtap.h" #include "main.h" +#include "help_dlg.h" extern gboolean is_capture_in_progress(void); @@ -298,7 +299,7 @@ capture_if_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_) void capture_if_cb(GtkWidget *w _U_, gpointer d _U_) { - GtkWidget *main_vb, *bbox, *close_bt; + GtkWidget *main_vb, *bbox, *close_bt, *help_bt; GtkWidget *if_tb; GtkWidget *if_lb; @@ -507,13 +508,22 @@ capture_if_cb(GtkWidget *w _U_, gpointer d _U_) g_string_free(if_tool_str, TRUE); /* Button row: close button */ - bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + if(topic_available(HELP_CAPTURE_INTERFACES_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + } gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 5); close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); window_set_cancel_button(cap_if_w, close_bt, window_cancel_button_cb); gtk_tooltips_set_tip(tooltips, close_bt, "Close this window.", NULL); + if(topic_available(HELP_CAPTURE_INTERFACES_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_CAPTURE_INTERFACES_DIALOG); + } + gtk_widget_grab_default(close_bt); SIGNAL_CONNECT(cap_if_w, "delete_event", window_delete_event_cb, NULL); diff --git a/gtk/color_dlg.c b/gtk/color_dlg.c index 9f8c5493ec..6cb2b5dc64 100644 --- a/gtk/color_dlg.c +++ b/gtk/color_dlg.c @@ -47,6 +47,7 @@ #include "file_dlg.h" #include "gtkglobals.h" #include +#include "help_dlg.h" static GtkWidget* colorize_dialog_new(char *filter); static void add_filter_to_list(gpointer filter_arg, gpointer list_arg); @@ -200,6 +201,7 @@ colorize_dialog_new (char *filter) GtkWidget *color_apply; GtkWidget *color_save; GtkWidget *color_cancel; + GtkWidget *color_help; #if GTK_MAJOR_VERSION >= 2 GtkListStore *store; @@ -386,7 +388,11 @@ colorize_dialog_new (char *filter) /* Button row: OK and cancel buttons */ - button_ok_hbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CLOSE/*, GTK_STOCK_CANCEL*/, NULL); + if(topic_available(HELP_COLORING_RULES_DIALOG)) { + button_ok_hbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + button_ok_hbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CLOSE/*, GTK_STOCK_CANCEL*/, NULL); + } gtk_box_pack_start (GTK_BOX (dlg_vbox), button_ok_hbox, FALSE, FALSE, 5); color_ok = OBJECT_GET_DATA(button_ok_hbox, GTK_STOCK_OK); @@ -402,6 +408,12 @@ colorize_dialog_new (char *filter) window_set_cancel_button(color_win, color_cancel, color_cancel_cb); gtk_tooltips_set_tip (tooltips, color_cancel, ("Close this dialog but don't apply the color filter changes to the display"), NULL); + if(topic_available(HELP_COLORING_RULES_DIALOG)) { + color_help = OBJECT_GET_DATA(button_ok_hbox, GTK_STOCK_HELP); + gtk_tooltips_set_tip (tooltips, color_help, ("Get help about this dialog"), NULL); + SIGNAL_CONNECT(color_help, "clicked", topic_cb, HELP_COLORING_RULES_DIALOG); + } + gtk_widget_grab_default(color_ok); /* signals and such */ diff --git a/gtk/conversations_table.c b/gtk/conversations_table.c index c460d55a45..d1ae9785dc 100644 --- a/gtk/conversations_table.c +++ b/gtk/conversations_table.c @@ -48,13 +48,14 @@ #include "image/clist_descend.xpm" #include "simple_dialog.h" #include "globals.h" -#include "gtk/find_dlg.h" +#include "find_dlg.h" #include "color.h" #include "gtk/color_dlg.h" #include "gtkglobals.h" #include "main.h" #include "ui_util.h" #include "dlg_utils.h" +#include "help_dlg.h" #define GTK_MENU_FUNC(a) ((GtkItemFactoryCallback)(a)) @@ -1238,7 +1239,7 @@ init_conversation_table(gboolean hide_ports, char *table_name, char *tap_name, c char title[256]; GtkWidget *vbox; GtkWidget *bbox; - GtkWidget *close_bt; + GtkWidget *close_bt, *help_bt; gboolean ret; @@ -1261,12 +1262,21 @@ init_conversation_table(gboolean hide_ports, char *table_name, char *tap_name, c } /* Button row. */ - bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + if(topic_available(HELP_STATS_CONVERSATIONS_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + } gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); window_set_cancel_button(conversations->win, close_bt, window_cancel_button_cb); + if(topic_available(HELP_STATS_CONVERSATIONS_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_STATS_CONVERSATIONS_DIALOG); + } + SIGNAL_CONNECT(conversations->win, "delete_event", window_delete_event_cb, NULL); SIGNAL_CONNECT(conversations->win, "destroy", ct_win_destroy_cb, conversations); @@ -1385,7 +1395,7 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_) GtkWidget *vbox; GtkWidget *hbox; GtkWidget *bbox; - GtkWidget *close_bt; + GtkWidget *close_bt, *help_bt; GtkWidget *win; GtkWidget *resolv_cb; int page; @@ -1440,12 +1450,21 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_) SIGNAL_CONNECT(resolv_cb, "toggled", ct_resolve_toggle_dest, pages); /* Button row. */ - bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + if(topic_available(HELP_STATS_CONVERSATIONS_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + } gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); window_set_cancel_button(win, close_bt, window_cancel_button_cb); + if(topic_available(HELP_STATS_CONVERSATIONS_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_STATS_CONVERSATIONS_DIALOG); + } + SIGNAL_CONNECT(win, "delete_event", window_delete_event_cb, NULL); SIGNAL_CONNECT(win, "destroy", ct_win_destroy_notebook_cb, pages); diff --git a/gtk/decode_as_dlg.c b/gtk/decode_as_dlg.c index c8cedc734e..59043eb203 100644 --- a/gtk/decode_as_dlg.c +++ b/gtk/decode_as_dlg.c @@ -39,6 +39,7 @@ #include #include "compat_macros.h" #include "decode_as_dcerpc.h" +#include "help_dlg.h" #undef DEBUG @@ -520,7 +521,7 @@ decode_show_destroy_cb (GtkWidget *win _U_, gpointer user_data _U_) void decode_show_cb (GtkWidget * w _U_, gpointer data _U_) { - GtkWidget *main_vb, *bbox, *ok_bt, *clear_bt, *scrolled_window; + GtkWidget *main_vb, *bbox, *ok_bt, *clear_bt, *help_bt, *scrolled_window; gchar *titles[E_LIST_D_COLUMNS] = { "Table", "Value", "Initial", "Current" }; @@ -603,7 +604,11 @@ decode_show_cb (GtkWidget * w _U_, gpointer data _U_) } /* Button row */ - bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CLEAR, NULL); + if(topic_available(HELP_DECODE_AS_SHOW_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CLEAR, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CLEAR, NULL); + } gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); @@ -613,6 +618,11 @@ decode_show_cb (GtkWidget * w _U_, gpointer data _U_) clear_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLEAR); SIGNAL_CONNECT(clear_bt, "clicked", decode_show_clear_cb, decode_show_w); + if(topic_available(HELP_DECODE_AS_SHOW_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_DECODE_AS_SHOW_DIALOG); + } + /* set ok as default, this button won't change anything */ window_set_cancel_button(decode_show_w, ok_bt, NULL); @@ -1858,7 +1868,7 @@ decode_add_notebook (GtkWidget *format_hb) void decode_as_cb (GtkWidget * w _U_, gpointer data _U_) { - GtkWidget *main_vb, *format_hb, *bbox, *ok_bt, *close_bt, *button; + GtkWidget *main_vb, *format_hb, *bbox, *ok_bt, *close_bt, *help_bt, *button; GtkWidget *button_vb, *apply_bt; GtkTooltips *tooltips = gtk_tooltips_new(); @@ -1904,7 +1914,11 @@ decode_as_cb (GtkWidget * w _U_, gpointer data _U_) } /* Button row */ - bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CLOSE, NULL); + if(topic_available(HELP_DECODE_AS_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CLOSE, NULL); + } gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); @@ -1924,6 +1938,11 @@ decode_as_cb (GtkWidget * w _U_, gpointer data _U_) gtk_tooltips_set_tip(tooltips, close_bt, "Close the dialog, don't redissect packets.", NULL); + if(topic_available(HELP_DECODE_AS_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_DECODE_AS_DIALOG); + } + gtk_widget_grab_default(ok_bt); SIGNAL_CONNECT(decode_w, "delete_event", decode_delete_cb, NULL); diff --git a/gtk/filter_dlg.c b/gtk/filter_dlg.c index d59363e087..2961216bc0 100644 --- a/gtk/filter_dlg.c +++ b/gtk/filter_dlg.c @@ -614,17 +614,9 @@ filter_dialog_new(GtkWidget *button, GtkWidget *parent_filter_te, help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); if (list == CFILTER_LIST) { -#ifdef ETHEREAL_EUG_DIR - SIGNAL_CONNECT(help_bt, "clicked", url_page_cb, HELP_CAPTURE_FILTERS_DIALOG); -#else - SIGNAL_CONNECT(help_bt, "clicked", help_topic_cb, "Capture Filters"); -#endif + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_CAPTURE_FILTERS_DIALOG); } else { -#ifdef ETHEREAL_EUG_DIR - SIGNAL_CONNECT(help_bt, "clicked", url_page_cb, HELP_DISPLAY_FILTERS_DIALOG); -#else - SIGNAL_CONNECT(help_bt, "clicked", help_topic_cb, "Display Filters"); -#endif + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_DISPLAY_FILTERS_DIALOG); } gtk_tooltips_set_tip (tooltips, help_bt, ("Show topic specific help"), NULL); diff --git a/gtk/find_dlg.c b/gtk/find_dlg.c index ac9695d589..44260c02d0 100644 --- a/gtk/find_dlg.c +++ b/gtk/find_dlg.c @@ -46,6 +46,7 @@ #include #include "prefs_dlg.h" #include "keys.h" +#include "help_dlg.h" /* Capture callback data keys */ #define E_FIND_FILT_KEY "find_filter_te" @@ -113,7 +114,7 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_) *string_opt_frame, *string_opt_vb, *case_cb, *combo_lb, *combo_cb, - *bbox, *ok_bt, *cancel_bt; + *bbox, *ok_bt, *cancel_bt, *help_bt; GtkTooltips *tooltips; #if GTK_MAJOR_VERSION < 2 GtkAccelGroup *accel_group; @@ -325,7 +326,11 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_) /* Button row */ - bbox = dlg_button_row_new(GTK_STOCK_FIND, GTK_STOCK_CANCEL, NULL); + if(topic_available(HELP_FIND_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_FIND, GTK_STOCK_CANCEL, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_FIND, GTK_STOCK_CANCEL, NULL); + } gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); @@ -335,6 +340,11 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_) cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", find_frame_close_cb, find_frame_w); + if(topic_available(HELP_FIND_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_FIND_DIALOG); + } + /* Attach pointers to needed widgets to the capture prefs window/object */ OBJECT_SET_DATA(find_frame_w, E_FIND_FILT_KEY, filter_text_box); OBJECT_SET_DATA(find_frame_w, E_FIND_BACKWARD_KEY, up_rb); diff --git a/gtk/goto_dlg.c b/gtk/goto_dlg.c index 38f81b8b50..8b60491606 100644 --- a/gtk/goto_dlg.c +++ b/gtk/goto_dlg.c @@ -37,6 +37,7 @@ #include "dlg_utils.h" #include "compat_macros.h" #include "ui_util.h" +#include "help_dlg.h" /* Capture callback data keys */ #define E_GOTO_FNUMBER_KEY "goto_fnumber_te" @@ -48,7 +49,7 @@ void goto_frame_cb(GtkWidget *w _U_, gpointer d _U_) { GtkWidget *goto_frame_w, *main_vb, *fnumber_hb, *fnumber_lb, *fnumber_te, - *bbox, *ok_bt, *cancel_bt; + *bbox, *ok_bt, *cancel_bt, *help_bt; goto_frame_w = dlg_window_new("Ethereal: Go To Packet"); @@ -72,7 +73,11 @@ goto_frame_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(fnumber_te); /* Button row: OK and cancel buttons */ - bbox = dlg_button_row_new(GTK_STOCK_JUMP_TO, GTK_STOCK_CANCEL, NULL); + if(topic_available(HELP_GOTO_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_JUMP_TO, GTK_STOCK_CANCEL, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_JUMP_TO, GTK_STOCK_CANCEL, NULL); + } gtk_container_add(GTK_CONTAINER(main_vb), bbox); gtk_widget_show(bbox); @@ -82,6 +87,11 @@ goto_frame_cb(GtkWidget *w _U_, gpointer d _U_) cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); window_set_cancel_button(goto_frame_w, cancel_bt, window_cancel_button_cb); + if(topic_available(HELP_GOTO_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_GOTO_DIALOG); + } + gtk_widget_grab_default(ok_bt); /* Catch the "activate" signal on the frame number text entry, so that diff --git a/gtk/help_dlg.c b/gtk/help_dlg.c index 7c51cd1035..8327b3a694 100644 --- a/gtk/help_dlg.c +++ b/gtk/help_dlg.c @@ -99,7 +99,8 @@ static GtkWidget * help_page(const char *topic, const char *filename) /* * Create and show help dialog. */ -void help_cb(GtkWidget *w _U_, gpointer data _U_) +static +void help_dialog(void) { GtkWidget *main_vb, *bbox, *help_nb, *close_bt, *label, *topic_vb; char line[4096+1]; /* XXX - size? */ @@ -180,23 +181,51 @@ void help_cb(GtkWidget *w _U_, gpointer data _U_) gtk_widget_show_all(help_w); window_present(help_w); -} /* help_cb */ +} /* help_dialog */ +gboolean topic_available(topic_action_e action) { + +#ifdef ETHEREAL_EUG_DIR + /* online: we have all pages available */ + return TRUE; +#else + /* offline: we have only some pages available */ + switch(action) { + case(HELP_CONTENT): + return TRUE; + break; + case(HELP_GETTING_STARTED): + return TRUE; + break; + case(HELP_CAPTURE_OPTIONS_DIALOG): + return TRUE; + break; + case(HELP_CAPTURE_FILTERS_DIALOG): + return TRUE; + break; + case(HELP_DISPLAY_FILTERS_DIALOG): + return TRUE; + break; + default: + return FALSE; + } +#endif +} + /* * Open the help dialog and show a specific help page. */ - -void help_topic_cb(GtkWidget *w _U_, gpointer data) { - gchar *topic = data; +void help_topic(gchar *topic) { gchar *page_topic; GtkWidget *help_nb; GSList *help_page_ent; gint page_num = 0; help_page_t *page; + /* show help dialog, if not already opened */ - help_cb(NULL, NULL); + help_dialog(); help_nb = OBJECT_GET_DATA(help_w, NOTEBOOK_KEY); @@ -261,8 +290,8 @@ void help_redraw(void) } -void -url_page_action(url_page_action_e action) +static void +topic_action(topic_action_e action) { /* pages online at www.ethereal.com */ switch(action) { @@ -319,6 +348,65 @@ url_page_action(url_page_action_e action) case(HELP_DISPLAY_FILTERS_DIALOG): browser_open_data_file("eug_html_chunked/ChWorkDefineFilterSection.html"); break; + case(HELP_COLORING_RULES_DIALOG): + browser_open_data_file("eug_html_chunked/ChCustColorizationSection.html"); + break; + case(HELP_PRINT_DIALOG): + browser_open_data_file("eug_html_chunked/ChIOPrintSection.html"); + break; + case(HELP_FIND_DIALOG): + browser_open_data_file("eug_html_chunked/ChWorkFindPacketSection.html"); + break; + case(HELP_GOTO_DIALOG): + browser_open_data_file("eug_html_chunked/ChWorkGoToPacketSection.html"); + break; + case(HELP_CAPTURE_INTERFACES_DIALOG): + browser_open_data_file("eug_html_chunked/ChCapInterfaceSection.html"); + break; + case(HELP_ENABLED_PROTOCOLS_DIALOG): + browser_open_data_file("eug_html_chunked/ChCustProtocolDissectionSection.html"); + break; + case(HELP_DECODE_AS_DIALOG): + browser_open_data_file("eug_html_chunked/ChCustProtocolDissectionSection.html"); + break; + case(HELP_DECODE_AS_SHOW_DIALOG): + browser_open_data_file("eug_html_chunked/ChCustProtocolDissectionSection.html"); + break; + case(HELP_FOLLOW_TCP_STREAM_DIALOG): + browser_open_data_file("eug_html_chunked/ChAdvFollowTCPSection.html"); + break; + case(HELP_STATS_SUMMARY_DIALOG): + browser_open_data_file("eug_html_chunked/ChStatSummary.html"); + break; + case(HELP_STATS_PROTO_HIERARCHY_DIALOG): + browser_open_data_file("eug_html_chunked/ChStatHierarchy.html"); + break; + case(HELP_STATS_ENDPOINTS_DIALOG): + browser_open_data_file("eug_html_chunked/ChStatEndpoints.html"); + break; + case(HELP_STATS_CONVERSATIONS_DIALOG): + browser_open_data_file("eug_html_chunked/ChStatConversations.html"); + break; + case(HELP_STATS_IO_GRAPH_DIALOG): + browser_open_data_file("eug_html_chunked/ChStatIOGraphs.html"); + break; +#else + /* only some help pages are available for offline reading */ + case(HELP_CONTENT): + help_topic("Overview"); + break; + case(HELP_GETTING_STARTED): + help_topic("Getting Started"); + break; + case(HELP_CAPTURE_OPTIONS_DIALOG): + help_topic("Capturing"); + break; + case(HELP_CAPTURE_FILTERS_DIALOG): + help_topic("Capture Filters"); + break; + case(HELP_DISPLAY_FILTERS_DIALOG): + help_topic("Display Filters"); + break; #endif default: @@ -327,16 +415,14 @@ url_page_action(url_page_action_e action) } -void -url_page_cb(GtkWidget *w _U_, url_page_action_e action) +void +topic_cb(GtkWidget *w _U_, topic_action_e action) { - url_page_action(action); + topic_action(action); } - -void -url_page_menu_cb( GtkWidget *w _U_, gpointer data _U_, url_page_action_e action) -{ - url_page_action(action); +void +topic_menu_cb(GtkWidget *w _U_, gpointer data _U_, topic_action_e action) { + topic_action(action); } diff --git a/gtk/help_dlg.h b/gtk/help_dlg.h index e197abb6ba..b221d1d8ab 100644 --- a/gtk/help_dlg.h +++ b/gtk/help_dlg.h @@ -32,24 +32,6 @@ * @ingroup dialog_group */ -/** User requested the "Help" dialog box by menu or toolbar. - * - * @param widget parent widget (unused) - * @param data unused - */ -void help_cb(GtkWidget *widget, gpointer data); - -/** Create a "Help" dialog box and start with a specific topic. - * Will show the first page if topic is not found. - * - * @param widget parent widget (unused) - * @param topic the topic to display (a string) - */ -void help_topic_cb(GtkWidget *widget, gpointer topic); - -/** Redraw all the text widgets, to use a new font. */ -void help_redraw(void); - typedef enum { /* pages online at www.ethereal.com */ ONLINEPAGE_HOME, @@ -65,40 +47,54 @@ typedef enum { LOCALPAGE_MAN_TETHEREAL, LOCALPAGE_MAN_MERGECAP, LOCALPAGE_MAN_EDITCAP, - LOCALPAGE_MAN_TEXT2PCAP + LOCALPAGE_MAN_TEXT2PCAP, - /* local help pages (User's Guide) */ -#ifdef ETHEREAL_EUG_DIR - , + /* help pages (textfiles or local HTML User's Guide) */ HELP_CONTENT = 200, + HELP_GETTING_STARTED, /* currently unused */ HELP_CAPTURE_OPTIONS_DIALOG, HELP_CAPTURE_FILTERS_DIALOG, - HELP_DISPLAY_FILTERS_DIALOG -#endif -} url_page_action_e; + HELP_DISPLAY_FILTERS_DIALOG, + HELP_COLORING_RULES_DIALOG, + HELP_PRINT_DIALOG, + HELP_FIND_DIALOG, + HELP_GOTO_DIALOG, + HELP_CAPTURE_INTERFACES_DIALOG, + HELP_ENABLED_PROTOCOLS_DIALOG, + HELP_DECODE_AS_DIALOG, + HELP_DECODE_AS_SHOW_DIALOG, + HELP_FOLLOW_TCP_STREAM_DIALOG, /* currently unused */ + HELP_STATS_SUMMARY_DIALOG, + HELP_STATS_PROTO_HIERARCHY_DIALOG, + HELP_STATS_ENDPOINTS_DIALOG, + HELP_STATS_CONVERSATIONS_DIALOG, + HELP_STATS_IO_GRAPH_DIALOG +} topic_action_e; -/** User requested one of the html pages. - * - * @param action the page to show - */ -extern void -url_page_action(url_page_action_e action); - -/** User requested one of the html pages by button click. +/** Open a specific topic (create a "Help" dialog box or open a webpage). * * @param widget parent widget (unused) - * @param action the page to show + * @param topic the topic to display */ -extern void -url_page_cb(GtkWidget *widget _U_, url_page_action_e action); +void topic_cb(GtkWidget *widget, topic_action_e topic); -/** User requested one of the html pages by menu. +/** Open a specific topic called from a menu item. * * @param widget parent widget (unused) - * @param data unused - * @param action the page to show + * @param data user_data (unused) + * @param topic the topic to display */ -extern void url_page_menu_cb( GtkWidget *widget, gpointer data, url_page_action_e action); +void topic_menu_cb(GtkWidget *w _U_, gpointer data _U_, topic_action_e topic); + +/** Check, if a specific topic is available. + * + * @param topic the topic to display + * @return TRUE, if topic is available, FALSE if not + */ +gboolean topic_available(topic_action_e action); + +/** Redraw all the help dialog text widgets, to use a new font. */ +void help_redraw(void); #endif diff --git a/gtk/hostlist_table.c b/gtk/hostlist_table.c index 0e867bd72f..b9f2a21ac1 100644 --- a/gtk/hostlist_table.c +++ b/gtk/hostlist_table.c @@ -45,13 +45,14 @@ #include "image/clist_descend.xpm" #include "simple_dialog.h" #include "globals.h" -#include "gtk/find_dlg.h" +#include "find_dlg.h" #include "color.h" #include "gtk/color_dlg.h" #include "gtkglobals.h" #include "main.h" #include "ui_util.h" #include "dlg_utils.h" +#include "help_dlg.h" #define GTK_MENU_FUNC(a) ((GtkItemFactoryCallback)(a)) @@ -723,7 +724,7 @@ init_hostlist_table(gboolean hide_ports, char *table_name, char *tap_name, char char title[256]; GtkWidget *vbox; GtkWidget *bbox; - GtkWidget *close_bt; + GtkWidget *close_bt, *help_bt; gboolean ret; @@ -746,12 +747,21 @@ init_hostlist_table(gboolean hide_ports, char *table_name, char *tap_name, char } /* Button row. */ - bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + if(topic_available(HELP_STATS_ENDPOINTS_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + } gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); window_set_cancel_button(hosttable->win, close_bt, window_cancel_button_cb); + if(topic_available(HELP_STATS_ENDPOINTS_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_STATS_ENDPOINTS_DIALOG); + } + SIGNAL_CONNECT(hosttable->win, "delete_event", window_delete_event_cb, NULL); SIGNAL_CONNECT(hosttable->win, "destroy", hostlist_win_destroy_cb, hosttable); @@ -869,7 +879,7 @@ init_hostlist_notebook_cb(GtkWidget *w _U_, gpointer d _U_) GtkWidget *vbox; GtkWidget *hbox; GtkWidget *bbox; - GtkWidget *close_bt; + GtkWidget *close_bt, *help_bt; GtkWidget *win; GtkWidget *resolv_cb; int page; @@ -925,12 +935,21 @@ init_hostlist_notebook_cb(GtkWidget *w _U_, gpointer d _U_) SIGNAL_CONNECT(resolv_cb, "toggled", hostlist_resolve_toggle_dest, pages); /* Button row. */ - bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + if(topic_available(HELP_STATS_ENDPOINTS_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + } gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); window_set_cancel_button(win, close_bt, window_cancel_button_cb); + if(topic_available(HELP_STATS_ENDPOINTS_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_STATS_ENDPOINTS_DIALOG); + } + SIGNAL_CONNECT(win, "delete_event", window_delete_event_cb, NULL); SIGNAL_CONNECT(win, "destroy", hostlist_win_destroy_notebook_cb, pages); diff --git a/gtk/io_stat.c b/gtk/io_stat.c index 47f14f18d1..c05c22a450 100644 --- a/gtk/io_stat.c +++ b/gtk/io_stat.c @@ -52,6 +52,7 @@ #include "compat_macros.h" #include "dlg_utils.h" #include "filter_dlg.h" +#include "help_dlg.h" void protect_thread_critical_region(void); void unprotect_thread_critical_region(void); @@ -1871,7 +1872,8 @@ init_io_stat_window(io_stat_t *io) { GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *bt_close; + GtkWidget *bbox; + GtkWidget *close_bt, *help_bt; /* create the main window */ io->window=window_new(GTK_WINDOW_TOPLEVEL, "I/O Graphs"); @@ -1893,12 +1895,21 @@ init_io_stat_window(io_stat_t *io) io_stat_set_title(io); - hbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show(hbox); + if(topic_available(HELP_STATS_IO_GRAPH_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + } + gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); - bt_close = OBJECT_GET_DATA(hbox, GTK_STOCK_CLOSE); - window_set_cancel_button(io->window, bt_close, window_cancel_button_cb); + close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); + window_set_cancel_button(io->window, close_bt, window_cancel_button_cb); + + if(topic_available(HELP_STATS_IO_GRAPH_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_STATS_IO_GRAPH_DIALOG); + } SIGNAL_CONNECT(io->window, "delete_event", window_delete_event_cb, NULL); diff --git a/gtk/menu.c b/gtk/menu.c index d4ca081458..0ed1f18e64 100644 --- a/gtk/menu.c +++ b/gtk/menu.c @@ -344,27 +344,27 @@ static GtkItemFactoryEntry menu_items[] = ITEM_FACTORY_ENTRY("/Statistics/Endpoints", NULL, init_hostlist_notebook_cb, 0, NULL, NULL), ITEM_FACTORY_ENTRY("/_Help", NULL, NULL, 0, "", NULL), - ITEM_FACTORY_STOCK_ENTRY("/Help/_Contents", "F1", help_cb, 0, GTK_STOCK_HELP), + ITEM_FACTORY_STOCK_ENTRY("/Help/_Contents", "F1", topic_menu_cb, HELP_CONTENT, GTK_STOCK_HELP), ITEM_FACTORY_ENTRY("/Help/_Supported Protocols", NULL, supported_cb, 0, NULL, NULL), #if (GLIB_MAJOR_VERSION >= 2) #ifdef ETHEREAL_EUG_DIR ITEM_FACTORY_ENTRY("/Help/User's Guide", NULL, url_page_menu_cb, HELP_CONTENT, NULL, NULL), #endif ITEM_FACTORY_ENTRY("/Help/Manual Pages", NULL, NULL, 0, "", NULL), - ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal", NULL, url_page_menu_cb, LOCALPAGE_MAN_ETHEREAL, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal Filter", NULL, url_page_menu_cb, LOCALPAGE_MAN_ETHEREAL_FILTER, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal", NULL, topic_menu_cb, LOCALPAGE_MAN_ETHEREAL, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal Filter", NULL, topic_menu_cb, LOCALPAGE_MAN_ETHEREAL_FILTER, NULL, NULL), ITEM_FACTORY_ENTRY("/Help/Manual Pages/", NULL, NULL, 0, "", NULL), - ITEM_FACTORY_ENTRY("/Help/Manual Pages/Tethereal", NULL, url_page_menu_cb, LOCALPAGE_MAN_TETHEREAL, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Manual Pages/Mergecap", NULL, url_page_menu_cb, LOCALPAGE_MAN_MERGECAP, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Manual Pages/Editcap", NULL, url_page_menu_cb, LOCALPAGE_MAN_EDITCAP, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Manual Pages/Text2pcap", NULL, url_page_menu_cb, LOCALPAGE_MAN_TEXT2PCAP, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Tethereal", NULL, topic_menu_cb, LOCALPAGE_MAN_TETHEREAL, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Mergecap", NULL, topic_menu_cb, LOCALPAGE_MAN_MERGECAP, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Editcap", NULL, topic_menu_cb, LOCALPAGE_MAN_EDITCAP, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Text2pcap", NULL, topic_menu_cb, LOCALPAGE_MAN_TEXT2PCAP, NULL, NULL), ITEM_FACTORY_ENTRY("/Help/Ethereal Online", NULL, NULL, 0, "", NULL), - ITEM_FACTORY_STOCK_ENTRY("/Help/Ethereal Online/Home Page", NULL, url_page_menu_cb, ONLINEPAGE_HOME, GTK_STOCK_HOME), - ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Wiki", NULL, url_page_menu_cb, ONLINEPAGE_WIKI, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Ethereal Online/User's Guide", NULL, url_page_menu_cb, ONLINEPAGE_USERGUIDE, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Ethereal Online/FAQ's", NULL, url_page_menu_cb, ONLINEPAGE_FAQ, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Downloads", NULL, url_page_menu_cb, ONLINEPAGE_DOWNLOAD, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Example Files", NULL, url_page_menu_cb, ONLINEPAGE_SAMPLE_FILES, NULL, NULL), + ITEM_FACTORY_STOCK_ENTRY("/Help/Ethereal Online/Home Page", NULL, topic_menu_cb, ONLINEPAGE_HOME, GTK_STOCK_HOME), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Wiki", NULL, topic_menu_cb, ONLINEPAGE_WIKI, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/User's Guide", NULL, topic_menu_cb, ONLINEPAGE_USERGUIDE, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/FAQ's", NULL, topic_menu_cb, ONLINEPAGE_FAQ, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Downloads", NULL, topic_menu_cb, ONLINEPAGE_DOWNLOAD, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Example Files", NULL, topic_menu_cb, ONLINEPAGE_SAMPLE_FILES, NULL, NULL), #endif ITEM_FACTORY_ENTRY("/Help/", NULL, NULL, 0, "", NULL), ITEM_FACTORY_ENTRY("/Help/_About Ethereal", NULL, about_ethereal_cb, diff --git a/gtk/print_dlg.c b/gtk/print_dlg.c index b7f4877f0f..eedaeaa5f3 100644 --- a/gtk/print_dlg.c +++ b/gtk/print_dlg.c @@ -48,6 +48,7 @@ #endif #include "compat_macros.h" #include "range_utils.h" +#include "help_dlg.h" /* dialog output action */ @@ -359,7 +360,7 @@ open_print_dialog(char *title, output_action_e action, print_args_t *args) GtkWidget *hex_cb; GtkWidget *sep, *formfeed_cb; - GtkWidget *bbox, *ok_bt, *cancel_bt; + GtkWidget *bbox, *ok_bt, *cancel_bt, *help_bt; GtkTooltips *tooltips; @@ -622,7 +623,11 @@ open_print_dialog(char *title, output_action_e action, print_args_t *args) /* Button row */ - bbox = dlg_button_row_new(action == output_action_print ? GTK_STOCK_PRINT : GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL); + if(topic_available(HELP_PRINT_DIALOG)) { + bbox = dlg_button_row_new(action == output_action_print ? GTK_STOCK_PRINT : GTK_STOCK_OK, GTK_STOCK_CANCEL, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(action == output_action_print ? GTK_STOCK_PRINT : GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL); + } gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); @@ -654,6 +659,11 @@ open_print_dialog(char *title, output_action_e action, print_args_t *args) window_set_cancel_button(main_win, cancel_bt, window_cancel_button_cb); gtk_tooltips_set_tip (tooltips, cancel_bt, "Cancel and exit dialog", NULL); + if(topic_available(HELP_PRINT_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_PRINT_DIALOG); + } + gtk_widget_grab_default(ok_bt); /* Catch the "activate" signal on the "Command" and "File" text entries, diff --git a/gtk/proto_dlg.c b/gtk/proto_dlg.c index 5204ea5466..a173131917 100644 --- a/gtk/proto_dlg.c +++ b/gtk/proto_dlg.c @@ -42,6 +42,7 @@ #include "compat_macros.h" #include "disabled_protos.h" #include +#include "help_dlg.h" static gboolean proto_delete_event_cb(GtkWidget *, GdkEvent *, gpointer); static void proto_ok_cb(GtkWidget *, gpointer); @@ -219,7 +220,11 @@ proto_cb(GtkWidget *w _U_, gpointer data _U_) /* Button row */ - bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CANCEL, NULL); + if(topic_available(HELP_ENABLED_PROTOCOLS_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CANCEL, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CANCEL, NULL); + } gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); @@ -236,6 +241,11 @@ proto_cb(GtkWidget *w _U_, gpointer data _U_) button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); window_set_cancel_button(proto_w, button, proto_cancel_cb); + if(topic_available(HELP_ENABLED_PROTOCOLS_DIALOG)) { + button = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(button, "clicked", topic_cb, HELP_ENABLED_PROTOCOLS_DIALOG); + } + SIGNAL_CONNECT(proto_w, "delete_event", proto_delete_event_cb, NULL); SIGNAL_CONNECT(proto_w, "destroy", proto_destroy_cb, NULL); diff --git a/gtk/proto_hier_stats_dlg.c b/gtk/proto_hier_stats_dlg.c index 0777e190e8..9e774bac5b 100644 --- a/gtk/proto_hier_stats_dlg.c +++ b/gtk/proto_hier_stats_dlg.c @@ -33,6 +33,7 @@ #include "ui_util.h" #include "main.h" #include "compat_macros.h" +#include "help_dlg.h" #if GTK_MAJOR_VERSION < 2 #define NUM_STAT_COLUMNS 8 @@ -312,7 +313,7 @@ void proto_hier_stats_cb(GtkWidget *w _U_, gpointer d _U_) { ph_stats_t *ps; - GtkWidget *dlg, *ok_bt, *vbox, *bbox; + GtkWidget *dlg, *ok_bt, *help_bt, *vbox, *bbox; /* Get the statistics. */ ps = ph_stats_new(); @@ -334,13 +335,22 @@ proto_hier_stats_cb(GtkWidget *w _U_, gpointer d _U_) ph_stats_free(ps); /* Button row. */ - bbox = dlg_button_row_new(GTK_STOCK_OK, NULL); + if(topic_available(HELP_STATS_PROTO_HIERARCHY_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_OK, NULL); + } gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); window_set_cancel_button(dlg, ok_bt, window_cancel_button_cb); + if(topic_available(HELP_STATS_PROTO_HIERARCHY_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_STATS_PROTO_HIERARCHY_DIALOG); + } + SIGNAL_CONNECT(dlg, "delete_event", window_delete_event_cb, NULL); gtk_widget_show_all(dlg); diff --git a/gtk/summary_dlg.c b/gtk/summary_dlg.c index 2909def87b..7c88be31cc 100644 --- a/gtk/summary_dlg.c +++ b/gtk/summary_dlg.c @@ -38,6 +38,7 @@ #include "dlg_utils.h" #include "ui_util.h" #include "compat_macros.h" +#include "help_dlg.h" #define SUM_STR_MAX 1024 #define FILTER_SNIP_LEN 50 @@ -86,7 +87,7 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_) { summary_tally summary; GtkWidget *sum_open_w, - *main_vb, *bbox, *close_bt; + *main_vb, *bbox, *close_bt, *help_bt; GtkWidget *table; GtkWidget *list; char *titles[] = { "Traffic", "Captured", "Displayed" }; @@ -345,12 +346,21 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_) /* Button row. */ - bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + if(topic_available(HELP_STATS_SUMMARY_DIALOG)) { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + } gtk_container_add(GTK_CONTAINER(main_vb), bbox); close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); window_set_cancel_button(sum_open_w, close_bt, window_cancel_button_cb); + if(topic_available(HELP_STATS_SUMMARY_DIALOG)) { + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_STATS_SUMMARY_DIALOG); + } + gtk_widget_grab_focus(close_bt); SIGNAL_CONNECT(sum_open_w, "delete_event", window_delete_event_cb, NULL); diff --git a/gtk/toolbar.c b/gtk/toolbar.c index 2ebe954f79..459a88bd48 100644 --- a/gtk/toolbar.c +++ b/gtk/toolbar.c @@ -331,16 +331,16 @@ static void toolbar_append_separator(GtkWidget *toolbar) { #if GTK_MAJOR_VERSION < 2 -#define toolbar_item(new_item, window, toolbar, stock, tooltip, xpm, callback) { \ +#define toolbar_item(new_item, window, toolbar, stock, tooltip, xpm, callback, user_data) { \ icon = gdk_pixmap_create_from_xpm_d(window->window, &mask, &window->style->white, xpm); \ iconw = gtk_pixmap_new(icon, mask); \ new_item = gtk_toolbar_append_item(GTK_TOOLBAR (toolbar), \ - stock, tooltip, "Private", iconw, GTK_SIGNAL_FUNC(callback), NULL);\ + stock, tooltip, "Private", iconw, GTK_SIGNAL_FUNC(callback), user_data);\ } #else -#define toolbar_item(new_item, window, toolbar, stock, tooltip, xpm, callback) { \ +#define toolbar_item(new_item, window, toolbar, stock, tooltip, xpm, callback, user_data) { \ new_item = gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), \ - stock, tooltip, "Private", G_CALLBACK(callback), NULL, -1);\ + stock, tooltip, "Private", G_CALLBACK(callback), user_data, -1);\ } #endif /* GTK_MAJOR_VERSION */ @@ -395,63 +395,63 @@ toolbar_new(void) * between them is needed here (stop button is hidden by default) */ toolbar_item(new_button, window, main_tb, - ETHEREAL_STOCK_CAPTURE_START, "Start a new live capture...", capture_24_xpm, capture_prep_cb); + ETHEREAL_STOCK_CAPTURE_START, "Start a new live capture...", capture_24_xpm, capture_prep_cb, NULL); toolbar_item(stop_button, window, main_tb, - GTK_STOCK_STOP, "Stop the running live capture", stock_stop_24_xpm, capture_stop_cb); + GTK_STOCK_STOP, "Stop the running live capture", stock_stop_24_xpm, capture_stop_cb, NULL); toolbar_append_separator(main_tb); #endif /* HAVE_LIBPCAP */ toolbar_item(open_button, window, main_tb, - GTK_STOCK_OPEN, "Open a capture file...", stock_open_24_xpm, file_open_cmd_cb); + GTK_STOCK_OPEN, "Open a capture file...", stock_open_24_xpm, file_open_cmd_cb, NULL); toolbar_item(save_button, window, main_tb, - GTK_STOCK_SAVE, "Save this capture file...", stock_save_24_xpm, file_save_cmd_cb); + GTK_STOCK_SAVE, "Save this capture file...", stock_save_24_xpm, file_save_cmd_cb, NULL); toolbar_item(save_as_button, window, main_tb, - GTK_STOCK_SAVE_AS, "Save this capture file as...", stock_save_as_24_xpm, file_save_as_cmd_cb); + GTK_STOCK_SAVE_AS, "Save this capture file as...", stock_save_as_24_xpm, file_save_as_cmd_cb, NULL); toolbar_item(close_button, window, main_tb, - GTK_STOCK_CLOSE, "Close this capture file", stock_close_24_xpm, file_close_cmd_cb); + GTK_STOCK_CLOSE, "Close this capture file", stock_close_24_xpm, file_close_cmd_cb, NULL); toolbar_item(reload_button, window, main_tb, - GTK_STOCK_REFRESH, "Reload this capture file", stock_refresh_24_xpm, file_reload_cmd_cb); + GTK_STOCK_REFRESH, "Reload this capture file", stock_refresh_24_xpm, file_reload_cmd_cb, NULL); toolbar_item(print_button, window, main_tb, - GTK_STOCK_PRINT, "Print packet(s)...", stock_print_24_xpm, file_print_cmd_cb); + GTK_STOCK_PRINT, "Print packet(s)...", stock_print_24_xpm, file_print_cmd_cb, NULL); toolbar_append_separator(main_tb); toolbar_item(find_button, window, main_tb, - GTK_STOCK_FIND, "Find a packet...", stock_search_24_xpm, find_frame_cb); + GTK_STOCK_FIND, "Find a packet...", stock_search_24_xpm, find_frame_cb, NULL); toolbar_item(history_back_button, window, main_tb, - GTK_STOCK_GO_BACK, "Go back in packet history", stock_left_arrow_24_xpm, history_back_cb); + GTK_STOCK_GO_BACK, "Go back in packet history", stock_left_arrow_24_xpm, history_back_cb, NULL); toolbar_item(history_forward_button, window, main_tb, - GTK_STOCK_GO_FORWARD, "Go forward in packet history", stock_right_arrow_24_xpm, history_forward_cb); + GTK_STOCK_GO_FORWARD, "Go forward in packet history", stock_right_arrow_24_xpm, history_forward_cb, NULL); toolbar_item(go_to_button, window, main_tb, - GTK_STOCK_JUMP_TO, "Go to the packet with number...", stock_jump_to_24_xpm, goto_frame_cb); + GTK_STOCK_JUMP_TO, "Go to the packet with number...", stock_jump_to_24_xpm, goto_frame_cb, NULL); toolbar_item(go_to_top_button, window, main_tb, - GTK_STOCK_GOTO_TOP, "Go to the first packet", stock_top_24_xpm, goto_top_frame_cb); + GTK_STOCK_GOTO_TOP, "Go to the first packet", stock_top_24_xpm, goto_top_frame_cb, NULL); toolbar_item(go_to_bottom_button, window, main_tb, - GTK_STOCK_GOTO_BOTTOM, "Go to the last packet", stock_bottom_24_xpm, goto_bottom_frame_cb); + GTK_STOCK_GOTO_BOTTOM, "Go to the last packet", stock_bottom_24_xpm, goto_bottom_frame_cb, NULL); toolbar_append_separator(main_tb); toolbar_item(zoom_in_button, window, main_tb, - GTK_STOCK_ZOOM_IN, "Zoom in", stock_zoom_in_24_xpm, view_zoom_in_cb); + GTK_STOCK_ZOOM_IN, "Zoom in", stock_zoom_in_24_xpm, view_zoom_in_cb, NULL); toolbar_item(zoom_out_button, window, main_tb, - GTK_STOCK_ZOOM_OUT, "Zoom out", stock_zoom_out_24_xpm, view_zoom_out_cb); + GTK_STOCK_ZOOM_OUT, "Zoom out", stock_zoom_out_24_xpm, view_zoom_out_cb, NULL); toolbar_item(zoom_100_button, window, main_tb, - GTK_STOCK_ZOOM_100, "Zoom 100%", stock_zoom_1_24_xpm, view_zoom_100_cb); + GTK_STOCK_ZOOM_100, "Zoom 100%", stock_zoom_1_24_xpm, view_zoom_100_cb, NULL); toolbar_append_separator(main_tb); #ifdef HAVE_LIBPCAP toolbar_item(capture_filter_button, window, main_tb, - ETHEREAL_STOCK_CAPTURE_FILTER, "Edit capture filter...", cfilter_24_xpm, cfilter_dialog_cb); + ETHEREAL_STOCK_CAPTURE_FILTER, "Edit capture filter...", cfilter_24_xpm, cfilter_dialog_cb, NULL); #endif /* HAVE_LIBPCAP */ toolbar_item(display_filter_button, window, main_tb, - ETHEREAL_STOCK_DISPLAY_FILTER, "Edit/apply display filter...", dfilter_24_xpm, dfilter_dialog_cb); + ETHEREAL_STOCK_DISPLAY_FILTER, "Edit/apply display filter...", dfilter_24_xpm, dfilter_dialog_cb, NULL); toolbar_item(color_display_button, window, main_tb, - GTK_STOCK_SELECT_COLOR, "Edit coloring rules...", stock_colorselector_24_xpm, color_display_cb); + GTK_STOCK_SELECT_COLOR, "Edit coloring rules...", stock_colorselector_24_xpm, color_display_cb, NULL); /* the preference button uses it's own Stock icon label "Prefs", as "Preferences" is too long */ toolbar_item(prefs_button, window, main_tb, - ETHEREAL_STOCK_PREFS, "Edit preferences...", stock_preferences_24_xpm, prefs_cb); + ETHEREAL_STOCK_PREFS, "Edit preferences...", stock_preferences_24_xpm, prefs_cb, NULL); toolbar_append_separator(main_tb); toolbar_item(help_button, window, main_tb, - GTK_STOCK_HELP, "Show some help...", stock_help_24_xpm, help_cb); + GTK_STOCK_HELP, "Show some help...", stock_help_24_xpm, topic_cb, GINT_TO_POINTER(HELP_CONTENT)); /* disable all "sensitive" items by default */ toolbar_init = TRUE; diff --git a/gtk/webbrowser.c b/gtk/webbrowser.c index 7c51d4c1ae..5632ca87ea 100644 --- a/gtk/webbrowser.c +++ b/gtk/webbrowser.c @@ -284,6 +284,8 @@ browser_open_data_file(const gchar *filename) /* build filename */ file_path = g_strdup_printf("%s/%s", get_datafile_dir(), filename); + /* XXX - check, if the file is really existing, otherwise display a simple_dialog about the problem */ + /* convert filename to uri */ uri = filename2uri(file_path);