summaryrefslogtreecommitdiff
path: root/ui/gtk/capture_file_dlg.c
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2013-08-21 21:44:48 +0000
committerMartin Kaiser <wireshark@kaiser.cx>2013-08-21 21:44:48 +0000
commit8c484c090b756f0c6eda16688d745792b6bb7f44 (patch)
tree481486d6d1083e22ba1f1a1e721f70620fc9e2d9 /ui/gtk/capture_file_dlg.c
parentac73f00086ff62bf19803c34ce31609f587bf187 (diff)
downloadwireshark-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.c70
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_) {