From 8e2a930023b7d8c86d8be142a01679a57c25e411 Mon Sep 17 00:00:00 2001 From: Ulf Lamping Date: Wed, 21 Jan 2004 21:19:34 +0000 Subject: implemented dlg_button_row_new to get a standard function for layouting the dialog buttons, and use it where appropriate. This will help us with the GTK1/2 conflict on button layouts and will also result in a more consistent look of the dialogs at all. svn path=/trunk/; revision=9771 --- gtk/ansi_a_stat.c | 25 ++---- gtk/ansi_map_stat.c | 25 ++---- gtk/bootp_stat.c | 27 ++---- gtk/capture_dlg.c | 16 +--- gtk/capture_info_dlg.c | 17 ++-- gtk/capture_prefs.c | 48 ++++------ gtk/color_dlg.c | 78 +++++----------- gtk/dcerpc_stat.c | 21 ++--- gtk/decode_as_dlg.c | 65 ++++++-------- gtk/dfilter_expr_dlg.c | 27 ++---- gtk/display_opts.c | 23 ++--- gtk/dlg_utils.c | 217 ++++++++++++++++++++++++++++++++++++++++++++- gtk/dlg_utils.h | 6 +- gtk/fc_stat.c | 27 ++---- gtk/filter_prefs.c | 40 ++++----- gtk/find_dlg.c | 22 ++--- gtk/goto_dlg.c | 16 +--- gtk/gsm_a_stat.c | 25 ++---- gtk/help_dlg.c | 14 ++- gtk/http_stat.c | 23 ++--- gtk/isup_stat.c | 25 ++---- gtk/ldap_stat.c | 27 ++---- gtk/main.c | 11 +-- gtk/plugins_dlg.c | 38 +++----- gtk/prefs_dlg.c | 26 ++---- gtk/print_dlg.c | 19 ++-- gtk/proto_dlg.c | 27 ++---- gtk/proto_draw.c | 20 ++--- gtk/proto_hier_stats_dlg.c | 44 ++++----- gtk/rpc_stat.c | 27 ++---- gtk/simple_dialog.c | 31 +++---- gtk/smb_stat.c | 27 ++---- gtk/summary_dlg.c | 15 +--- gtk/supported_protos_dlg.c | 19 ++-- gtk/tap_dfilter_dlg.c | 23 ++--- gtk/tcp_graph.c | 39 ++++---- gtk/wsp_stat.c | 23 ++--- 37 files changed, 559 insertions(+), 644 deletions(-) (limited to 'gtk') diff --git a/gtk/ansi_a_stat.c b/gtk/ansi_a_stat.c index f5ce8c2f2a..383f08726d 100644 --- a/gtk/ansi_a_stat.c +++ b/gtk/ansi_a_stat.c @@ -5,7 +5,7 @@ * * MUCH code modified from service_response_time_table.c. * - * $Id: ansi_a_stat.c,v 1.8 2004/01/21 03:54:28 ulfl Exp $ + * $Id: ansi_a_stat.c,v 1.9 2004/01/21 21:19:31 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -302,7 +302,7 @@ ansi_a_stat_gtk_win_create( GtkWidget *column_lb; GtkWidget *vbox; GtkWidget *bt_close; - GtkWidget *hbuttonbox; + GtkWidget *bbox; GtkWidget *dialog_vbox; GtkWidget *dialog_action_area; @@ -319,21 +319,12 @@ ansi_a_stat_gtk_win_create( gtk_widget_show(dialog_action_area); gtk_container_set_border_width(GTK_CONTAINER(dialog_action_area), 10); - hbuttonbox = gtk_hbutton_box_new(); - gtk_widget_ref(hbuttonbox); - OBJECT_SET_DATA_FULL(dlg_p->win, "hbuttonbox", hbuttonbox, - gtk_widget_unref); - gtk_widget_show(hbuttonbox); - gtk_box_pack_start(GTK_BOX(dialog_action_area), hbuttonbox, FALSE, FALSE, 0); - gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbuttonbox), 0); - - bt_close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - gtk_widget_ref(bt_close); - OBJECT_SET_DATA_FULL(dlg_p->win, "bt_close", bt_close, gtk_widget_unref); - gtk_widget_show(bt_close); - gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_close); - GTK_WIDGET_SET_FLAGS(bt_close, GTK_CAN_DEFAULT); + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + gtk_box_pack_start(GTK_BOX(dialog_action_area), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); + + bt_close = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); + gtk_widget_grab_default(bt_close); SIGNAL_CONNECT(bt_close, "clicked", ansi_a_stat_gtk_dlg_close_cb, dlg_p); vbox = gtk_vbox_new(FALSE, 0); diff --git a/gtk/ansi_map_stat.c b/gtk/ansi_map_stat.c index c7fbbfadeb..a6db667b93 100644 --- a/gtk/ansi_map_stat.c +++ b/gtk/ansi_map_stat.c @@ -5,7 +5,7 @@ * * MUCH code modified from service_response_time_table.c. * - * $Id: ansi_map_stat.c,v 1.11 2004/01/21 03:54:28 ulfl Exp $ + * $Id: ansi_map_stat.c,v 1.12 2004/01/21 21:19:31 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -275,7 +275,7 @@ ansi_map_stat_gtk_win_create( GtkWidget *column_lb; GtkWidget *vbox; GtkWidget *bt_close; - GtkWidget *hbuttonbox; + GtkWidget *bbox; GtkWidget *dialog_vbox; GtkWidget *dialog_action_area; @@ -292,21 +292,12 @@ ansi_map_stat_gtk_win_create( gtk_widget_show(dialog_action_area); gtk_container_set_border_width(GTK_CONTAINER(dialog_action_area), 10); - hbuttonbox = gtk_hbutton_box_new(); - gtk_widget_ref(hbuttonbox); - OBJECT_SET_DATA_FULL(dlg_p->win, "hbuttonbox", hbuttonbox, - gtk_widget_unref); - gtk_widget_show(hbuttonbox); - gtk_box_pack_start(GTK_BOX(dialog_action_area), hbuttonbox, FALSE, FALSE, 0); - gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbuttonbox), 0); - - bt_close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - gtk_widget_ref(bt_close); - OBJECT_SET_DATA_FULL(dlg_p->win, "bt_close", bt_close, gtk_widget_unref); - gtk_widget_show(bt_close); - gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_close); - GTK_WIDGET_SET_FLAGS(bt_close, GTK_CAN_DEFAULT); + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + gtk_box_pack_start(GTK_BOX(dialog_action_area), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); + + bt_close = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); + gtk_widget_grab_default(bt_close); SIGNAL_CONNECT(bt_close, "clicked", ansi_map_stat_gtk_dlg_close_cb, dlg_p); vbox = gtk_vbox_new(FALSE, 0); diff --git a/gtk/bootp_stat.c b/gtk/bootp_stat.c index fd21c96323..4ee74a86d1 100644 --- a/gtk/bootp_stat.c +++ b/gtk/bootp_stat.c @@ -1,7 +1,7 @@ /* bootp_stat.c * boop_stat 2003 Jean-Michel FAYARD * - * $Id: bootp_stat.c,v 1.13 2004/01/21 03:54:28 ulfl Exp $ + * $Id: bootp_stat.c,v 1.14 2004/01/21 21:19:31 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -322,26 +322,17 @@ gtk_dhcpstat_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(filter_box); /* button box */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); - SIGNAL_CONNECT_OBJECT(start_button, "clicked", + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); + SIGNAL_CONNECT_OBJECT(start_button, "clicked", dhcp_start_button_clicked, NULL); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); - SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); + + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); + SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/capture_dlg.c b/gtk/capture_dlg.c index 88c075a87a..6df849f6c0 100644 --- a/gtk/capture_dlg.c +++ b/gtk/capture_dlg.c @@ -1,7 +1,7 @@ /* capture_dlg.c * Routines for packet capture windows * - * $Id: capture_dlg.c,v 1.95 2004/01/21 03:54:28 ulfl Exp $ + * $Id: capture_dlg.c,v 1.96 2004/01/21 21:19:31 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -643,24 +643,16 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(t_resolv_cb); /* Button row: OK and cancel buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL); gtk_container_add(GTK_CONTAINER(main_vb), bbox); gtk_widget_show(bbox); - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); SIGNAL_CONNECT(ok_bt, "clicked", capture_prep_ok_cb, cap_open_w); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), ok_bt, TRUE, TRUE, 0); gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); - cancel_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", capture_prep_close_cb, cap_open_w); - GTK_WIDGET_SET_FLAGS(cancel_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), cancel_bt, TRUE, TRUE, 0); - gtk_widget_show(cancel_bt); /* Attach pointers to needed widgets to the capture prefs window/object */ OBJECT_SET_DATA(cap_open_w, E_CAP_IFACE_KEY, if_cb); diff --git a/gtk/capture_info_dlg.c b/gtk/capture_info_dlg.c index 74657955b3..56265aaf26 100644 --- a/gtk/capture_info_dlg.c +++ b/gtk/capture_info_dlg.c @@ -1,7 +1,7 @@ /* capture_info_dlg.c * Routines for packet capture info dialog * - * $Id: capture_info_dlg.c,v 1.10 2004/01/21 03:54:29 ulfl Exp $ + * $Id: capture_info_dlg.c,v 1.11 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -88,7 +88,7 @@ capture_info *cinfo) { unsigned int i; GtkWidget *main_vb, *stop_bt, *counts_tb; - GtkWidget *counts_fr, *running_tb, *running_label; + GtkWidget *counts_fr, *running_tb, *running_label, *bbox; capture_info_ui_t *info; info = g_malloc0(sizeof(capture_info_ui_t)); @@ -202,17 +202,16 @@ capture_info *cinfo) /* allow user to either click a stop button, or the close button on the window to stop a capture in progress. */ - stop_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_STOP); + bbox = dlg_button_row_new(GTK_STOCK_STOP, NULL); + gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 3); + gtk_widget_show(bbox); + + stop_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_STOP); + gtk_widget_grab_default(stop_bt); SIGNAL_CONNECT(stop_bt, "clicked", capture_info_stop_cb, cinfo->callback_data); SIGNAL_CONNECT(info->cap_w, "delete_event", capture_info_delete_cb, cinfo->callback_data); - gtk_box_pack_start(GTK_BOX(main_vb), stop_bt, FALSE, FALSE, 3); - GTK_WIDGET_SET_FLAGS(stop_bt, GTK_CAN_DEFAULT); - gtk_widget_grab_default(stop_bt); - GTK_WIDGET_SET_FLAGS(stop_bt, GTK_CAN_DEFAULT); - gtk_widget_grab_default(stop_bt); - gtk_widget_show(stop_bt); /* Catch the "key_press_event" signal in the window, so that we can catch the ESC key being pressed and act as if the "Stop" button had diff --git a/gtk/capture_prefs.c b/gtk/capture_prefs.c index 47c44efcff..3575db971d 100644 --- a/gtk/capture_prefs.c +++ b/gtk/capture_prefs.c @@ -1,7 +1,7 @@ /* capture_prefs.c * Dialog box for capture preferences * - * $Id: capture_prefs.c,v 1.26 2004/01/21 03:54:29 ulfl Exp $ + * $Id: capture_prefs.c,v 1.27 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -218,7 +218,7 @@ static void ifopts_edit_cb(GtkWidget *w, gpointer data _U_) { GtkWidget *ifopts_edit_dlg, *cur_scr_win, *if_scr_win, *main_hb, *main_tb, - *cur_opts_fr, *ed_opts_fr, + *cur_opts_fr, *ed_opts_fr, *main_vb, *if_clist, *if_descr_lb, *if_hide_lb, *bbox, *ok_bt, *cancel_bt; gchar *cur_titles[IFOPTS_CLIST_COLS] = { "dev-nodisp", "Interface", @@ -237,18 +237,20 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_) } /* create a new dialog */ - ifopts_edit_dlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(ifopts_edit_dlg), - "Ethereal: Preferences: Interface Options"); + ifopts_edit_dlg = dlg_window_new("Ethereal: Preferences: Interface Options"); + /*gtk_window_set_title(GTK_WINDOW(ifopts_edit_dlg), + "Ethereal: Preferences: Interface Options");*/ SIGNAL_CONNECT(ifopts_edit_dlg, "destroy", ifopts_edit_destroy_cb, NULL); SIGNAL_CONNECT(ifopts_edit_dlg, "realize", window_icon_realize_cb, NULL); - gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(ifopts_edit_dlg)->vbox), - 5); + main_vb = gtk_vbox_new(FALSE, 1); + gtk_container_border_width(GTK_CONTAINER(main_vb), 5); + gtk_container_add(GTK_CONTAINER(ifopts_edit_dlg), main_vb); + gtk_widget_show(main_vb); + /* create current options frame */ cur_opts_fr = gtk_frame_new("Current options"); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(ifopts_edit_dlg)->vbox), - cur_opts_fr); + gtk_container_add(GTK_CONTAINER(main_vb), cur_opts_fr); gtk_widget_show(cur_opts_fr); /* create a scrolled window to pack the current options CList widget into */ @@ -276,8 +278,7 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_) /* create edit options frame */ ed_opts_fr = gtk_frame_new("Edit interface options"); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(ifopts_edit_dlg)->vbox), - ed_opts_fr); + gtk_container_add(GTK_CONTAINER(main_vb), ed_opts_fr); gtk_widget_show(ed_opts_fr); main_hb = gtk_hbox_new(TRUE, 5); @@ -341,29 +342,16 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_) gtk_widget_show(if_hide_cb); /* button row: OK and Cancel buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ifopts_edit_dlg)->action_area), bbox, - TRUE, FALSE, 0); - gtk_widget_show(bbox); - - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL); + gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); - /* Connect the OK button callback */ + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); + gtk_widget_grab_default(ok_bt); SIGNAL_CONNECT(ok_bt, "clicked", ifopts_edit_ok_cb, ifopts_edit_dlg); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_container_add(GTK_CONTAINER(bbox), ok_bt); - gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); - - cancel_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); - /* Connect the Cancel button callback to destroy the widget */ + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", ifopts_edit_close_cb, ifopts_edit_dlg); - GTK_WIDGET_SET_FLAGS(cancel_bt, GTK_CAN_DEFAULT); - gtk_container_add(GTK_CONTAINER(bbox), cancel_bt); - gtk_widget_show(cancel_bt); /* Call a handler when we're destroyed, so we can inform our caller, if any, that we've been destroyed. */ diff --git a/gtk/color_dlg.c b/gtk/color_dlg.c index 9165497bd9..0ed6b08269 100644 --- a/gtk/color_dlg.c +++ b/gtk/color_dlg.c @@ -1,7 +1,7 @@ /* color_dlg.c * Definitions for dialog boxes for color filters * - * $Id: color_dlg.c,v 1.34 2004/01/21 03:54:29 ulfl Exp $ + * $Id: color_dlg.c,v 1.35 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -439,43 +439,20 @@ colorize_dialog_new (char *filter) gtk_widget_set_sensitive (color_filter_down, FALSE); - /* button_ok_hbox is bottom button row */ - button_ok_hbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (button_ok_hbox), GTK_BUTTONBOX_END); - gtk_widget_ref (button_ok_hbox); - OBJECT_SET_DATA_FULL(color_win, "button_ok_hbox", button_ok_hbox, gtk_widget_unref); - gtk_widget_show (button_ok_hbox); + /* 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); gtk_box_pack_start (GTK_BOX (dlg_vbox), button_ok_hbox, FALSE, FALSE, 5); + gtk_widget_show(button_ok_hbox); - color_ok = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); - gtk_widget_ref (color_ok); - OBJECT_SET_DATA_FULL(color_win, "color_ok", color_ok, gtk_widget_unref); - gtk_widget_show (color_ok); - gtk_box_pack_start (GTK_BOX (button_ok_hbox), color_ok, FALSE, FALSE, 0); - gtk_tooltips_set_tip (tooltips, color_ok, ("Accept filter list; apply changes"), NULL); - - color_apply = BUTTON_NEW_FROM_STOCK(GTK_STOCK_APPLY); - gtk_widget_ref (color_apply); - OBJECT_SET_DATA_FULL(color_win, "color_apply", color_apply, gtk_widget_unref); - gtk_widget_show (color_apply); - gtk_box_pack_start (GTK_BOX (button_ok_hbox), color_apply, FALSE, FALSE, 0); - gtk_tooltips_set_tip (tooltips, color_apply, ("Apply filters in list"), NULL); - - color_save = BUTTON_NEW_FROM_STOCK(GTK_STOCK_SAVE); - gtk_widget_ref(color_save); - OBJECT_SET_DATA_FULL(color_win, "color_save", color_save, gtk_widget_unref); - gtk_widget_show(color_save); - gtk_box_pack_start(GTK_BOX (button_ok_hbox), color_save, FALSE, FALSE, 0); - gtk_tooltips_set_tip(tooltips, color_save, ("Save all filters to disk"), NULL); - - /* button changed from cancel to close, as changes are currently not reverted */ - /* color_cancel = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); */ - color_cancel = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - gtk_widget_ref (color_cancel); - OBJECT_SET_DATA_FULL(color_win, "color_cancel", color_cancel, gtk_widget_unref); - gtk_widget_show (color_cancel); - gtk_box_pack_start (GTK_BOX (button_ok_hbox), color_cancel, TRUE, FALSE, 0); - gtk_tooltips_set_tip (tooltips, color_cancel, ("No more filter changes; don't apply"), NULL); + color_ok = OBJECT_GET_DATA(button_ok_hbox, GTK_STOCK_OK); + gtk_widget_grab_default(color_ok); + + color_apply = OBJECT_GET_DATA(button_ok_hbox, GTK_STOCK_APPLY); + + color_save = OBJECT_GET_DATA(button_ok_hbox, GTK_STOCK_SAVE); + +/* color_cancel = OBJECT_GET_DATA(button_ok_hbox, GTK_STOCK_CANCEL);*/ + color_cancel = OBJECT_GET_DATA(button_ok_hbox, GTK_STOCK_CLOSE); /* signals and such */ SIGNAL_CONNECT(color_win, "destroy", color_destroy_cb, NULL); @@ -1185,7 +1162,7 @@ edit_color_filter_dialog_new(GtkWidget *color_filters, GtkWidget *colorize_filter_fg; GtkWidget *colorize_filter_bg; - GtkWidget *button_hbox; + GtkWidget *bbox; GtkWidget *edit_color_filter_ok; GtkWidget *edit_color_filter_cancel; @@ -1342,28 +1319,17 @@ edit_color_filter_dialog_new(GtkWidget *color_filters, gtk_tooltips_set_tip (tooltips, colorize_filter_bg, ("Select background color for data display"), NULL); - /* button hbox (placement defaults coming from main.c) */ - button_hbox = gtk_hbutton_box_new(); - gtk_widget_ref (button_hbox); - OBJECT_SET_DATA_FULL(edit_dialog, "button_hbox", button_hbox, gtk_widget_unref); - gtk_container_set_border_width (GTK_CONTAINER (button_hbox), 0); - gtk_widget_show (button_hbox); - gtk_box_pack_start (GTK_BOX (dialog_vbox), button_hbox, FALSE, FALSE, 5); + /* button box */ + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL); + gtk_box_pack_start(GTK_BOX(dialog_vbox), bbox, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (bbox), 0); + gtk_widget_show(bbox); - edit_color_filter_ok = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); - gtk_widget_ref (edit_color_filter_ok); - OBJECT_SET_DATA_FULL(edit_dialog, "edit_color_filter_ok", edit_color_filter_ok, - gtk_widget_unref); - gtk_widget_show (edit_color_filter_ok); - gtk_box_pack_start (GTK_BOX (button_hbox), edit_color_filter_ok, TRUE, FALSE, 0); + edit_color_filter_ok = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); + gtk_widget_grab_default(edit_color_filter_ok); gtk_tooltips_set_tip (tooltips, edit_color_filter_ok, ("Accept filter color change"), NULL); - edit_color_filter_cancel = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); - gtk_widget_ref (edit_color_filter_cancel); - OBJECT_SET_DATA_FULL(edit_dialog, "edit_color_filter_cancel", - edit_color_filter_cancel, gtk_widget_unref); - gtk_widget_show (edit_color_filter_cancel); - gtk_box_pack_start (GTK_BOX (button_hbox), edit_color_filter_cancel, TRUE, FALSE, 0); + edit_color_filter_cancel = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); gtk_tooltips_set_tip (tooltips, edit_color_filter_cancel, ("Reject filter color change"), NULL); diff --git a/gtk/dcerpc_stat.c b/gtk/dcerpc_stat.c index 79d4910d28..1e1f7d3c72 100644 --- a/gtk/dcerpc_stat.c +++ b/gtk/dcerpc_stat.c @@ -1,7 +1,7 @@ /* dcerpc_stat.c * dcerpc_stat 2002 Ronnie Sahlberg * - * $Id: dcerpc_stat.c,v 1.43 2004/01/21 03:54:29 ulfl Exp $ + * $Id: dcerpc_stat.c,v 1.44 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -643,26 +643,17 @@ gtk_dcerpcstat_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(filter_box); /* button box */ - bbox=gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); SIGNAL_CONNECT_OBJECT(start_button, "clicked", dcerpcstat_start_button_clicked, NULL); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/decode_as_dlg.c b/gtk/decode_as_dlg.c index 07ffff29f9..a57d4d23c2 100644 --- a/gtk/decode_as_dlg.c +++ b/gtk/decode_as_dlg.c @@ -1,6 +1,6 @@ /* decode_as_dlg.c * - * $Id: decode_as_dlg.c,v 1.34 2004/01/10 16:27:40 ulfl Exp $ + * $Id: decode_as_dlg.c,v 1.35 2004/01/21 21:19:32 ulfl Exp $ * * Routines to modify dissector tables on the fly. * @@ -459,7 +459,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, *button, *scrolled_window; + GtkWidget *main_vb, *bbox, *ok_bt, *clear_bt, *scrolled_window; gchar *titles[E_LIST_D_COLUMNS] = { "Table", "Port", "Initial", "Current" }; @@ -536,27 +536,25 @@ decode_show_cb (GtkWidget * w _U_, gpointer data _U_) WIDGET_SET_SIZE(scrolled_window, -1, E_DECODE_MIN_HEIGHT); } - /* Button row: OK and reset buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); - gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 10); + /* Button row */ + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CLEAR, NULL); + gtk_container_add(GTK_CONTAINER(main_vb), bbox); + gtk_widget_show(bbox); - button = gtk_button_new_with_label("Reset Changes"); - SIGNAL_CONNECT(button, "clicked", decode_show_reset_cb, decode_show_w); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); + SIGNAL_CONNECT(ok_bt, "clicked", decode_show_ok_cb, decode_show_w); + gtk_widget_grab_default(ok_bt); + + clear_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLEAR); + SIGNAL_CONNECT(clear_bt, "clicked", decode_show_reset_cb, decode_show_w); + #if GTK_MAJOR_VERSION < 2 - gtk_widget_set_sensitive(button, (list->rows != 0)); + gtk_widget_set_sensitive(clear_bt, (list->rows != 0)); #else - gtk_widget_set_sensitive(button, + gtk_widget_set_sensitive(clear_bt, gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter)); #endif - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); - SIGNAL_CONNECT(ok_bt, "clicked", decode_show_ok_cb, decode_show_w); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), ok_bt, FALSE, FALSE, 0); - gtk_widget_grab_default(ok_bt); + dlg_set_cancel(decode_show_w, ok_bt); gtk_widget_show_all(decode_show_w); @@ -1477,35 +1475,28 @@ decode_as_cb (GtkWidget * w _U_, gpointer data _U_) button_vb = decode_add_yes_no(); gtk_box_pack_start(GTK_BOX(format_hb), button_vb, TRUE, TRUE, 10); + button = gtk_button_new_with_label("Show Current"); + SIGNAL_CONNECT(button, "clicked", decode_show_cb, decode_w); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(button_vb), button, FALSE, FALSE, 0); + decode_add_notebook(format_hb); } - /* Button row: OK, Apply and cancel buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); - gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 10); + /* Button row */ + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL); + gtk_container_add(GTK_CONTAINER(main_vb), bbox); + gtk_widget_show(bbox); - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); SIGNAL_CONNECT(ok_bt, "clicked", decode_ok_cb, decode_w); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), ok_bt, FALSE, FALSE, 0); gtk_widget_grab_default(ok_bt); - apply_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_APPLY); + apply_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_APPLY); SIGNAL_CONNECT(apply_bt, "clicked", decode_apply_cb, decode_w); - GTK_WIDGET_SET_FLAGS(apply_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), apply_bt, FALSE, FALSE, 0); - - button = gtk_button_new_with_label("Show Current"); - SIGNAL_CONNECT(button, "clicked", decode_show_cb, decode_w); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - cancel_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", decode_cancel_cb, decode_w); - GTK_WIDGET_SET_FLAGS(cancel_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_bt, FALSE, FALSE, 0); /* * Catch the "key_press_event" signal in the window, so that diff --git a/gtk/dfilter_expr_dlg.c b/gtk/dfilter_expr_dlg.c index 690fbe5bb0..0a990a90f1 100644 --- a/gtk/dfilter_expr_dlg.c +++ b/gtk/dfilter_expr_dlg.c @@ -7,7 +7,7 @@ * Copyright 2000, Jeffrey C. Foster and * Guy Harris * - * $Id: dfilter_expr_dlg.c,v 1.45 2004/01/10 16:27:41 ulfl Exp $ + * $Id: dfilter_expr_dlg.c,v 1.46 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -1090,7 +1090,7 @@ dfilter_expr_dlg_new(GtkWidget *filter_te) GtkWidget *range_label, *range_entry; GtkWidget *value_vb; GtkWidget *value_label, *value_entry, *value_list_scrolled_win, *value_list; - GtkWidget *list_bb, *alignment, *accept_bt, *close_bt; + GtkWidget *list_bb, *accept_bt, *close_bt; header_field_info *hfinfo; int i; protocol_t *protocol; @@ -1414,30 +1414,19 @@ dfilter_expr_dlg_new(GtkWidget *filter_te) gtk_widget_show_all(tree); - list_bb = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(list_bb), GTK_BUTTONBOX_START); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(list_bb), 5); - gtk_container_add(GTK_CONTAINER(main_vb), list_bb); + + list_bb = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL); + gtk_box_pack_start(GTK_BOX(main_vb), list_bb, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (list_bb), 0); gtk_widget_show(list_bb); - accept_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + accept_bt = OBJECT_GET_DATA(list_bb, GTK_STOCK_OK); gtk_widget_set_sensitive(accept_bt, FALSE); SIGNAL_CONNECT(accept_bt, "clicked", dfilter_expr_dlg_accept_cb, filter_te); - GTK_WIDGET_SET_FLAGS(accept_bt, GTK_CAN_DEFAULT); - alignment = gtk_alignment_new(0.0, 0.5, 1.0, 0.0); - gtk_container_add(GTK_CONTAINER(alignment), accept_bt); - gtk_box_pack_start(GTK_BOX(list_bb), alignment, TRUE, TRUE, 0); gtk_widget_grab_default(accept_bt); - gtk_widget_show(accept_bt); - gtk_widget_show(alignment); - close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + close_bt = OBJECT_GET_DATA(list_bb, GTK_STOCK_CANCEL); SIGNAL_CONNECT(close_bt, "clicked", dfilter_expr_dlg_cancel_cb, window); - alignment = gtk_alignment_new(0.0, 0.5, 1.0, 0.0); - gtk_container_add(GTK_CONTAINER(alignment), close_bt); - gtk_box_pack_start(GTK_BOX(list_bb), alignment, TRUE, TRUE, 0); - gtk_widget_show(close_bt); - gtk_widget_show(alignment); /* Catch the "activate" signal on the range and value text entries, so that if the user types Return there, we act as if the "Accept" diff --git a/gtk/display_opts.c b/gtk/display_opts.c index 92334425ef..0a87ea24c8 100644 --- a/gtk/display_opts.c +++ b/gtk/display_opts.c @@ -1,7 +1,7 @@ /* display_opts.c * Routines for packet display windows * - * $Id: display_opts.c,v 1.35 2004/01/19 03:46:42 ulfl Exp $ + * $Id: display_opts.c,v 1.36 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -126,30 +126,19 @@ display_opt_cb(GtkWidget *w _U_, gpointer d _U_) { gtk_widget_show(button); /* Button row: OK, Apply, and Cancel buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); - gtk_container_add(GTK_CONTAINER(main_vb), bbox); + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL); + gtk_box_pack_start(GTK_BOX(dialog_action_area), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); SIGNAL_CONNECT(ok_bt, "clicked", display_opt_ok_cb, display_opt_w); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), ok_bt, TRUE, TRUE, 0); gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); - apply_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_APPLY); + apply_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_APPLY); SIGNAL_CONNECT(apply_bt, "clicked", display_opt_apply_cb, display_opt_w); - GTK_WIDGET_SET_FLAGS(apply_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), apply_bt, TRUE, TRUE, 0); - gtk_widget_show(apply_bt); - cancel_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", display_opt_close_cb, display_opt_w); - GTK_WIDGET_SET_FLAGS(cancel_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), cancel_bt, TRUE, TRUE, 0); - gtk_widget_show(cancel_bt); /* Catch the "key_press_event" signal in the window, so that we can catch the ESC key being pressed and act as if the "Cancel" button had diff --git a/gtk/dlg_utils.c b/gtk/dlg_utils.c index 941056f7e7..e4f23cf40b 100644 --- a/gtk/dlg_utils.c +++ b/gtk/dlg_utils.c @@ -1,7 +1,7 @@ /* dlg_utils.c * Utilities to use when constructing dialogs * - * $Id: dlg_utils.c,v 1.15 2004/01/07 00:10:51 ulfl Exp $ + * $Id: dlg_utils.c,v 1.16 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -33,12 +33,227 @@ #include "ui_util.h" #include "compat_macros.h" +#include +#include +#include + static void dlg_activate (GtkWidget *widget, gpointer ok_button); static gint dlg_key_press (GtkWidget *widget, GdkEventKey *event, gpointer cancel_button); + + +/* create a button for the button row (helper for dlg_button_row_new) */ +static GtkWidget * +dlg_button_new(GtkWidget *button_hbox, gchar *stock_id) +{ + GtkWidget *button; + + button = BUTTON_NEW_FROM_STOCK(stock_id); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + OBJECT_SET_DATA(button_hbox, stock_id, button); + gtk_box_pack_start(GTK_BOX(button_hbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + return button; +} + + +/* create a button row for a dialog */ + +/* The purpose of this is, to have one place available, where all button rows + * from all dialogs are layouted. This will: + * + * a.) keep the button layout more consistent over the different dialogs + * b.) being able to switch between different button layouts, e.g.: + * GTK1 (e.g. win32) "OK" "Apply" "Cancel" + * GTK2 (e.g. GNOME) "Apply" "Cancel" "OK" + */ +GtkWidget * +dlg_button_row_new(gchar *stock_id_first, ...) +{ + gint buttons = 0; + GtkWidget *button_hbox; + va_list stock_id_list; + gchar *stock_id = stock_id_first; + + gchar *ok = NULL; + gchar *apply = NULL; + gchar *save = NULL; + gchar *cancel = NULL; + gchar *close = NULL; + gchar *clear = NULL; + gchar *stop = NULL; + gchar *create_stat = NULL; + gchar *help = NULL; + gchar *print = NULL; + gchar *find = NULL; + gchar *jump = NULL; + + + va_start(stock_id_list, stock_id_first); + + /* get all buttons needed */ + while(stock_id != NULL) { + if (strcmp(stock_id, GTK_STOCK_OK) == 0) { + ok = stock_id; + } else if (strcmp(stock_id, ETHEREAL_STOCK_CREATE_STAT) == 0) { + create_stat = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_APPLY) == 0) { + apply = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_SAVE) == 0) { + save = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_CANCEL) == 0) { + cancel = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_CLOSE) == 0) { + close = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_CLEAR) == 0) { + clear = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_STOP) == 0) { + stop = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_HELP) == 0) { + help = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_PRINT) == 0) { + print = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_FIND) == 0) { + find = stock_id; + } else if (strcmp(stock_id, GTK_STOCK_JUMP_TO) == 0) { + jump = stock_id; + } else { + /* we don't know that button! */ + g_assert_not_reached(); + } + buttons++; + stock_id = va_arg(stock_id_list, gchar *); + } + va_end(stock_id_list); + + /* we should have at least one button */ + g_assert(buttons); + + button_hbox = gtk_hbutton_box_new(); + + if (buttons == 1) { + /* if only one button, simply put it in the middle (default) */ + dlg_button_new(button_hbox, stock_id_first); + return button_hbox; + } else { + /* if more than one button, sort buttons from left to right /* + /* (the whole button cluster will then be right aligned) */ + gtk_button_box_set_layout (GTK_BUTTON_BOX(button_hbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(button_hbox), 5); + } + +#if /*!WIN32 ||*/ GTK_MAJOR_VERSION >= 2 + /* beware: sequence of buttons are important! */ + + /* XXX: this can be implemented more elegant of course, but it works as it should */ + if (buttons == 2) { + if (ok && cancel) { + dlg_button_new(button_hbox, cancel); + dlg_button_new(button_hbox, ok); + return button_hbox; + } + if (print && cancel) { + dlg_button_new(button_hbox, cancel); + dlg_button_new(button_hbox, print); + return button_hbox; + } + if (find && cancel) { + dlg_button_new(button_hbox, cancel); + dlg_button_new(button_hbox, find); + return button_hbox; + } + if (jump && cancel) { + dlg_button_new(button_hbox, cancel); + dlg_button_new(button_hbox, jump); + return button_hbox; + } + if (save && cancel) { + dlg_button_new(button_hbox, cancel); + dlg_button_new(button_hbox, save); + return button_hbox; + } + if (ok && clear) { + dlg_button_new(button_hbox, clear); + dlg_button_new(button_hbox, ok); + return button_hbox; + } + if (save && close) { + dlg_button_new(button_hbox, close); + dlg_button_new(button_hbox, save); + return button_hbox; + } + if (help && close) { + dlg_button_new(button_hbox, help); + dlg_button_new(button_hbox, close); + return button_hbox; + } + if (create_stat && cancel) { + dlg_button_new(button_hbox, cancel); + dlg_button_new(button_hbox, create_stat); + return button_hbox; + } + } + if (buttons == 3) { + if (ok && save && close) { + dlg_button_new(button_hbox, save); + dlg_button_new(button_hbox, close); + dlg_button_new(button_hbox, ok); + return button_hbox; + } + if (ok && apply && cancel) { + dlg_button_new(button_hbox, apply); + dlg_button_new(button_hbox, cancel); + dlg_button_new(button_hbox, ok); + return button_hbox; + } + if (apply && save && close) { + dlg_button_new(button_hbox, save); + dlg_button_new(button_hbox, close); + dlg_button_new(button_hbox, apply); + return button_hbox; + } + } + if (buttons == 4) { + if (ok && apply && save && cancel) { + dlg_button_new(button_hbox, save); + dlg_button_new(button_hbox, apply); + dlg_button_new(button_hbox, cancel); + dlg_button_new(button_hbox, ok); + return button_hbox; + } + if (ok && apply && save && close) { + dlg_button_new(button_hbox, save); + dlg_button_new(button_hbox, apply); + dlg_button_new(button_hbox, close); + dlg_button_new(button_hbox, ok); + return button_hbox; + } + } +#endif + + /* beware: sequence of buttons is important! */ + if (help != NULL) dlg_button_new(button_hbox, help); + if (ok != NULL) dlg_button_new(button_hbox, ok); + if (jump != NULL) dlg_button_new(button_hbox, jump); + if (find != NULL) dlg_button_new(button_hbox, find); + if (print != NULL) dlg_button_new(button_hbox, print); + if (create_stat != NULL) dlg_button_new(button_hbox, create_stat); + if (apply != NULL) dlg_button_new(button_hbox, apply); + if (save != NULL) dlg_button_new(button_hbox, save); + if (stop != NULL) dlg_button_new(button_hbox, stop); + if (close != NULL) dlg_button_new(button_hbox, close); + if (clear != NULL) dlg_button_new(button_hbox, clear); + if (cancel != NULL) dlg_button_new(button_hbox, cancel); + + /* GTK2: we don't know that button combination, add it to the above list! */ + /* g_assert_not_reached(); */ + return button_hbox; +} + + /* Create a dialog box window that belongs to Ethereal's main window. */ GtkWidget * dlg_window_new(const gchar *title) diff --git a/gtk/dlg_utils.h b/gtk/dlg_utils.h index 81a3adaacd..176e308f81 100644 --- a/gtk/dlg_utils.h +++ b/gtk/dlg_utils.h @@ -1,7 +1,7 @@ /* dlg_utils.h * Declarations of utilities to use when constructing dialogs * - * $Id: dlg_utils.h,v 1.8 2004/01/07 00:10:51 ulfl Exp $ + * $Id: dlg_utils.h,v 1.9 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -32,6 +32,10 @@ extern GtkWidget *dlg_window_new(const gchar *); main window. */ extern GtkWidget *file_selection_new(const gchar *); +/* Create a button row for a dialog */ +/* the button widgets will be available by OBJECT_GET_DATA(stock_id) */ +extern GtkWidget *dlg_button_row_new(gchar *stock_id_first, ...); + /* Set the "activate" signal for a widget to call a routine to activate the "OK" button for a dialog box. */ extern void dlg_set_activate(GtkWidget *widget, GtkWidget *ok_button); diff --git a/gtk/fc_stat.c b/gtk/fc_stat.c index 8b62523a26..f27a96e753 100644 --- a/gtk/fc_stat.c +++ b/gtk/fc_stat.c @@ -1,7 +1,7 @@ /* fc_stat.c * fc_stat 2003 Ronnie Sahlberg * - * $Id: fc_stat.c,v 1.20 2004/01/21 03:54:29 ulfl Exp $ + * $Id: fc_stat.c,v 1.21 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -276,26 +276,17 @@ gtk_fcstat_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(filter_box); /* button box */ - bbox=gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); - SIGNAL_CONNECT_OBJECT(start_button, "clicked", + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); + SIGNAL_CONNECT_OBJECT(start_button, "clicked", fcstat_start_button_clicked, NULL); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); - SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); + + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); + SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/filter_prefs.c b/gtk/filter_prefs.c index 03160a9c7a..88759f78aa 100644 --- a/gtk/filter_prefs.c +++ b/gtk/filter_prefs.c @@ -3,7 +3,7 @@ * (This used to be a notebook page under "Preferences", hence the * "prefs" in the file name.) * - * $Id: filter_prefs.c,v 1.50 2004/01/21 05:35:42 ulfl Exp $ + * $Id: filter_prefs.c,v 1.51 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -594,9 +594,19 @@ filter_dialog_new(GtkWidget *button, GtkWidget *parent_filter_te, /* button row */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + if (parent_filter_te != NULL) { + if (construct_args->wants_apply_button) { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CLOSE, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_SAVE, GTK_STOCK_CLOSE, NULL); + } + } else { + if (construct_args->wants_apply_button) { + bbox = dlg_button_row_new(GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CLOSE, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_SAVE, GTK_STOCK_CLOSE, NULL); + } + } gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); @@ -605,12 +615,9 @@ filter_dialog_new(GtkWidget *button, GtkWidget *parent_filter_te, * We have a filter text entry that we can fill in if * the "OK" button is clicked, so put in an "OK" button. */ - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); SIGNAL_CONNECT(ok_bt, "clicked", filter_dlg_ok_cb, NULL); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), ok_bt, TRUE, TRUE, 0); gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); /* Catch the "activate" signal on the filter name and filter expression text entries, so that if the user types Return @@ -622,24 +629,17 @@ filter_dialog_new(GtkWidget *button, GtkWidget *parent_filter_te, } if (construct_args->wants_apply_button) { - apply_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_APPLY); + apply_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_APPLY); SIGNAL_CONNECT(apply_bt, "clicked", filter_dlg_apply_cb, NULL); - GTK_WIDGET_SET_FLAGS(apply_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), apply_bt, TRUE, TRUE, 0); - gtk_widget_show(apply_bt); } - save_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_SAVE); + save_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_SAVE); SIGNAL_CONNECT(save_bt, "clicked", filter_dlg_save_cb, filter_list_p); - GTK_WIDGET_SET_FLAGS(save_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), save_bt, TRUE, TRUE, 0); - gtk_widget_show(save_bt); - close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); + close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); SIGNAL_CONNECT(close_bt, "clicked", filter_dlg_close_cb, main_w); - GTK_WIDGET_SET_FLAGS(close_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), close_bt, TRUE, TRUE, 0); - gtk_widget_show(close_bt); + if (parent_filter_te == NULL) + gtk_widget_grab_default(close_bt); /* * Catch the "key_press_event" signal in the window, so that we can diff --git a/gtk/find_dlg.c b/gtk/find_dlg.c index e83561bb13..45b8c40278 100644 --- a/gtk/find_dlg.c +++ b/gtk/find_dlg.c @@ -1,7 +1,7 @@ /* find_dlg.c * Routines for "find frame" window * - * $Id: find_dlg.c,v 1.42 2004/01/20 02:21:17 ulfl Exp $ + * $Id: find_dlg.c,v 1.43 2004/01/21 21:19:32 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -287,27 +287,17 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_) gtk_tooltips_set_tip (tooltips, case_cb, ("Search by mixed upper/lower case?"), NULL); gtk_widget_show(case_cb); - /* Button row: OK and cancel buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); - gtk_container_add(GTK_CONTAINER(main_vb), bbox); + /* Button row */ + 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); - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_FIND); SIGNAL_CONNECT(ok_bt, "clicked", find_frame_ok_cb, find_frame_w); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), ok_bt, TRUE, TRUE, 0); - gtk_tooltips_set_tip (tooltips, ok_bt, ("Perform search"), NULL); gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); - cancel_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", find_frame_close_cb, find_frame_w); - GTK_WIDGET_SET_FLAGS(cancel_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), cancel_bt, TRUE, TRUE, 0); - gtk_tooltips_set_tip (tooltips, cancel_bt, ("Cancel search and exit"), NULL); - gtk_widget_show(cancel_bt); /* Attach pointers to needed widgets to the capture prefs window/object */ OBJECT_SET_DATA(find_frame_w, E_FIND_FILT_KEY, filter_text_box); diff --git a/gtk/goto_dlg.c b/gtk/goto_dlg.c index 7938e04b52..1a7d8d8394 100644 --- a/gtk/goto_dlg.c +++ b/gtk/goto_dlg.c @@ -1,7 +1,7 @@ /* goto_dlg.c * Routines for "go to packet" window * - * $Id: goto_dlg.c,v 1.22 2004/01/10 16:27:41 ulfl Exp $ + * $Id: goto_dlg.c,v 1.23 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -74,24 +74,16 @@ goto_frame_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(fnumber_te); /* Button row: OK and cancel buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + 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); - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_JUMP_TO); SIGNAL_CONNECT(ok_bt, "clicked", goto_frame_ok_cb, goto_frame_w); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), ok_bt, TRUE, TRUE, 0); gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); - cancel_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", goto_frame_close_cb, goto_frame_w); - GTK_WIDGET_SET_FLAGS(cancel_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), cancel_bt, TRUE, TRUE, 0); - gtk_widget_show(cancel_bt); /* Attach pointers to needed widgets to the capture prefs window/object */ OBJECT_SET_DATA(goto_frame_w, E_GOTO_FNUMBER_KEY, fnumber_te); diff --git a/gtk/gsm_a_stat.c b/gtk/gsm_a_stat.c index be19909cdd..979fa01080 100644 --- a/gtk/gsm_a_stat.c +++ b/gtk/gsm_a_stat.c @@ -5,7 +5,7 @@ * * MUCH code modified from service_response_time_table.c. * - * $Id: gsm_a_stat.c,v 1.8 2004/01/21 03:54:29 ulfl Exp $ + * $Id: gsm_a_stat.c,v 1.9 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -385,7 +385,7 @@ gsm_a_stat_gtk_win_create( GtkWidget *column_lb; GtkWidget *vbox; GtkWidget *bt_close; - GtkWidget *hbuttonbox; + GtkWidget *bbox; GtkWidget *dialog_vbox; GtkWidget *dialog_action_area; @@ -402,22 +402,13 @@ gsm_a_stat_gtk_win_create( gtk_widget_show(dialog_action_area); gtk_container_set_border_width(GTK_CONTAINER(dialog_action_area), 10); - hbuttonbox = gtk_hbutton_box_new(); - gtk_widget_ref(hbuttonbox); - OBJECT_SET_DATA_FULL(dlg_p->win, "hbuttonbox", hbuttonbox, - gtk_widget_unref); - gtk_widget_show(hbuttonbox); - gtk_box_pack_start(GTK_BOX(dialog_action_area), hbuttonbox, FALSE, FALSE, 0); - gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbuttonbox), 0); - - bt_close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - gtk_widget_ref(bt_close); - OBJECT_SET_DATA_FULL(dlg_p->win, "bt_close", bt_close, gtk_widget_unref); - gtk_widget_show(bt_close); - gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_close); - GTK_WIDGET_SET_FLAGS(bt_close, GTK_CAN_DEFAULT); + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + gtk_box_pack_start(GTK_BOX(dialog_action_area), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); + + bt_close = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); SIGNAL_CONNECT(bt_close, "clicked", gsm_a_stat_gtk_dlg_close_cb, dlg_p); + gtk_widget_grab_default(bt_close); vbox = gtk_vbox_new(FALSE, 0); gtk_widget_ref(vbox); diff --git a/gtk/help_dlg.c b/gtk/help_dlg.c index 10949526ba..f1e06e9804 100644 --- a/gtk/help_dlg.c +++ b/gtk/help_dlg.c @@ -1,6 +1,6 @@ /* help_dlg.c * - * $Id: help_dlg.c,v 1.41 2004/01/10 16:27:41 ulfl Exp $ + * $Id: help_dlg.c,v 1.42 2004/01/21 21:19:33 ulfl Exp $ * * Laurent Deniel * @@ -187,16 +187,14 @@ void help_cb(GtkWidget *w _U_, gpointer data _U_) gtk_widget_show(help_nb); /* Buttons (only "Ok" for now) */ - bbox = gtk_hbutton_box_new(); - /*bbox = gtk_hbox_new(FALSE, 1);*/ - gtk_box_pack_end(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); + bbox = dlg_button_row_new(GTK_STOCK_OK, NULL); + + gtk_box_pack_end(GTK_BOX(main_vb), bbox, FALSE, FALSE, 5); gtk_widget_show(bbox); - close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + + close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); SIGNAL_CONNECT(close_bt, "clicked", help_close_cb, help_w); - GTK_WIDGET_SET_FLAGS(close_bt, GTK_CAN_DEFAULT); - gtk_container_add(GTK_CONTAINER(bbox), close_bt); gtk_widget_grab_default(close_bt); - gtk_widget_show(close_bt); gtk_quit_add_destroy(gtk_main_level(), GTK_OBJECT(help_w)); diff --git a/gtk/http_stat.c b/gtk/http_stat.c index 19decf102a..e8d8d7a296 100644 --- a/gtk/http_stat.c +++ b/gtk/http_stat.c @@ -1,7 +1,7 @@ /* http_stat.c * http_stat 2003 Jean-Michel FAYARD * - * $Id: http_stat.c,v 1.15 2004/01/21 03:54:30 ulfl Exp $ + * $Id: http_stat.c,v 1.16 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -567,26 +567,17 @@ gtk_httpstat_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(filter_box); /* button box */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); - SIGNAL_CONNECT_OBJECT(start_button, "clicked", + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); + SIGNAL_CONNECT_OBJECT(start_button, "clicked", httpstat_start_button_clicked, NULL); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/isup_stat.c b/gtk/isup_stat.c index a46aba9bc9..330e613ea6 100644 --- a/gtk/isup_stat.c +++ b/gtk/isup_stat.c @@ -5,7 +5,7 @@ * * MUCH code modified from service_response_time_table.c. * - * $Id: isup_stat.c,v 1.11 2004/01/21 03:54:30 ulfl Exp $ + * $Id: isup_stat.c,v 1.12 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -277,7 +277,7 @@ isup_stat_gtk_win_create( GtkWidget *column_lb; GtkWidget *vbox; GtkWidget *bt_close; - GtkWidget *hbuttonbox; + GtkWidget *bbox; GtkWidget *dialog_vbox; GtkWidget *dialog_action_area; @@ -294,22 +294,13 @@ isup_stat_gtk_win_create( gtk_widget_show(dialog_action_area); gtk_container_set_border_width(GTK_CONTAINER(dialog_action_area), 10); - hbuttonbox = gtk_hbutton_box_new(); - gtk_widget_ref(hbuttonbox); - OBJECT_SET_DATA_FULL(dlg_p->win, "hbuttonbox", hbuttonbox, - gtk_widget_unref); - gtk_widget_show(hbuttonbox); - gtk_box_pack_start(GTK_BOX(dialog_action_area), hbuttonbox, FALSE, FALSE, 0); - gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbuttonbox), 0); - - bt_close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - gtk_widget_ref(bt_close); - OBJECT_SET_DATA_FULL(dlg_p->win, "bt_close", bt_close, gtk_widget_unref); - gtk_widget_show(bt_close); - gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_close); - GTK_WIDGET_SET_FLAGS(bt_close, GTK_CAN_DEFAULT); + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + gtk_box_pack_start(GTK_BOX(dialog_action_area), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); + + bt_close = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); SIGNAL_CONNECT(bt_close, "clicked", isup_stat_gtk_dlg_close_cb, dlg_p); + gtk_widget_grab_default(bt_close); vbox = gtk_vbox_new(FALSE, 0); gtk_widget_ref(vbox); diff --git a/gtk/ldap_stat.c b/gtk/ldap_stat.c index d86d71cc0d..6e9c0e891d 100644 --- a/gtk/ldap_stat.c +++ b/gtk/ldap_stat.c @@ -1,7 +1,7 @@ /* ldap_stat.c * ldap_stat 2003 Ronnie Sahlberg * - * $Id: ldap_stat.c,v 1.8 2004/01/21 03:54:30 ulfl Exp $ + * $Id: ldap_stat.c,v 1.9 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -311,26 +311,17 @@ gtk_ldapstat_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(filter_box); /* button box */ - bbox=gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); - SIGNAL_CONNECT_OBJECT(start_button, "clicked", + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); + SIGNAL_CONNECT_OBJECT(start_button, "clicked", ldapstat_start_button_clicked, NULL); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); - SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); + + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); + SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/main.c b/gtk/main.c index 0fa174a7f3..7ae4c8df8f 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1,6 +1,6 @@ /* main.c * - * $Id: main.c,v 1.365 2004/01/21 09:00:48 guy Exp $ + * $Id: main.c,v 1.366 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -242,17 +242,13 @@ about_ethereal( GtkWidget *w _U_, gpointer data _U_ ) { gtk_widget_show(msg_label); /* Button row */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); + bbox = dlg_button_row_new(GTK_STOCK_OK, NULL); gtk_container_add(GTK_CONTAINER(main_vb), bbox); gtk_widget_show(bbox); - ok_btn = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_btn = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); SIGNAL_CONNECT_OBJECT(ok_btn, "clicked", gtk_widget_destroy, win); - gtk_container_add(GTK_CONTAINER(bbox), ok_btn); - GTK_WIDGET_SET_FLAGS(ok_btn, GTK_CAN_DEFAULT); gtk_widget_grab_default(ok_btn); - gtk_widget_show(ok_btn); /* Catch the "key_press_event" signal in the window, so that we can catch the ESC key being pressed and act as if the "Cancel" button had @@ -3241,7 +3237,6 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs) /* Main Toolbar */ main_tb = toolbar_new(); - //gtk_box_pack_start(GTK_BOX(main_vbox), main_tb, FALSE, TRUE, 0); gtk_widget_show (main_tb); /* Packet list */ diff --git a/gtk/plugins_dlg.c b/gtk/plugins_dlg.c index 35b0c5e3dd..1278aa7e75 100644 --- a/gtk/plugins_dlg.c +++ b/gtk/plugins_dlg.c @@ -1,7 +1,7 @@ /* plugins_dlg.c * Dialog boxes for plugins * - * $Id: plugins_dlg.c,v 1.32 2004/01/10 16:27:42 ulfl Exp $ + * $Id: plugins_dlg.c,v 1.33 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -54,9 +54,8 @@ tools_plugins_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) GtkWidget *frame_hbox; GtkWidget *scrolledwindow; GtkWidget *plugins_list; - GtkWidget *frame_vbnbox; - GtkWidget *main_hbnbox; - GtkWidget *close_bn; + GtkWidget *bbox; + GtkWidget *ok_bt; gchar *titles[] = {"Name", "Version"}; #if GTK_MAJOR_VERSION >= 2 GtkListStore *store; @@ -115,31 +114,18 @@ tools_plugins_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) #endif gtk_widget_show(plugins_list); - frame_vbnbox = gtk_vbutton_box_new(); - gtk_box_pack_start(GTK_BOX(frame_hbox), frame_vbnbox, FALSE, TRUE, 0); - gtk_container_set_border_width(GTK_CONTAINER(frame_vbnbox), 5); - gtk_button_box_set_layout(GTK_BUTTON_BOX(frame_vbnbox), - GTK_BUTTONBOX_SPREAD); - gtk_widget_show(frame_vbnbox); - - main_hbnbox = gtk_hbutton_box_new(); - gtk_box_pack_start(GTK_BOX(main_vbox), main_hbnbox, FALSE, TRUE, 0); - gtk_container_set_border_width(GTK_CONTAINER(main_hbnbox), 5); - gtk_button_box_set_layout(GTK_BUTTON_BOX(main_hbnbox), - GTK_BUTTONBOX_SPREAD); - gtk_widget_show(main_hbnbox); - - close_bn = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); - gtk_container_add(GTK_CONTAINER(main_hbnbox), close_bn); - GTK_WIDGET_SET_FLAGS(close_bn, GTK_CAN_DEFAULT); - gtk_widget_grab_default(close_bn); - gtk_widget_show(close_bn); - SIGNAL_CONNECT(close_bn, "clicked", plugins_close_cb, plugins_window); + bbox = dlg_button_row_new(GTK_STOCK_OK, NULL); + gtk_box_pack_end(GTK_BOX(main_vbox), bbox, FALSE, FALSE, 3); + gtk_widget_show(bbox); + + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); + SIGNAL_CONNECT(ok_bt, "clicked", plugins_close_cb, plugins_window); + gtk_widget_grab_default(ok_bt); /* Catch the "key_press_event" signal in the window, so that we can catch - the ESC key being pressed and act as if the "Cancel" button had + the ESC key being pressed and act as if the "OK" button had been selected. */ - dlg_set_cancel(plugins_window, close_bn); + dlg_set_cancel(plugins_window, ok_bt); gtk_widget_show(plugins_window); diff --git a/gtk/prefs_dlg.c b/gtk/prefs_dlg.c index 27af15896f..55f258a9b0 100644 --- a/gtk/prefs_dlg.c +++ b/gtk/prefs_dlg.c @@ -1,7 +1,7 @@ /* prefs_dlg.c * Routines for handling preferences * - * $Id: prefs_dlg.c,v 1.73 2004/01/21 12:19:19 oabad Exp $ + * $Id: prefs_dlg.c,v 1.74 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -593,36 +593,22 @@ prefs_cb(GtkWidget *w _U_, gpointer dummy _U_) prefs_module_list_foreach(NULL, module_prefs_show, &cts); /* Button row: OK and cancel buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_SAVE, GTK_STOCK_CANCEL, NULL); gtk_container_add(GTK_CONTAINER(cts.main_vb), bbox); gtk_widget_show(bbox); - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); SIGNAL_CONNECT(ok_bt, "clicked", prefs_main_ok_cb, prefs_w); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), ok_bt, TRUE, TRUE, 0); gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); - apply_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_APPLY); + apply_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_APPLY); SIGNAL_CONNECT(apply_bt, "clicked", prefs_main_apply_cb, prefs_w); - GTK_WIDGET_SET_FLAGS(apply_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX (bbox), apply_bt, TRUE, TRUE, 0); - gtk_widget_show(apply_bt); - save_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_SAVE); + save_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_SAVE); SIGNAL_CONNECT(save_bt, "clicked", prefs_main_save_cb, prefs_w); - GTK_WIDGET_SET_FLAGS(save_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), save_bt, TRUE, TRUE, 0); - gtk_widget_show(save_bt); - cancel_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", prefs_main_cancel_cb, prefs_w); - GTK_WIDGET_SET_FLAGS(cancel_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (bbox), cancel_bt, TRUE, TRUE, 0); - gtk_widget_show(cancel_bt); /* Catch the "key_press_event" signal in the window, so that we can catch the ESC key being pressed and act as if the "Cancel" button had diff --git a/gtk/print_dlg.c b/gtk/print_dlg.c index 07cb243442..b7a9ecc1c9 100644 --- a/gtk/print_dlg.c +++ b/gtk/print_dlg.c @@ -1,7 +1,7 @@ /* print_dlg.c * Dialog boxes for printing * - * $Id: print_dlg.c,v 1.55 2004/01/21 03:54:30 ulfl Exp $ + * $Id: print_dlg.c,v 1.56 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -647,14 +647,12 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) /*****************************************************/ - /* Button row: OK and Cancel buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + /* Button row */ + bbox = dlg_button_row_new(GTK_STOCK_PRINT, GTK_STOCK_CANCEL, NULL); gtk_container_add(GTK_CONTAINER(main_vb), bbox); gtk_widget_show(bbox); - ok_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_PRINT); OBJECT_SET_DATA(ok_bt, PRINT_FORMAT_RB_KEY, format_rb); OBJECT_SET_DATA(ok_bt, PRINT_DEST_CB_KEY, dest_cb); #ifndef _WIN32 @@ -667,18 +665,11 @@ file_print_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) OBJECT_SET_DATA(ok_bt, PRINT_AS_DISPLAYED_RB_KEY, as_displayed_rb); OBJECT_SET_DATA(ok_bt, PRINT_EXPAND_ALL_RB_KEY, expand_all_rb); SIGNAL_CONNECT(ok_bt, "clicked", print_ok_cb, print_w); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_tooltips_set_tip (tooltips, ok_bt, ("Perform printing"), NULL); - gtk_box_pack_start (GTK_BOX (bbox), ok_bt, TRUE, TRUE, 0); gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); - cancel_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_bt, "clicked", print_close_cb, print_w); - GTK_WIDGET_SET_FLAGS(cancel_bt, GTK_CAN_DEFAULT); gtk_tooltips_set_tip (tooltips, cancel_bt, ("Cancel print and exit dialog"), NULL); - gtk_box_pack_start (GTK_BOX (bbox), cancel_bt, TRUE, TRUE, 0); - gtk_widget_show(cancel_bt); /* Catch the "activate" signal on the "Command" and "File" text entries, so that if the user types Return there, we act as if the "OK" button diff --git a/gtk/proto_dlg.c b/gtk/proto_dlg.c index 70af41d213..3f7fa24ea5 100644 --- a/gtk/proto_dlg.c +++ b/gtk/proto_dlg.c @@ -1,6 +1,6 @@ /* proto_dlg.c * - * $Id: proto_dlg.c,v 1.29 2004/01/10 16:27:42 ulfl Exp $ + * $Id: proto_dlg.c,v 1.30 2004/01/21 21:19:33 ulfl Exp $ * * Laurent Deniel * @@ -219,37 +219,22 @@ proto_cb(GtkWidget *w _U_, gpointer data _U_) /* Ok, Apply, Cancel Buttons */ - - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + 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); - button = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); + button = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); SIGNAL_CONNECT(button, "clicked", proto_ok_cb, proto_w); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX (bbox), button, TRUE, TRUE, 0); gtk_widget_grab_default(button); - gtk_widget_show(button); - button = BUTTON_NEW_FROM_STOCK(GTK_STOCK_APPLY); + button = OBJECT_GET_DATA(bbox, GTK_STOCK_APPLY); SIGNAL_CONNECT(button, "clicked", proto_apply_cb, proto_w); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX (bbox), button, TRUE, TRUE, 0); - gtk_widget_show(button); - button = BUTTON_NEW_FROM_STOCK(GTK_STOCK_SAVE); + button = OBJECT_GET_DATA(bbox, GTK_STOCK_SAVE); SIGNAL_CONNECT(button, "clicked", proto_save_cb, proto_w); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX (bbox), button, TRUE, TRUE, 0); - gtk_widget_show(button); - button = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(button, "clicked", proto_cancel_cb, proto_w); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX (bbox), button, TRUE, TRUE, 0); - gtk_widget_show(button); dlg_set_cancel(proto_w, button); diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c index 11912b5e79..a149872d54 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.80 2004/01/21 03:54:30 ulfl Exp $ + * $Id: proto_draw.c,v 1.81 2004/01/21 21:19:33 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -812,26 +812,18 @@ void savehex_cb(GtkWidget * w _U_, gpointer data _U_) gtk_widget_show(file_box); /* Now, the button box */ - bbox=gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); - gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + bbox = dlg_button_row_new(GTK_STOCK_SAVE, GTK_STOCK_CANCEL, NULL); + gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); /* the save button */ - save_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_SAVE); + save_button = OBJECT_GET_DATA(bbox, GTK_STOCK_SAVE); SIGNAL_CONNECT_OBJECT(save_button, "clicked", savehex_save_clicked_cb, NULL); - gtk_box_pack_start(GTK_BOX(bbox), save_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(save_button, GTK_CAN_DEFAULT); gtk_widget_grab_default(save_button); - gtk_widget_show(save_button); - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_button, "clicked", savehex_dlg_cancel_cb, savehex_dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/proto_hier_stats_dlg.c b/gtk/proto_hier_stats_dlg.c index 2336804a68..9a3a534b8e 100644 --- a/gtk/proto_hier_stats_dlg.c +++ b/gtk/proto_hier_stats_dlg.c @@ -1,6 +1,6 @@ /* proto_hier_stats_dlg.c * - * $Id: proto_hier_stats_dlg.c,v 1.13 2004/01/10 16:27:42 ulfl Exp $ + * $Id: proto_hier_stats_dlg.c,v 1.14 2004/01/21 21:19:34 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -270,13 +270,11 @@ create_tree(GtkWidget *container, ph_stats_t *ps) ph_stats_free(ps); } -#define WNAME "Protocol Hierarchy Statistics" - void proto_hier_stats_cb(GtkWidget *w _U_, gpointer d _U_) { ph_stats_t *ps; - GtkWidget *dlg, *bt, *vbox, *frame, *bbox; + GtkWidget *dlg, *ok_bt, *vbox, *bbox; /* Get the statistics. */ ps = ph_stats_new(); @@ -286,36 +284,28 @@ proto_hier_stats_cb(GtkWidget *w _U_, gpointer d _U_) return; } - dlg = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(dlg), "Ethereal: " WNAME); - SIGNAL_CONNECT(dlg, "realize", window_icon_realize_cb, NULL); + dlg = dlg_window_new("Ethereal: Protocol Hierarchy Statistics"); vbox = gtk_vbox_new(FALSE, 5); gtk_container_border_width(GTK_CONTAINER(vbox), 5); gtk_container_add(GTK_CONTAINER(dlg), vbox); - frame = gtk_frame_new(WNAME); - /*gtk_container_add(GTK_CONTAINER(vbox), frame);*/ - gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); + /* Data section */ + create_tree(vbox, ps); + + /* Button row. */ + 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); + SIGNAL_CONNECT_OBJECT(ok_bt, "clicked", gtk_widget_destroy, dlg); + gtk_widget_grab_default(ok_bt); - /* Data section */ - create_tree(frame, ps); - - /* Button row. We put it in an HButtonBox to - * keep it from expanding to the width of the window. */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); - /*gtk_container_add(GTK_CONTAINER(vbox), bbox);*/ - gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); - - /* Close button */ - bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - SIGNAL_CONNECT_OBJECT(bt, "clicked", gtk_widget_destroy, dlg); - gtk_container_add(GTK_CONTAINER(bbox), bt); - GTK_WIDGET_SET_FLAGS(bt, GTK_CAN_DEFAULT); - gtk_widget_grab_default(bt); - dlg_set_cancel(dlg, bt); + /* Catch the "key_press_event" signal in the window, so that we can catch + the ESC key being pressed and act as if the "OK" button had + been selected. */ + dlg_set_cancel(dlg, ok_bt); gtk_widget_show_all(dlg); diff --git a/gtk/rpc_stat.c b/gtk/rpc_stat.c index e5364bef77..9e869ce045 100644 --- a/gtk/rpc_stat.c +++ b/gtk/rpc_stat.c @@ -1,7 +1,7 @@ /* rpc_stat.c * rpc_stat 2002 Ronnie Sahlberg * - * $Id: rpc_stat.c,v 1.33 2004/01/21 03:54:31 ulfl Exp $ + * $Id: rpc_stat.c,v 1.34 2004/01/21 21:19:34 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -486,26 +486,17 @@ gtk_rpcstat_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(filter_box); /* button box */ - bbox=gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); - SIGNAL_CONNECT_OBJECT(start_button, "clicked", + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); + SIGNAL_CONNECT_OBJECT(start_button, "clicked", rpcstat_start_button_clicked, NULL); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); - SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); + + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); + SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/simple_dialog.c b/gtk/simple_dialog.c index 6451d9ff3f..8e601e4787 100644 --- a/gtk/simple_dialog.c +++ b/gtk/simple_dialog.c @@ -1,7 +1,7 @@ /* simple_dialog.c * Simple message dialog box routines. * - * $Id: simple_dialog.c,v 1.15 2004/01/10 16:27:42 ulfl Exp $ + * $Id: simple_dialog.c,v 1.16 2004/01/21 21:19:34 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -64,7 +64,7 @@ static const gchar bm_key[] = "button mask"; void simple_dialog(gint type, gint *btn_mask, gchar *msg_format, ...) { GtkWidget *win, *main_vb, *top_hb, *type_pm, *msg_label, - *bbox, *ok_btn, *cancel_btn; + *bbox, *ok_bt, *cancel_bt; GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; @@ -128,34 +128,31 @@ simple_dialog(gint type, gint *btn_mask, gchar *msg_format, ...) { gtk_widget_show(msg_label); /* Button row */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); + if (btn_mask && *btn_mask == ESD_BTN_CANCEL) { + bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL); + } else { + bbox = dlg_button_row_new(GTK_STOCK_OK, NULL); + } gtk_container_add(GTK_CONTAINER(main_vb), bbox); gtk_widget_show(bbox); - ok_btn = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); - SIGNAL_CONNECT_OBJECT(ok_btn, "clicked", gtk_widget_destroy, win); - gtk_container_add(GTK_CONTAINER(bbox), ok_btn); - GTK_WIDGET_SET_FLAGS(ok_btn, GTK_CAN_DEFAULT); - gtk_widget_grab_default(ok_btn); - gtk_widget_show(ok_btn); + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); + SIGNAL_CONNECT_OBJECT(ok_bt, "clicked", gtk_widget_destroy, win); + gtk_widget_grab_default(ok_bt); if (btn_mask && *btn_mask == ESD_BTN_CANCEL) { - cancel_btn = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); - SIGNAL_CONNECT(cancel_btn, "clicked", simple_dialog_cancel_cb, win); - gtk_container_add(GTK_CONTAINER(bbox), cancel_btn); - GTK_WIDGET_SET_FLAGS(cancel_btn, GTK_CAN_DEFAULT); - gtk_widget_show(cancel_btn); + cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); + SIGNAL_CONNECT(cancel_bt, "clicked", simple_dialog_cancel_cb, win); /* Catch the "key_press_event" signal in the window, so that we can catch the ESC key being pressed and act as if the "Cancel" button had been selected. */ - dlg_set_cancel(win, cancel_btn); + dlg_set_cancel(win, cancel_bt); } else { /* Catch the "key_press_event" signal in the window, so that we can catch the ESC key being pressed and act as if the "OK" button had been selected. */ - dlg_set_cancel(win, ok_btn); + dlg_set_cancel(win, ok_bt); } if (btn_mask) diff --git a/gtk/smb_stat.c b/gtk/smb_stat.c index b6427fbc1c..c0a485249f 100644 --- a/gtk/smb_stat.c +++ b/gtk/smb_stat.c @@ -1,7 +1,7 @@ /* smb_stat.c * smb_stat 2003 Ronnie Sahlberg * - * $Id: smb_stat.c,v 1.31 2004/01/21 03:54:31 ulfl Exp $ + * $Id: smb_stat.c,v 1.32 2004/01/21 21:19:34 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -316,26 +316,17 @@ gtk_smbstat_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(filter_box); /* button box */ - bbox=gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); - SIGNAL_CONNECT_OBJECT(start_button, "clicked", + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); + SIGNAL_CONNECT_OBJECT(start_button, "clicked", smbstat_start_button_clicked, NULL); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); - SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); + + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); + SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/summary_dlg.c b/gtk/summary_dlg.c index e8205f4637..1a4843fa9b 100644 --- a/gtk/summary_dlg.c +++ b/gtk/summary_dlg.c @@ -1,7 +1,7 @@ /* summary_dlg.c * Routines for capture file summary window * - * $Id: summary_dlg.c,v 1.22 2004/01/21 03:54:31 ulfl Exp $ + * $Id: summary_dlg.c,v 1.23 2004/01/21 21:19:34 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -257,21 +257,14 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_) add_string_to_box(string_buff, capture_box); #endif - /* Button row: close button. - (We put it in an HButtonBox, even though there's only one of them, - so that it doesn't expand to the width of the window. */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + /* Button row. */ + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); gtk_container_add(GTK_CONTAINER(main_vb), bbox); gtk_widget_show(bbox); - /* Create Close Button */ - close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); + close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); SIGNAL_CONNECT_OBJECT(close_bt, "clicked", gtk_widget_destroy, sum_open_w); - GTK_WIDGET_SET_FLAGS(close_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), close_bt, FALSE,FALSE, 0); gtk_widget_grab_default(close_bt); - gtk_widget_show(close_bt); /* Catch the "key_press_event" signal in the window, so that we can catch the ESC key being pressed and act as if the "Close" button had diff --git a/gtk/supported_protos_dlg.c b/gtk/supported_protos_dlg.c index ed05cfb2fa..2972167c7d 100644 --- a/gtk/supported_protos_dlg.c +++ b/gtk/supported_protos_dlg.c @@ -80,7 +80,7 @@ static GtkWidget *proto_text, *dfilter_text; void supported_cb(GtkWidget *w _U_, gpointer data _U_) { - GtkWidget *main_vb, *bbox, *supported_nb, *close_bt, *label, *txt_scrollw, + GtkWidget *main_vb, *bbox, *supported_nb, *ok_bt, *label, *txt_scrollw, *proto_vb, #if GTK_MAJOR_VERSION < 2 *dfilter_tb, *dfilter_vsb; @@ -219,24 +219,21 @@ void supported_cb(GtkWidget *w _U_, gpointer data _U_) gtk_widget_show(supported_nb); - /* Buttons ("Close" only one for now) */ - bbox = gtk_hbutton_box_new(); - /*bbox = gtk_hbox_new(FALSE, 1);*/ + /* Button row */ + bbox = dlg_button_row_new(GTK_STOCK_OK, NULL); gtk_box_pack_end(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); - close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_OK); - SIGNAL_CONNECT(close_bt, "clicked", supported_close_cb, supported_w); - GTK_WIDGET_SET_FLAGS(close_bt, GTK_CAN_DEFAULT); - gtk_container_add(GTK_CONTAINER(bbox), close_bt); - gtk_widget_grab_default(close_bt); - gtk_widget_show(close_bt); + + ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK); + SIGNAL_CONNECT(ok_bt, "clicked", supported_close_cb, supported_w); + gtk_widget_grab_default(ok_bt); gtk_quit_add_destroy(gtk_main_level(), GTK_OBJECT(supported_w)); /* Catch the "key_press_event" signal in the window, so that we can catch the ESC key being pressed and act as if the "Cancel" button had been selected. */ - dlg_set_cancel(supported_w, close_bt); + dlg_set_cancel(supported_w, ok_bt); gtk_widget_show(supported_w); diff --git a/gtk/tap_dfilter_dlg.c b/gtk/tap_dfilter_dlg.c index 9cdb30b784..84c8fae6c0 100644 --- a/gtk/tap_dfilter_dlg.c +++ b/gtk/tap_dfilter_dlg.c @@ -2,7 +2,7 @@ * Routines for display filter dialog used by gui taps * Copyright 2003 Lars Roland * - * $Id: tap_dfilter_dlg.c,v 1.4 2004/01/21 03:54:31 ulfl Exp $ + * $Id: tap_dfilter_dlg.c,v 1.5 2004/01/21 21:19:34 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -199,26 +199,17 @@ gtk_tap_dfilter_dlg_cb(GtkWidget *w _U_, gpointer data) gtk_widget_show(filter_box); /* button box */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); - SIGNAL_CONNECT(start_button, "clicked", + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); + SIGNAL_CONNECT(start_button, "clicked", tap_dfilter_dlg_start_button_clicked, current_dlg); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, current_dlg->dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" diff --git a/gtk/tcp_graph.c b/gtk/tcp_graph.c index 1d0ad609aa..f477262839 100644 --- a/gtk/tcp_graph.c +++ b/gtk/tcp_graph.c @@ -3,7 +3,7 @@ * By Pavel Mores * Win32 port: rwh@unifiedtech.com * - * $Id: tcp_graph.c,v 1.45 2004/01/21 03:54:31 ulfl Exp $ + * $Id: tcp_graph.c,v 1.46 2004/01/21 21:19:34 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -48,6 +48,7 @@ #include "compat_macros.h" #include "etypes.h" #include "ppptypes.h" +#include "dlg_utils.h" /* from */ struct ether_header { @@ -853,7 +854,7 @@ static void control_panel_create (struct graph *g) { GtkWidget *toplevel, *notebook; GtkWidget *table; - GtkWidget *help, *close, *button_box; + GtkWidget *help_bt, *close_bt, *bbox; #define WINDOW_TITLE_LENGTH 64 char window_title[WINDOW_TITLE_LENGTH]; @@ -866,13 +867,6 @@ static void control_panel_create (struct graph *g) control_panel_add_cross_page (g, notebook); control_panel_add_graph_type_page (g, notebook); - /* bottom buttons group */ - help = BUTTON_NEW_FROM_STOCK(GTK_STOCK_HELP); - close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - button_box = gtk_hbox_new (TRUE, 0); - gtk_box_pack_start (GTK_BOX (button_box), help, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (button_box), close, TRUE, TRUE, 0); - toplevel = gtk_window_new (GTK_WINDOW_TOPLEVEL); SIGNAL_CONNECT(toplevel, "realize", window_icon_realize_cb, NULL); SIGNAL_CONNECT(toplevel, "destroy", callback_toplevel_destroy, g); @@ -882,11 +876,19 @@ static void control_panel_create (struct graph *g) gtk_table_attach (GTK_TABLE (table), notebook, 0, 1, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL, 5, 5); - gtk_table_attach (GTK_TABLE (table), button_box, 0, 1, 1, 2, + + /* bottom buttons */ + bbox = dlg_button_row_new(GTK_STOCK_HELP, GTK_STOCK_CLOSE, NULL); + gtk_table_attach (GTK_TABLE (table), bbox, 0, 1, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL, 5, 5); + gtk_widget_show(bbox); + + help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP); + SIGNAL_CONNECT(help_bt, "clicked", callback_create_help, g); - SIGNAL_CONNECT(close, "clicked", callback_close, g); - SIGNAL_CONNECT(help, "clicked", callback_create_help, g); + close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); + gtk_widget_grab_default(close_bt); + SIGNAL_CONNECT(close_bt, "clicked", callback_close, g); /* gtk_widget_show_all (table); */ /* g->gui.control_panel = table; */ @@ -1006,7 +1008,7 @@ static void callback_close (GtkWidget *widget _U_, gpointer data) static void callback_create_help(GtkWidget *widget _U_, gpointer data _U_) { - GtkWidget *toplevel, *box, *text, *scroll, *close; + GtkWidget *toplevel, *box, *text, *scroll, *bbox, *close_bt; #if GTK_MAJOR_VERSION < 2 struct graph *g = (struct graph * )data; #else @@ -1037,9 +1039,14 @@ static void callback_create_help(GtkWidget *widget _U_, gpointer data _U_) gtk_text_buffer_set_text(buf, helptext, -1); #endif gtk_container_add (GTK_CONTAINER (scroll), text); - close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - gtk_box_pack_start (GTK_BOX (box), close, FALSE, FALSE, 0); - SIGNAL_CONNECT(close, "clicked", callback_close_help, toplevel); + + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + gtk_box_pack_start (GTK_BOX (box), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); + + close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); + SIGNAL_CONNECT(close_bt, "clicked", callback_close_help, toplevel); + gtk_widget_grab_default(close_bt); gtk_widget_show_all (toplevel); } diff --git a/gtk/wsp_stat.c b/gtk/wsp_stat.c index 0e72e36223..5e3be3bc4a 100644 --- a/gtk/wsp_stat.c +++ b/gtk/wsp_stat.c @@ -1,7 +1,7 @@ /* wsp_stat.c * wsp_stat 2003 Jean-Michel FAYARD * - * $Id: wsp_stat.c,v 1.13 2004/01/21 03:54:31 ulfl Exp $ + * $Id: wsp_stat.c,v 1.14 2004/01/21 21:19:34 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -471,26 +471,17 @@ gtk_wspstat_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(filter_box); /* button box */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_DEFAULT_STYLE); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + bbox = dlg_button_row_new(ETHEREAL_STOCK_CREATE_STAT, GTK_STOCK_CANCEL, NULL); gtk_box_pack_start(GTK_BOX(dlg_box), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); + gtk_widget_show(bbox); - /* the start button */ - start_button=BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CREATE_STAT); - SIGNAL_CONNECT_OBJECT(start_button, "clicked", + start_button = OBJECT_GET_DATA(bbox, ETHEREAL_STOCK_CREATE_STAT); + gtk_widget_grab_default(start_button ); + SIGNAL_CONNECT_OBJECT(start_button, "clicked", wspstat_start_button_clicked, NULL); - gtk_box_pack_start(GTK_BOX(bbox), start_button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS(start_button, GTK_CAN_DEFAULT); - gtk_widget_grab_default(start_button); - gtk_widget_show(start_button); - cancel_button=BUTTON_NEW_FROM_STOCK(GTK_STOCK_CANCEL); + cancel_button = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL); SIGNAL_CONNECT(cancel_button, "clicked", dlg_cancel_cb, dlg); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); - gtk_widget_show(cancel_button); /* Catch the "activate" signal on the filter text entry, so that if the user types Return there, we act as if the "Create Stat" -- cgit v1.2.3