diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 57525e830d..a0490d662a 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9480,8 +9480,6 @@ Change of this parameter will affect the layout of buttons in notification toast
Boolean
Value
0
- Backup
- 0
QAModeEventHostPort
+
+ RestoreGlobalSettings
+
+
+ RestorePerAccountSettings
+
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 3c3015b7f3..cf58c64079 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -127,6 +127,7 @@
// Backup Settings
#include "llline.h"
+#include "llscrolllistctrl.h"
#include "llspellcheck.h"
#include "lltoolbarview.h"
#include "llwaterparammanager.h"
@@ -493,6 +494,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.SetBackupSettingsPath", boost::bind(&LLFloaterPreference::onClickSetBackupSettingsPath, this));
mCommitCallbackRegistrar.add("Pref.BackupSettings", boost::bind(&LLFloaterPreference::onClickBackupSettings, this));
mCommitCallbackRegistrar.add("Pref.RestoreSettings", boost::bind(&LLFloaterPreference::onClickRestoreSettings, this));
+ mCommitCallbackRegistrar.add("Pref.BackupSelectAll", boost::bind(&LLFloaterPreference::onClickSelectAll, this));
+ mCommitCallbackRegistrar.add("Pref.BackupDeselectAll", boost::bind(&LLFloaterPreference::onClickDeselectAll, this));
//
gSavedSettings.getControl("NameTagShowUsernames")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged, _2));
@@ -505,34 +508,6 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
gSavedSettings.getControl("FSPublishRadarTag")->getCommitSignal()->connect(boost::bind(&handlePublishRadarTagOptionChanged, _2));
LLAvatarPropertiesProcessor::getInstance()->addObserver( gAgent.getID(), this );
-
- // Backup Settings
- // make a list of global files to copy
- mGlobalFiles.push_back("bin_conf.dat"); // login credentials and accounts
- mGlobalFiles.push_back("colors.xml");
- mGlobalFiles.push_back("ignorable_dialogs.xml");
- mGlobalFiles.push_back("grids.user.xml");
- mGlobalFiles.push_back("autoreplace.xml");
-
- // make a list of per account files to copy
- mPerAccountFiles.push_back("asset_blacklist.xml");
- mPerAccountFiles.push_back("filters.xml");
- mPerAccountFiles.push_back("landmarks_sorting.xml");
- mPerAccountFiles.push_back("medialist.xml");
- mPerAccountFiles.push_back("muted_groups.xml");
- mPerAccountFiles.push_back("toolbars.xml");
- mPerAccountFiles.push_back("volume_settings.xml"); // voice chat volumes
- mPerAccountFiles.push_back("teleport_history.txt");
-
- // make a list of folders to copy (flat file, non recursive)
- mGlobalFolders.push_back("beams"); // custom selection beams
- mGlobalFolders.push_back("beamsColors"); // custom selection beam colors
- mGlobalFolders.push_back("dictionaries"); // user defined words/ignores
- mGlobalFolders.push_back("windlight"); // base windlight settings folder
- mGlobalFolders.push_back("windlight/days"); // windlight day cycles
- mGlobalFolders.push_back("windlight/skies"); // windlight sky presets
- mGlobalFolders.push_back("windlight/water"); // windlight water presets
- //
}
void LLFloaterPreference::processProperties( void* pData, EAvatarProcessorType type )
@@ -2994,28 +2969,36 @@ void LLPanelPreferenceSkins::refreshSkinThemeList()
// Backup Settings
// copied from llxfer_file.cpp - Hopefully this will be part of LLFile some day -Zi
+// added a safeguard so the destination file is only created when the source file exists -Zi
S32 copy_prefs_file(const std::string& from, const std::string& to)
{
llwarns << "copying " << from << " to " << to << llendl;
S32 rv = 0;
LLFILE* in = LLFile::fopen(from, "rb"); /*Flawfinder: ignore*/
+ if(!in)
+ {
+ llwarns << "couldn't open source file " << from << " - copy aborted." << llendl;
+ return -1;
+ }
+
LLFILE* out = LLFile::fopen(to, "wb"); /*Flawfinder: ignore*/
- if(in && out)
+ if(!out)
{
- S32 read = 0;
- const S32 COPY_BUFFER_SIZE = 16384;
- U8 buffer[COPY_BUFFER_SIZE];
- while(((read = fread(buffer, 1, sizeof(buffer), in)) > 0)
- && (fwrite(buffer, 1, read, out) == (U32)read)); /* Flawfinder : ignore */
- if(ferror(in) || ferror(out)) rv = -2;
- }
- else
- {
- llwarns << "copy failed. in: " << in << " out: " << out << llendl;
- rv = -1;
+ fclose(in);
+ llwarns << "couldn't open destination file " << to << " - copy aborted." << llendl;
+ return -1;
}
+
+ S32 read = 0;
+ const S32 COPY_BUFFER_SIZE = 16384;
+ U8 buffer[COPY_BUFFER_SIZE];
+ while(((read = fread(buffer, 1, sizeof(buffer), in)) > 0)
+ && (fwrite(buffer, 1, read, out) == (U32)read)); /* Flawfinder : ignore */
+ if(ferror(in) || ferror(out)) rv = -2;
+
if(in) fclose(in);
if(out) fclose(out);
+
return rv;
}
@@ -3068,17 +3051,6 @@ void LLFloaterPreference::onClickBackupSettings()
return;
}
- // get path and file names to the relevant settings files
- std::string userlower=gDirUtilp->getBaseFileName(gDirUtilp->getLindenUserDir(),false);
- std::string backup_per_account_folder=dir_name+gDirUtilp->getDirDelimiter()+userlower;
-
- std::string backup_global_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,
- LLAppViewer::instance()->getSettingsFilename("Default","Global"));
- std::string backup_per_account_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,backup_per_account_folder,
- LLAppViewer::instance()->getSettingsFilename("Default","PerAccount"));
- std::string per_account_name=gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,
- LLAppViewer::instance()->getSettingsFilename("Default","PerAccount"));
-
// define a couple of control groups to store the settings to back up
LLControlGroup backup_global_controls("BackupGlobal");
LLControlGroup backup_per_account_controls("BackupPerAccount");
@@ -3125,21 +3097,41 @@ void LLFloaterPreference::onClickBackupSettings()
// set it to save defaults, too (FALSE), because our declaration automatically
// makes the value default
+ std::string backup_global_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,
+ LLAppViewer::instance()->getSettingsFilename("Default","Global"));
llwarns << "saving backup global settings" << llendl;
backup_global_controls.saveToFile(backup_global_name,FALSE);
- for(S32 index=0;index("restore_global_files_list");
+ // Pull out all data
+ std::vector globalFileList=globalScrollList->getAllData();
+ // Go over each entry
+ for(S32 index=0;indexgetColumn(2)->getValue().asString();
+ llwarns << "copying global file " << file << llendl;
copy_prefs_file(
- gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,mGlobalFiles[index]),
- gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,mGlobalFiles[index]));
+ gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,file),
+ gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,file));
}
// Only back up per-account settings when the path is available, meaning, the user
// has logged in
+ std::string per_account_name=gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,
+ LLAppViewer::instance()->getSettingsFilename("Default","PerAccount"));
if(!per_account_name.empty())
{
+ // get path and file names to the relevant settings files
+ std::string userlower=gDirUtilp->getBaseFileName(gDirUtilp->getLindenUserDir(),false);
+ std::string backup_per_account_folder=dir_name+gDirUtilp->getDirDelimiter()+userlower;
+ std::string backup_per_account_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,backup_per_account_folder,
+ LLAppViewer::instance()->getSettingsFilename("Default","PerAccount"));
+
llwarns << "copying per account settings" << llendl;
// create per-user folder if it doesn't exist yet
LLFile::mkdir(backup_per_account_folder.c_str());
@@ -3154,29 +3146,50 @@ void LLFloaterPreference::onClickBackupSettings()
llwarns << "saving backup per account settings" << llendl;
backup_per_account_controls.saveToFile(backup_per_account_name,FALSE);
- for(S32 index=0;index("restore_per_account_files_list");
+ // Pull out all data
+ std::vector perAccountFileList=perAccountScrollList->getAllData();
+ // Go over each entry
+ for(S32 index=0;indexgetColumn(2)->getValue().asString();
+ llwarns << "copying per account file " << file << llendl;
copy_prefs_file(
- gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,mPerAccountFiles[index]),
- gDirUtilp->getExpandedFilename(LL_PATH_NONE,backup_per_account_folder,mPerAccountFiles[index]));
+ gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,file),
+ gDirUtilp->getExpandedFilename(LL_PATH_NONE,backup_per_account_folder,file));
}
}
else
llwarns << backup_per_account_folder << " is not a folder. Per account settings save aborted." << llendl;
}
- // copy global folders and their contents
- for(S32 index=0;index("restore_global_folders_list");
+ // Pull out all data
+ std::vector globalFoldersList=globalFoldersScrollList->getAllData();
+ // Go over each entry
+ for(S32 index=0;indexgetExpandedFilename(LL_PATH_USER_SETTINGS,mGlobalFolders[index])+gDirUtilp->getDirDelimiter();
- std::string backup_folder_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,mGlobalFolders[index])+gDirUtilp->getDirDelimiter();
+ // Get the next item in the list
+ LLScrollListItem* item=globalFoldersList[index];
+ // Don't bother with the checkbox and get the path, since we back up all folders
+ // and only restore selectively
+ std::string folder=item->getColumn(2)->getValue().asString();
- llwarns << "backing up folder: " << folder_name << llendl;
+ std::string folder_name=gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,folder)+gDirUtilp->getDirDelimiter();
+ std::string backup_folder_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,folder)+gDirUtilp->getDirDelimiter();
+
+ llwarns << "backing up global folder: " << folder_name << llendl;
// create folder if it's not there already
LLFile::mkdir(backup_folder_name.c_str());
+
+ std::string file_name;
while(gDirUtilp->getNextFileInDir(folder_name,"*",file_name))
{
llwarns << "found entry: " << folder_name+file_name << llendl;
@@ -3185,8 +3198,10 @@ void LLFloaterPreference::onClickBackupSettings()
{
copy_prefs_file(folder_name+file_name,backup_folder_name+file_name);
}
+ llwarns << "skipping subfolder " << folder_name+file_name << llendl;
}
}
+
LLNotificationsUtil::add("BackupFinished");
}
@@ -3219,7 +3234,7 @@ void LLFloaterPreference:: doRestoreSettings(const LLSD& notification,const LLSD
onClickSetBackupSettingsPath();
}
- // Remember the backup path for next time
+ // Remember the backup path
dir_name=gSavedSettings.getString("SettingsBackupPath");
// If the backup path is still empty, complain to the user and do nothing else
@@ -3241,50 +3256,92 @@ void LLFloaterPreference:: doRestoreSettings(const LLSD& notification,const LLSD
// Close the window so the restored settings can't be destroyed by the user
onBtnOK();
- // get path and file names to the relevant settings files
- std::string userlower=gDirUtilp->getBaseFileName(gDirUtilp->getLindenUserDir(),false);
- std::string backup_per_account_folder=dir_name+gDirUtilp->getDirDelimiter()+userlower;
-
- std::string global_name=gSavedSettings.getString("ClientSettingsFile");
- std::string backup_global_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,
- LLAppViewer::instance()->getSettingsFilename("Default","Global"));
- std::string per_account_name=gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,
- LLAppViewer::instance()->getSettingsFilename("Default","PerAccount"));
- std::string backup_per_account_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,backup_per_account_folder,
- LLAppViewer::instance()->getSettingsFilename("Default","PerAccount"));
-
- // start clean
- llwarns << "clearing global settings" << llendl;
- gSavedSettings.resetToDefaults();
-
- // run restore on global controls
- llwarns << "restoring global settings from backup" << llendl;
- gSavedSettings.loadFromFile(backup_global_name);
- llwarns << "saving global settings" << llendl;
- gSavedSettings.saveToFile(global_name,TRUE);
-
- for(S32 index=0;indexgetExpandedFilename(LL_PATH_NONE,dir_name,mGlobalFiles[index]),
- gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,mGlobalFiles[index]));
+ // Get path and file names to backup and restore settings path
+ std::string global_name=gSavedSettings.getString("ClientSettingsFile");
+ std::string backup_global_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,
+ LLAppViewer::instance()->getSettingsFilename("Default","Global"));
+
+ // start clean
+ llwarns << "clearing global settings" << llendl;
+ gSavedSettings.resetToDefaults();
+
+ // run restore on global controls
+ llwarns << "restoring global settings from backup" << llendl;
+ gSavedSettings.loadFromFile(backup_global_name);
+ llwarns << "saving global settings" << llendl;
+ gSavedSettings.saveToFile(global_name,TRUE);
+ }
+
+ // Get scroll list control that holds the list of global files
+ LLScrollListCtrl* globalScrollList=getChild("restore_global_files_list");
+ // Pull out all data
+ std::vectorglobalFileList=globalScrollList->getAllData();
+ // Go over each entry
+ for(S32 index=0;index(item->getColumn(0));
+ if(!checkbox)
+ continue;
+ // Only restore if this item is checked on
+ if (checkbox->getCheckBox()->getValue().asBoolean())
+ {
+ // Get the path to restore for this item
+ std::string file=item->getColumn(2)->getValue().asString();
+ llwarns << "copying global file " << file << llendl;
+ copy_prefs_file(
+ gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,file),
+ gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,file));
+ }
}
// Only restore per-account settings when the path is available
+ std::string per_account_name=gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,
+ LLAppViewer::instance()->getSettingsFilename("Default","PerAccount"));
if(!per_account_name.empty())
{
- llwarns << "copying per account settings" << llendl;
- // run restore on per-account controls
- gSavedPerAccountSettings.loadFromFile(backup_per_account_name);
- gSavedPerAccountSettings.saveToFile(per_account_name,TRUE);
+ // Get path and file names to the relevant settings files
+ std::string userlower=gDirUtilp->getBaseFileName(gDirUtilp->getLindenUserDir(),false);
+ std::string backup_per_account_folder=dir_name+gDirUtilp->getDirDelimiter()+userlower;
+ std::string backup_per_account_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,backup_per_account_folder,
+ LLAppViewer::instance()->getSettingsFilename("Default","PerAccount"));
- for(S32 index=0;indexgetExpandedFilename(LL_PATH_NONE,backup_per_account_folder,mPerAccountFiles[index]),
- gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,mPerAccountFiles[index]));
+ // run restore on per-account controls
+ llwarns << "restoring per account settings" << llendl;
+ gSavedPerAccountSettings.loadFromFile(backup_per_account_name);
+ llwarns << "saving per account settings" << llendl;
+ gSavedPerAccountSettings.saveToFile(per_account_name,TRUE);
+ }
+
+ // Get scroll list control that holds the list of per account files
+ LLScrollListCtrl* perAccountScrollList=getChild("restore_per_account_files_list");
+ // Pull out all data
+ std::vector perAccountFileList=perAccountScrollList->getAllData();
+ // Go over each entry
+ for(S32 index=0;index(item->getColumn(0));
+ if(!checkbox)
+ continue;
+ // Only restore if this item is checked on
+ if (checkbox->getCheckBox()->getValue().asBoolean())
+ {
+ // Get the path to restore for this item
+ std::string file=item->getColumn(2)->getValue().asString();
+ llwarns << "copying per account file " << file << llendl;
+ copy_prefs_file(
+ gDirUtilp->getExpandedFilename(LL_PATH_NONE,backup_per_account_folder,file),
+ gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,file));
+ }
}
// toolbars get overwritten when LLToolbarView is destroyed, so make sure
@@ -3295,35 +3352,104 @@ void LLFloaterPreference:: doRestoreSettings(const LLSD& notification,const LLSD
gToolBarView->loadToolbars(FALSE);
}
- // restore global folders and their contents
- for(S32 index=0;index("restore_global_folders_list");
+ // Pull out all data
+ std::vector globalFoldersList=globalFoldersScrollList->getAllData();
+ // Go over each entry
+ for(S32 index=0;indexgetExpandedFilename(LL_PATH_USER_SETTINGS,mGlobalFolders[index])+gDirUtilp->getDirDelimiter();
- std::string backup_folder_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,mGlobalFolders[index])+gDirUtilp->getDirDelimiter();
-
- llwarns << "restoring global folder " << folder_name << llendl;
-
- // create folder if it's not there already
- LLFile::mkdir(folder_name.c_str());
- while(gDirUtilp->getNextFileInDir(folder_name,"*",file_name))
+ // Get the next item in the list
+ LLScrollListItem* item=globalFoldersList[index];
+ // Look at the first column and make sure it's a checkbox control
+ LLScrollListCheck* checkbox=dynamic_cast(item->getColumn(0));
+ if(!checkbox)
+ continue;
+ // Only restore if this item is checked on
+ if (checkbox->getCheckBox()->getValue().asBoolean())
{
- llwarns << "found entry: " << backup_folder_name+file_name << llendl;
- // only restore files, not subfolders
- if(LLFile::isfile(backup_folder_name+file_name.c_str()))
+ // Get the path to restore for this item
+ std::string folder=item->getColumn(2)->getValue().asString();
+
+ std::string folder_name=gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,folder)+gDirUtilp->getDirDelimiter();
+ std::string backup_folder_name=gDirUtilp->getExpandedFilename(LL_PATH_NONE,dir_name,folder)+gDirUtilp->getDirDelimiter();
+
+ llwarns << "restoring global folder: " << folder_name << llendl;
+
+ // create folder if it's not there already
+ LLFile::mkdir(folder_name.c_str());
+
+ std::string file_name;
+ while(gDirUtilp->getNextFileInDir(backup_folder_name,"*",file_name))
{
- copy_prefs_file(backup_folder_name+file_name,folder_name+file_name);
+ llwarns << "found entry: " << backup_folder_name+file_name << llendl;
+ // only restore files, not subfolders
+ if(LLFile::isfile(backup_folder_name+file_name.c_str()))
+ {
+ copy_prefs_file(backup_folder_name+file_name,folder_name+file_name);
+ }
+ else
+ llwarns << "skipping subfolder " << backup_folder_name+file_name << llendl;
}
}
}
+ // Tell the user we have finished restoring settings and the viewer must shut down
+ LLNotificationsUtil::add("RestoreFinished",LLSD(),LLSD(),boost::bind(&LLFloaterPreference::onQuitConfirmed,this,_1,_2));
+}
+// User confirmed the shutdown and we proceed
+void LLFloaterPreference::onQuitConfirmed(const LLSD& notification,const LLSD& response)
+{
// Make sure the viewer will not save any settings on exit, so our copied files will survive
LLAppViewer::instance()->setSaveSettingsOnExit(FALSE);
-
+ // Quit the viewer so all gets saved immediately
llwarns << "setting to quit" << llendl;
- // And quit the viewer so all gets saved immediately
LLApp::instance()->setQuitting();
}
+
+void LLFloaterPreference::onClickSelectAll()
+{
+ doSelect(TRUE);
+}
+
+void LLFloaterPreference::onClickDeselectAll()
+{
+ doSelect(FALSE);
+}
+
+void LLFloaterPreference::doSelect(BOOL all)
+{
+ // Get scroll list control that holds the list of global files
+ LLScrollListCtrl* globalScrollList=getChild("restore_global_files_list");
+ // Get scroll list control that holds the list of per account files
+ LLScrollListCtrl* perAccountScrollList=getChild("restore_per_account_files_list");
+ // Get scroll list control that holds the list of global folders
+ LLScrollListCtrl* globalFoldersScrollList=getChild("restore_global_folders_list");
+
+ applySelection(globalScrollList,all);
+ applySelection(perAccountScrollList,all);
+ applySelection(globalFoldersScrollList,all);
+}
+
+void LLFloaterPreference::applySelection(LLScrollListCtrl* control,BOOL all)
+{
+ // Pull out all data
+ std::vector itemList=control->getAllData();
+ // Go over each entry
+ for(S32 index=0;indexgetEnabled())
+ {
+ // Look at the first column and make sure it's a checkbox control
+ LLScrollListCheck* checkbox=dynamic_cast(item->getColumn(0));
+ if(checkbox)
+ checkbox->getCheckBox()->setValue(all);
+ }
+ }
+}
//
#ifdef HAS_OPENSIM_SUPPORT//
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index f3ea3be145..42b6ce7b83 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -200,10 +200,16 @@ public:
// Backup settings
void onClickSetBackupSettingsPath();
+ void onClickSelectAll();
+ void onClickDeselectAll();
void onClickBackupSettings();
void onClickRestoreSettings();
+
+ void doSelect(BOOL all); // calls applySelection for each list
+ void applySelection(LLScrollListCtrl* control,BOOL all); // selects or deselects all items in a scroll list
void doRestoreSettings(const LLSD& notification,const LLSD& response); // callback for restore dialog
- //
+ void onQuitConfirmed(const LLSD& notification,const LLSD& response); // callback for finished restore dialog
+//
private:
static std::string sSkin;
bool mClickActionDirty; ///< Set to true when the click/double-click options get changed by user.
@@ -216,13 +222,6 @@ private:
std::string mDirectoryVisibility;
LLAvatarData mAvatarProperties;
-
-// Backup settings
-protected:
- std::vector mGlobalFiles; // list of global settings files to copy
- std::vector mGlobalFolders; // list of global folders to copy
- std::vector mPerAccountFiles; // list of per account settings files to copy
-//
};
class LLPanelPreference : public LLPanel
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index cf77ee7281..2450b1c9a0 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -9434,7 +9434,17 @@ Settings restore requires a viewer restart. Do you want to restore your settings
+ yestext="Restore and Quit"/>
+
+
+
+Restore complete! Please restart your viewer now.
+
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_backup.xml b/indra/newview/skins/default/xui/en/panel_preferences_backup.xml
index c0343ae80d..2607b566a1 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_backup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_backup.xml
@@ -14,7 +14,7 @@
name="backup_path_label"
layout="topleft"
follows="left|top"
- top="20"
+ top="10"
left="30"
width="80"
height="20">
@@ -44,8 +44,8 @@ Backup Path:
+
+Settings groups to be restored (backup will always save all):
+
+
+
+
+
+
+
+
+
+
+
+
+ Login Credentials
+ bin_conf.dat
+
+
+
+ Colors
+ colors.xml
+
+
+
+ Ignorable Dialogs
+ ignorable_dialogs.xml
+
+
+
+ User-Defined Grids
+ grids.user.xml
+
+
+
+ Autoreplace
+ autoreplace.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Asset Blacklist
+ asset_blacklist.xml
+
+
+
+ Contact Sets
+ settings_friends_groups.xml
+
+
+
+ Inventory Filters
+ filters.xml
+
+
+
+ Favorites Sort Order
+ landmarks_sorting.xml
+
+
+
+ Media Black/Whitelist
+ medialist.xml
+
+
+
+ Muted Group Chats
+ muted_groups.xml
+
+
+
+ Toolbars
+ toolbars.xml
+
+
+
+ Voice Chat Volumes
+ volume_settings.xml
+
+
+
+ Teleport History
+ teleport_history.xml
+
+
+
+
+
+
+
+
+Folders:
+
+
+
+
+
+
+
+
+ Selection Beams
+ beams
+
+
+
+ Selection Beam Colors
+ beamsColors
+
+
+
+ Custom Spell Check
+ dictionaries
+
+
+
+
+ Windlight (Mandatory)
+ windlight
+
+
+
+ Windlight Day Cycles
+ windlight/days
+
+
+
+ Windlight Skies
+ windlight/skies
+
+
+
+ Windlight Waters
+ windlight/water
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- -->