patch from colinf to handle default session dir a little better

git-svn-id: svn://localhost/ardour2/branches/3.0@11694 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2012-03-15 12:04:00 +00:00
parent 78abd0538b
commit 9593d6e9cf
2 changed files with 26 additions and 13 deletions

View File

@ -1349,6 +1349,17 @@ ARDOUR_UI::open_session ()
open_session_selector->add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
open_session_selector->add_button (Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT);
open_session_selector->set_default_response(Gtk::RESPONSE_ACCEPT);
if (_session) {
string session_parent_dir = Glib::path_get_dirname(_session->path());
string::size_type last_dir_sep = session_parent_dir.rfind(G_DIR_SEPARATOR);
session_parent_dir = session_parent_dir.substr(0, last_dir_sep);
open_session_selector->set_current_folder(session_parent_dir);
} else {
open_session_selector->set_current_folder(Config->get_default_session_parent_dir());
}
open_session_selector->add_shortcut_folder (Config->get_default_session_parent_dir());
FileFilter session_filter;
session_filter.add_pattern ("*.ardour");
@ -2577,19 +2588,10 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
continue;
}
if (session_name.find ('/') != std::string::npos) {
MessageDialog msg (*_startup,
_("To ensure compatibility with various systems\n"
"session names may not contain a '/' character"));
msg.run ();
ARDOUR_COMMAND_LINE::session_name = ""; // cancel that
continue;
}
if (session_name.find ('\\') != std::string::npos) {
MessageDialog msg (*_startup,
_("To ensure compatibility with various systems\n"
"session names may not contain a '\\' character"));
char illegal = Session::session_name_is_legal(session_name);
if (illegal) {
MessageDialog msg (*_startup, string_compose(_("To ensure compatibility with various systems\n"
"session names may not contain a '%1' character"), illegal));
msg.run ();
ARDOUR_COMMAND_LINE::session_name = ""; // cancel that
continue;

View File

@ -39,6 +39,7 @@
#include "ardour/session_state_utils.h"
#include "ardour/template_utils.h"
#include "ardour_ui.h"
#include "startup.h"
#include "opts.h"
#include "engine_dialog.h"
@ -361,6 +362,8 @@ void
ArdourStartup::default_dir_changed ()
{
Config->set_default_session_parent_dir (default_dir_chooser->get_filename());
// make new session folder chooser point to the new default
new_folder_chooser.set_current_folder (Config->get_default_session_parent_dir());
config_changed ();
}
@ -584,6 +587,7 @@ ArdourStartup::setup_initial_choice_page ()
existing_session_chooser.set_title (_("Select session file"));
existing_session_chooser.signal_file_set().connect (sigc::mem_fun (*this, &ArdourStartup::existing_session_selected));
existing_session_chooser.set_current_folder(poor_mans_glob (Config->get_default_session_parent_dir()));
#ifdef GTKOSX
existing_session_chooser.add_shortcut_folder ("/Volumes");
@ -804,6 +808,13 @@ ArdourStartup::setup_new_session_page ()
if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
new_folder_chooser.set_current_folder (poor_mans_glob (Glib::path_get_dirname (ARDOUR_COMMAND_LINE::session_name)));
} else if (ARDOUR_UI::instance()->session_loaded) {
// point the new session file chooser at the parent directory of the current session
string session_parent_dir = Glib::path_get_dirname(ARDOUR_UI::instance()->the_session()->path());
string::size_type last_dir_sep = session_parent_dir.rfind(G_DIR_SEPARATOR);
session_parent_dir = session_parent_dir.substr(0, last_dir_sep);
new_folder_chooser.set_current_folder (session_parent_dir);
new_folder_chooser.add_shortcut_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
} else {
new_folder_chooser.set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
}