aboutsummaryrefslogtreecommitdiffstats
path: root/ui/gtk/prefs_dlg.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2013-07-17 04:52:19 +0000
committerAnders Broman <anders.broman@ericsson.com>2013-07-17 04:52:19 +0000
commite0341f776c6d5d540013175e79b0000aa480b54d (patch)
treeffe9491cf297fac02ff382fa87c7351157166e18 /ui/gtk/prefs_dlg.c
parent97ca7816718cb7e22b4c8d03b40fae63459eaaf7 (diff)
From Cal Turney:
Unrecognized preferences and color filters created in proprietary or older versions are discarded when saved. If the user attempts to save the preferences or colorfilters file, a popup is displayed that warns that unrecognized prefs or color filters have been detected and will be discarded if the save operation is allowed to proceed. In the case of Preferences, the popup message includes the version at which the file was last saved. A "Continue without Saving" button is provided so that the user can save the profile under a different name. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8942 svn path=/trunk/; revision=50690
Diffstat (limited to 'ui/gtk/prefs_dlg.c')
-rw-r--r--ui/gtk/prefs_dlg.c59
1 files changed, 54 insertions, 5 deletions
diff --git a/ui/gtk/prefs_dlg.c b/ui/gtk/prefs_dlg.c
index 9bc073f72a..0e7e309a2c 100644
--- a/ui/gtk/prefs_dlg.c
+++ b/ui/gtk/prefs_dlg.c
@@ -1252,8 +1252,8 @@ prefs_main_fetch_all(GtkWidget *dlg, gboolean *must_redissect)
/* XXX - check the non-registered preferences too */
switch (prefs_modules_foreach(module_prefs_check, (gpointer)&badpref)) {
- case PREFS_SET_SYNTAX_ERR:
- switch (badpref->type) {
+ case PREFS_SET_SYNTAX_ERR:
+ switch (badpref->type) {
case PREF_UINT:
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
@@ -1392,6 +1392,55 @@ static void prefs_copy(void) {
}
static void
+overwrite_existing_prefs_cb(gpointer dialog _U_, gint btn, gpointer parent_w)
+{
+ switch (btn) {
+ case(ESD_BTN_SAVE):
+ prefs_main_write();
+ prefs.unknown_prefs = FALSE;
+ break;
+ case(ESD_BTN_DONT_SAVE):
+ break;
+ default:
+ g_assert_not_reached();
+ }
+}
+static void
+prefs_main_save(gpointer parent_w)
+{
+ if (prefs.unknown_prefs) {
+ gpointer dialog;
+ gchar *msg;
+ gchar *msg1 = "These preferences were last saved at version ";
+ gchar *msg2 = "Obsolete or unrecognized preferences have been detected. "
+ "If you plan to use this profile with ";
+ gchar *msg3 = "that version of Wireshark, ";
+ gchar *msg4 = "an older or nonstandard Wireshark version, ";
+ gchar *msg5 = "click 'Continue without Saving' and save this profile under a another name.\n";
+
+ if (prefs.saved_at_version) {
+ gulong tot_msg_len = 246 + strlen(prefs.saved_at_version) + 1;
+
+ msg = (gchar *)g_malloc(tot_msg_len);
+ g_snprintf(msg, tot_msg_len, "%s\"%s\". %s%s%s",
+ msg1, prefs.saved_at_version, msg2, msg3, msg5);
+ dialog = simple_dialog(ESD_TYPE_CONFIRMATION, ESD_BTNS_SAVE_DONTSAVE, msg);
+ } else {
+ msg = (gchar *)g_malloc(214);
+
+ g_snprintf(msg, 214, "%s%s%s", msg2, msg4, msg5);
+ dialog = simple_dialog(ESD_TYPE_CONFIRMATION, ESD_BTNS_SAVE_DONTSAVE, msg);
+ }
+
+ simple_dialog_set_cb(dialog, overwrite_existing_prefs_cb, parent_w);
+ g_free(msg);
+
+ } else {
+ prefs_main_write();
+ }
+}
+
+static void
prefs_main_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
{
gboolean must_redissect = FALSE;
@@ -1401,7 +1450,7 @@ prefs_main_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
/* if we don't have a Save button, just save the settings now */
if (!prefs.gui_use_pref_save) {
- prefs_main_write();
+ prefs_main_save(parent_w);
}
#ifdef HAVE_AIRPCAP
@@ -1442,7 +1491,7 @@ prefs_main_apply_cb(GtkWidget *apply_bt _U_, gpointer parent_w)
/* if we don't have a Save button, just save the settings now */
if (!prefs.gui_use_pref_save) {
- prefs_main_write();
+ prefs_main_save(parent_w);
prefs_copy(); /* save prefs for reverting if Cancel */
}
@@ -1470,7 +1519,7 @@ prefs_main_save_cb(GtkWidget *save_bt _U_, gpointer parent_w)
if (!prefs_main_fetch_all((GtkWidget *)parent_w, &must_redissect))
return; /* Errors in some preference setting - already reported */
- prefs_main_write();
+ prefs_main_save(parent_w);
prefs_copy(); /* save prefs for reverting if Cancel */
/* Now apply those preferences.