diff options
author | Martin Kaiser <wireshark@kaiser.cx> | 2013-08-21 21:44:48 +0000 |
---|---|---|
committer | Martin Kaiser <wireshark@kaiser.cx> | 2013-08-21 21:44:48 +0000 |
commit | 8c484c090b756f0c6eda16688d745792b6bb7f44 (patch) | |
tree | 481486d6d1083e22ba1f1a1e721f70620fc9e2d9 /ui/gtk/capture_file_dlg.c | |
parent | ac73f00086ff62bf19803c34ce31609f587bf187 (diff) | |
download | wireshark-8c484c090b756f0c6eda16688d745792b6bb7f44.tar.gz |
The export PDU mechanism creates a new capture which contains only the
exported PDUs. The currently opened capture file is closed.
Make sure that this does not discard any unsaved data. Ask the user for
confirmation and save the changes before running the export.
svn path=/trunk/; revision=51459
Diffstat (limited to 'ui/gtk/capture_file_dlg.c')
-rw-r--r-- | ui/gtk/capture_file_dlg.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/ui/gtk/capture_file_dlg.c b/ui/gtk/capture_file_dlg.c index 0c97311512..36523058ed 100644 --- a/ui/gtk/capture_file_dlg.c +++ b/ui/gtk/capture_file_dlg.c @@ -58,6 +58,7 @@ #include "ui/gtk/file_dlg.h" #include "ui/gtk/capture_file_dlg.h" #include "ui/gtk/drag_and_drop.h" +#include "ui/gtk/export_pdu_dlg.h" #include "ui/gtk/main.h" #include "ui/gtk/color_dlg.h" #include "ui/gtk/packet_list.h" @@ -2114,6 +2115,75 @@ file_export_specified_packets_cmd_cb(GtkWidget *w _U_, gpointer data _U_) { } +void +file_export_pdu_ok_cb(GtkWidget *widget _U_, gpointer data) +{ + GtkWidget *msg_dialog; + gchar *display_basename; + gint response; + + if (prefs.gui_ask_unsaved && cf_has_unsaved_data(&cfile)) { + if (cfile.is_tempfile) { + msg_dialog = gtk_message_dialog_new(GTK_WINDOW(top_level), + (GtkDialogFlags)(GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, + "Do you want to save the captured packets before exporting PDUs?"); + + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msg_dialog), + "After the export, the captured packets will no longer be accessible."); + } + else { + display_basename = g_filename_display_basename(cfile.filename); + msg_dialog = gtk_message_dialog_new(GTK_WINDOW(top_level), + (GtkDialogFlags)(GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, + "Do you want to save the changes you've made " + "to the capture file \"%s\" before exporting PDUs from it?", + display_basename); + g_free(display_basename); + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msg_dialog), + "Unsaved changes will be discarded when PDUs are exported."); + } + + gtk_dialog_add_button(GTK_DIALOG(msg_dialog), + WIRESHARK_STOCK_DONT_SAVE, GTK_RESPONSE_CLOSE); + gtk_dialog_add_button(GTK_DIALOG(msg_dialog), + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); + gtk_dialog_add_button(GTK_DIALOG(msg_dialog), + WIRESHARK_STOCK_SAVE, GTK_RESPONSE_ACCEPT); + gtk_dialog_set_alternative_button_order(GTK_DIALOG(msg_dialog), + GTK_RESPONSE_ACCEPT, + GTK_RESPONSE_CANCEL, + GTK_RESPONSE_CLOSE, + -1); + gtk_dialog_set_default_response(GTK_DIALOG(msg_dialog), GTK_RESPONSE_ACCEPT); + + response = gtk_dialog_run(GTK_DIALOG(msg_dialog)); + gtk_widget_destroy(msg_dialog); + + switch (response) { + case GTK_RESPONSE_CLOSE: + /* nothing to do, user chose to discard the unsaved data */ + break; + + case GTK_RESPONSE_ACCEPT: + /* save the file but don't close it */ + do_file_save(&cfile, FALSE); + break; + + case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_NONE: + case GTK_RESPONSE_DELETE_EVENT: + default: + /* don't do the export. */ + return; + } + } + + do_export_pdu(data); +} + + /* Reload a file using the current read and display filters */ void file_reload_cmd_cb(GtkWidget *w _U_, gpointer data _U_) { |