every GUI action, which will erease a currently unsaved capture file,
will now raise a dialog "Save xy before z?" with Yes/No/Cancel buttons. svn path=/trunk/; revision=9908
This commit is contained in:
parent
419837e531
commit
3c76ec1aa2
|
@ -1,7 +1,7 @@
|
|||
/* capture_dlg.c
|
||||
* Routines for packet capture windows
|
||||
*
|
||||
* $Id: capture_dlg.c,v 1.97 2004/01/26 09:05:59 guy Exp $
|
||||
* $Id: capture_dlg.c,v 1.98 2004/01/29 23:11:37 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -48,6 +48,7 @@
|
|||
#include "ringbuffer.h"
|
||||
#include <epan/filesystem.h>
|
||||
#include "compat_macros.h"
|
||||
#include "file_dlg.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "capture-wpcap.h"
|
||||
|
@ -260,7 +261,7 @@ set_link_type_list(GtkWidget *linktype_om, GtkWidget *entry)
|
|||
}
|
||||
|
||||
void
|
||||
capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
|
||||
capture_prep(void)
|
||||
{
|
||||
GtkWidget *main_vb,
|
||||
*capture_fr, *capture_vb,
|
||||
|
@ -759,6 +760,42 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
|
|||
gtk_widget_show(cap_open_w);
|
||||
}
|
||||
|
||||
static void
|
||||
capture_prep_answered_cb(gpointer dialog _U_, gint btn, gpointer data)
|
||||
{
|
||||
switch(btn) {
|
||||
case(ESD_BTN_YES):
|
||||
/* save file first */
|
||||
file_save_as_cmd(after_save_capture_dialog, data);
|
||||
break;
|
||||
case(ESD_BTN_NO):
|
||||
capture_prep();
|
||||
break;
|
||||
case(ESD_BTN_CANCEL):
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
capture_prep_cb(GtkWidget *w, gpointer d _U_)
|
||||
{
|
||||
gpointer dialog;
|
||||
|
||||
if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
|
||||
/* user didn't saved his current file, ask him */
|
||||
dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL,
|
||||
ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL,
|
||||
"Save packets to \"%s\" before capturing?",
|
||||
cf_get_display_name(&cfile));
|
||||
simple_dialog_set_cb(dialog, capture_prep_answered_cb, NULL);
|
||||
} else {
|
||||
/* unchanged file, just capture a new one */
|
||||
capture_prep();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
select_link_type_cb(GtkWidget *w, gpointer data)
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* capture_dlg.h
|
||||
* Definitions for packet capture windows
|
||||
*
|
||||
* $Id: capture_dlg.h,v 1.3 2002/08/28 21:03:46 jmayer Exp $
|
||||
* $Id: capture_dlg.h,v 1.4 2004/01/29 23:11:37 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -29,4 +29,6 @@
|
|||
void capture_prep_cb(GtkWidget *, gpointer);
|
||||
void capture_stop_cb(GtkWidget *, gpointer);
|
||||
|
||||
void capture_prep(void);
|
||||
|
||||
#endif /* capture.h */
|
||||
|
|
119
gtk/file_dlg.c
119
gtk/file_dlg.c
|
@ -1,7 +1,7 @@
|
|||
/* file_dlg.c
|
||||
* Dialog boxes for handling files
|
||||
*
|
||||
* $Id: file_dlg.c,v 1.84 2004/01/25 21:55:10 guy Exp $
|
||||
* $Id: file_dlg.c,v 1.85 2004/01/29 23:11:37 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -48,6 +48,10 @@
|
|||
#include "../ui_util.h"
|
||||
#include "gtk/color_filters.h"
|
||||
#include "gtk/color_dlg.h"
|
||||
#ifdef HAVE_LIBPCAP
|
||||
#include "capture_dlg.h"
|
||||
#endif
|
||||
|
||||
|
||||
static void file_open_ok_cb(GtkWidget *w, GtkFileSelection *fs);
|
||||
static void file_open_destroy_cb(GtkWidget *win, gpointer user_data);
|
||||
|
@ -200,7 +204,7 @@ static GtkWidget *file_open_w;
|
|||
|
||||
/* Open a file */
|
||||
void
|
||||
file_open_cmd_cb(GtkWidget *w, gpointer data _U_)
|
||||
file_open_cmd(GtkWidget *w)
|
||||
{
|
||||
GtkWidget *main_vb, *filter_hbox, *filter_bt, *filter_te,
|
||||
*m_resolv_cb, *n_resolv_cb, *t_resolv_cb;
|
||||
|
@ -334,6 +338,39 @@ file_open_cmd_cb(GtkWidget *w, gpointer data _U_)
|
|||
gtk_widget_show(file_open_w);
|
||||
}
|
||||
|
||||
void file_open_answered_cb(gpointer dialog _U_, gint btn, gpointer data _U_)
|
||||
{
|
||||
switch(btn) {
|
||||
case(ESD_BTN_YES):
|
||||
/* save file first */
|
||||
file_save_as_cmd(after_save_open_dialog, data);
|
||||
break;
|
||||
case(ESD_BTN_NO):
|
||||
file_open_cmd(data);
|
||||
break;
|
||||
case(ESD_BTN_CANCEL):
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
file_open_cmd_cb(GtkWidget *widget, gpointer data _U_) {
|
||||
gpointer dialog;
|
||||
|
||||
if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
|
||||
/* user didn't saved his current file, ask him */
|
||||
dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL,
|
||||
ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL,
|
||||
"Save your capture file before open a new one?");
|
||||
simple_dialog_set_cb(dialog, file_open_answered_cb, widget);
|
||||
} else {
|
||||
/* unchanged file, just open a new one */
|
||||
file_open_cmd(widget);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
file_open_ok_cb(GtkWidget *w, GtkFileSelection *fs) {
|
||||
gchar *cf_name, *rfilter, *s;
|
||||
|
@ -426,10 +463,38 @@ file_open_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_)
|
|||
file_open_w = NULL;
|
||||
}
|
||||
|
||||
void file_close_confirmed_cb(gpointer dialog _U_, gint btn, gpointer data _U_)
|
||||
{
|
||||
switch(btn) {
|
||||
case(ESD_BTN_YES):
|
||||
/* save file first */
|
||||
file_save_as_cmd(after_save_close_file, NULL);
|
||||
break;
|
||||
case(ESD_BTN_NO):
|
||||
cf_close(&cfile);
|
||||
break;
|
||||
case(ESD_BTN_CANCEL):
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
/* Close a file */
|
||||
void
|
||||
file_close_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) {
|
||||
cf_close(&cfile);
|
||||
gpointer dialog;
|
||||
|
||||
if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
|
||||
/* user didn't saved his current file, ask him */
|
||||
dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL,
|
||||
ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL,
|
||||
"Save your capture file before closing it?");
|
||||
simple_dialog_set_cb(dialog, file_close_confirmed_cb, NULL);
|
||||
} else {
|
||||
/* unchanged file, just close it */
|
||||
cf_close(&cfile);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -739,8 +804,12 @@ file_set_save_marked_sensitive(void)
|
|||
}
|
||||
}
|
||||
|
||||
action_after_save_e action_after_save_g;
|
||||
gpointer action_after_save_data_g;
|
||||
|
||||
|
||||
void
|
||||
file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_)
|
||||
file_save_as_cmd(action_after_save_e action_after_save, gpointer action_after_save_data)
|
||||
{
|
||||
GtkWidget *ok_bt, *main_vb, *ft_hb, *ft_lb, *range_fr, *range_tb;
|
||||
GtkTooltips *tooltips;
|
||||
|
@ -768,6 +837,11 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_)
|
|||
file_save_as_w = file_selection_new ("Ethereal: Save Capture File As");
|
||||
SIGNAL_CONNECT(file_save_as_w, "destroy", file_save_as_destroy_cb, NULL);
|
||||
|
||||
/* as the dialog might already be gone, when using this values, we cannot
|
||||
* set data to the dialog object, but keep global values */
|
||||
action_after_save_g = action_after_save;
|
||||
action_after_save_data_g = action_after_save_data;
|
||||
|
||||
#if GTK_MAJOR_VERSION < 2
|
||||
accel_group = gtk_accel_group_new();
|
||||
gtk_window_add_accel_group(GTK_WINDOW(file_save_as_w), accel_group);
|
||||
|
@ -949,6 +1023,12 @@ file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_)
|
|||
gtk_widget_show(file_save_as_w);
|
||||
}
|
||||
|
||||
void
|
||||
file_save_as_cmd_cb(GtkWidget *w _U_, gpointer data _U_)
|
||||
{
|
||||
file_save_as_cmd(after_save_no_action, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
file_save_as_ok_cb(GtkWidget *w _U_, GtkFileSelection *fs) {
|
||||
gchar *cf_name;
|
||||
|
@ -983,12 +1063,41 @@ file_save_as_ok_cb(GtkWidget *w _U_, GtkFileSelection *fs) {
|
|||
}
|
||||
|
||||
/* The write succeeded; get rid of the file selection box. */
|
||||
gtk_widget_destroy(GTK_WIDGET (fs));
|
||||
/* cf_save might already closed our dialog! */
|
||||
if (file_save_as_w)
|
||||
gtk_widget_destroy(GTK_WIDGET (fs));
|
||||
|
||||
/* Save the directory name for future file dialogs. */
|
||||
dirname = get_dirname(cf_name); /* Overwrites cf_name */
|
||||
set_last_open_dir(dirname);
|
||||
g_free(cf_name);
|
||||
|
||||
/* we have finished saving, do we have pending things to do? */
|
||||
switch(action_after_save_g) {
|
||||
case(after_save_no_action):
|
||||
break;
|
||||
case(after_save_open_dialog):
|
||||
file_open_cmd(action_after_save_data_g);
|
||||
break;
|
||||
case(after_save_open_recent_file):
|
||||
menu_open_recent_file_cmd(action_after_save_data_g);
|
||||
break;
|
||||
#ifdef HAVE_LIBPCAP
|
||||
case(after_save_capture_dialog):
|
||||
capture_prep();
|
||||
break;
|
||||
#endif
|
||||
case(after_save_close_file):
|
||||
cf_close(&cfile);
|
||||
break;
|
||||
case(after_save_exit):
|
||||
main_do_quit();
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
action_after_save_g = after_save_no_action;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* file_dlg.h
|
||||
* Definitions for dialog boxes for handling files
|
||||
*
|
||||
* $Id: file_dlg.h,v 1.7 2003/12/01 02:01:56 guy Exp $
|
||||
* $Id: file_dlg.h,v 1.8 2004/01/29 23:11:37 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -25,6 +25,18 @@
|
|||
#ifndef __FILE_DLG_H__
|
||||
#define __FILE_DLG_H__
|
||||
|
||||
typedef enum {
|
||||
after_save_no_action,
|
||||
after_save_close_file,
|
||||
after_save_open_dialog,
|
||||
after_save_open_recent_file,
|
||||
after_save_capture_dialog,
|
||||
after_save_exit
|
||||
} action_after_save_e;
|
||||
|
||||
void file_save_as_cmd(action_after_save_e action_after_save, gpointer action_after_save_data);
|
||||
|
||||
|
||||
void file_open_cmd_cb(GtkWidget *, gpointer);
|
||||
void file_save_cmd_cb(GtkWidget *, gpointer);
|
||||
void file_save_as_cmd_cb(GtkWidget *, gpointer);
|
||||
|
|
59
gtk/main.c
59
gtk/main.c
|
@ -1,6 +1,6 @@
|
|||
/* main.c
|
||||
*
|
||||
* $Id: main.c,v 1.378 2004/01/28 09:10:50 guy Exp $
|
||||
* $Id: main.c,v 1.379 2004/01/29 23:11:37 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -172,6 +172,7 @@ static gboolean list_link_layer_types;
|
|||
#endif
|
||||
|
||||
static void create_main_window(gint, gint, gint, e_prefs*);
|
||||
static void file_quit_answered_cb(gpointer dialog _U_, gint btn, gpointer data _U_);
|
||||
#ifdef WIN32
|
||||
#if GTK_MAJOR_VERSION >= 2
|
||||
static void try_to_get_windows_font_gtk2 (void);
|
||||
|
@ -1096,8 +1097,8 @@ statusbar_pop_field_msg(void)
|
|||
gtk_statusbar_pop(GTK_STATUSBAR(info_bar), help_ctx);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
do_quit(void)
|
||||
gboolean
|
||||
main_do_quit(void)
|
||||
{
|
||||
gchar *rec_path;
|
||||
|
||||
|
@ -1175,8 +1176,21 @@ do_quit(void)
|
|||
static gboolean
|
||||
main_window_delete_event_cb(GtkWidget *widget _U_, GdkEvent *event _U_, gpointer data _U_)
|
||||
{
|
||||
/* "do_quit()" indicates whether the main window should be deleted. */
|
||||
return do_quit();
|
||||
gpointer dialog;
|
||||
|
||||
if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
|
||||
/* user didn't saved his current file, ask him */
|
||||
dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL,
|
||||
ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL,
|
||||
"Save packets to \"%s\" before quit?",
|
||||
cf_get_display_name(&cfile));
|
||||
simple_dialog_set_cb(dialog, file_quit_answered_cb, NULL);
|
||||
return TRUE;
|
||||
} else {
|
||||
/* unchanged file, just exit */
|
||||
/* "main_do_quit()" indicates whether the main window should be deleted. */
|
||||
return main_do_quit();
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -1218,10 +1232,39 @@ main_window_configure_event_cb(GtkWidget *widget, GdkEvent *event _U_, gpointer
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
file_quit_cmd_cb (GtkWidget *widget _U_, gpointer data _U_)
|
||||
static void file_quit_answered_cb(gpointer dialog _U_, gint btn, gpointer data _U_)
|
||||
{
|
||||
do_quit();
|
||||
switch(btn) {
|
||||
case(ESD_BTN_YES):
|
||||
/* save file first */
|
||||
file_save_as_cmd(after_save_exit, NULL);
|
||||
break;
|
||||
case(ESD_BTN_NO):
|
||||
main_do_quit();
|
||||
break;
|
||||
case(ESD_BTN_CANCEL):
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
file_quit_cmd_cb(GtkWidget *widget _U_, gpointer data _U_)
|
||||
{
|
||||
gpointer dialog;
|
||||
|
||||
if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
|
||||
/* user didn't saved his current file, ask him */
|
||||
dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL,
|
||||
ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL,
|
||||
"Save packets to \"%s\" before quit?",
|
||||
cf_get_display_name(&cfile));
|
||||
simple_dialog_set_cb(dialog, file_quit_answered_cb, NULL);
|
||||
} else {
|
||||
/* unchanged file, just exit */
|
||||
main_do_quit();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* main.h
|
||||
* Global defines, etc.
|
||||
*
|
||||
* $Id: main.h,v 1.39 2004/01/25 18:51:25 ulfl Exp $
|
||||
* $Id: main.h,v 1.40 2004/01/29 23:11:37 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -105,6 +105,7 @@ extern gboolean dfilter_combo_add_recent(gchar *s);
|
|||
extern void dfilter_combo_add_empty(void);
|
||||
extern void dfilter_recent_combo_write_all(FILE *rf);
|
||||
|
||||
extern gboolean main_do_quit(void);
|
||||
extern void main_widgets_rearrange(void);
|
||||
extern int main_filter_packets(capture_file *cf, const gchar *dftext);
|
||||
|
||||
|
|
39
gtk/menu.c
39
gtk/menu.c
|
@ -1,7 +1,7 @@
|
|||
/* menu.c
|
||||
* Menu routines
|
||||
*
|
||||
* $Id: menu.c,v 1.151 2004/01/27 20:58:18 ulfl Exp $
|
||||
* $Id: menu.c,v 1.152 2004/01/29 23:11:37 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -68,6 +68,7 @@
|
|||
#include "recent.h"
|
||||
#include "../ui_util.h"
|
||||
#include "proto_draw.h"
|
||||
#include "simple_dialog.h"
|
||||
|
||||
GtkWidget *popup_menu_object;
|
||||
|
||||
|
@ -767,7 +768,7 @@ clear_menu_recent_capture_file_cmd_cb(GtkWidget *w _U_, gpointer unused _U_) {
|
|||
|
||||
/* callback, if the user pushed a recent file submenu item */
|
||||
void
|
||||
menu_open_recent_file_cmd_cb(GtkWidget *w, gpointer unused _U_)
|
||||
menu_open_recent_file_cmd(GtkWidget *w)
|
||||
{
|
||||
GtkWidget *submenu_recent_files;
|
||||
GtkWidget *menu_item_child;
|
||||
|
@ -792,6 +793,40 @@ menu_open_recent_file_cmd_cb(GtkWidget *w, gpointer unused _U_)
|
|||
update_menu_recent_capture_file(submenu_recent_files);
|
||||
}
|
||||
|
||||
static void menu_open_recent_file_answered_cb(gpointer dialog _U_, gint btn, gpointer data _U_)
|
||||
{
|
||||
switch(btn) {
|
||||
case(ESD_BTN_YES):
|
||||
/* save file first */
|
||||
file_save_as_cmd(after_save_open_recent_file, data);
|
||||
break;
|
||||
case(ESD_BTN_NO):
|
||||
menu_open_recent_file_cmd(data);
|
||||
break;
|
||||
case(ESD_BTN_CANCEL):
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
menu_open_recent_file_cmd_cb(GtkWidget *widget, gpointer data _U_) {
|
||||
gpointer dialog;
|
||||
|
||||
|
||||
if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
|
||||
/* user didn't saved his current file, ask him */
|
||||
dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL,
|
||||
ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL,
|
||||
"Save packets to \"%s\" before opening a new capture file?",
|
||||
cf_get_display_name(&cfile));
|
||||
simple_dialog_set_cb(dialog, menu_open_recent_file_answered_cb, widget);
|
||||
} else {
|
||||
/* unchanged file */
|
||||
menu_open_recent_file_cmd(widget);
|
||||
}
|
||||
}
|
||||
|
||||
/* add the capture filename (with an absolute path) to the "Recent Files" menu */
|
||||
void
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* menu.h
|
||||
* Menu definitions
|
||||
*
|
||||
* $Id: menu.h,v 1.14 2004/01/19 00:42:10 ulfl Exp $
|
||||
* $Id: menu.h,v 1.15 2004/01/29 23:11:38 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -31,6 +31,7 @@ extern "C" {
|
|||
|
||||
/* Write all recent capture filenames to the user's recent file */
|
||||
void menu_recent_file_write_all(FILE *rf);
|
||||
void menu_open_recent_file_cmd(GtkWidget *w);
|
||||
|
||||
GtkWidget *main_menu_new(GtkAccelGroup **);
|
||||
void set_menu_object_data (gchar *path, gchar *key, gpointer data);
|
||||
|
|
Loading…
Reference in New Issue