From a8640ec0af8a477b35ddfd9b83d8704e63edf978 Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Sun, 12 Mar 2006 16:19:03 +0000 Subject: [PATCH] removed the following environment variables: ARDOUR_GLADE_PATH ARDOUR_RC ARDOUR_UI ARDOUR_UI_RC ARDOUR_BINDINGS ARDOUR_COLORS They have been replaced with just one environment variable called ARDOUR_PATH which can contain a number of colon separated paths that are used to find various configuration and data files. Files located in ARDOUR_PATH have priority over files in ~/.ardour/ and in the system path. Moved two member functions of the Configuration class into globals.cc as they should of been static and I'm trying to keep the non-portable code together when it makes sense. git-svn-id: svn://localhost/trunk/ardour2@380 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/actions.cc | 6 +-- gtk2_ardour/ardev_common.sh | 9 ++-- gtk2_ardour/ardour_ui.cc | 21 +++----- gtk2_ardour/ardour_ui_dependents.cc | 6 +-- gtk2_ardour/editor.cc | 2 +- gtk2_ardour/editor_mouse.cc | 6 ++- gtk2_ardour/glade_path.cc | 11 +---- gtk2_ardour/main.cc | 15 ++---- libs/ardour/ardour/ardour.h | 5 ++ libs/ardour/ardour/configuration.h | 3 -- libs/ardour/audio_library.cc | 4 +- libs/ardour/configuration.cc | 73 ++------------------------- libs/ardour/globals.cc | 76 +++++++++++++++++++++-------- libs/ardour/recent_sessions.cc | 4 +- libs/ardour/session.cc | 2 +- libs/ardour/session_state.cc | 10 ++-- 16 files changed, 97 insertions(+), 156 deletions(-) diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index 1ca9278baf..137b8b55e5 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -64,12 +64,8 @@ ActionManager::init () { ui_manager = UIManager::create (); - std::string ui_file = Glib::getenv(X_("ARDOUR_UI")); - - if(!Glib::file_test(ui_file, Glib::FILE_TEST_EXISTS)) ui_file = ARDOUR::find_config_file("ardour.menus"); + std::string ui_file = ARDOUR::find_config_file("ardour.menus"); - std::cout << "Loading UI definition file " << ui_file << std::endl; - bool loaded = false; try { diff --git a/gtk2_ardour/ardev_common.sh b/gtk2_ardour/ardev_common.sh index 2dad81d3ee..9f932e9bbf 100755 --- a/gtk2_ardour/ardev_common.sh +++ b/gtk2_ardour/ardev_common.sh @@ -1,8 +1,5 @@ #export G_DEBUG=fatal_criticals -export ARDOUR_RC=../ardour.rc -export ARDOUR_GLADE_PATH=./glade -export ARDOUR_UI=./ardour.menus -export ARDOUR_UI_RC=./ardour2_ui.rc -export ARDOUR_BINDINGS=./ardour.bindings -export ARDOUR_COLORS=./ardour.colors + +export ARDOUR_PATH=./glade:./pixmaps:.:.. + export LD_LIBRARY_PATH=../libs/ardour:../libs/midi++2:../libs/pbd3:../libs/soundtouch:../libs/gtkmm2ext:$LD_LIBRARY_PATH diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 72bc9948ee..f99d199681 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -131,11 +131,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile) using namespace Gtk::Menu_Helpers; Gtkmm2ext::init(); - - /* actually, its already loaded, but ... */ - - cerr << "Loading UI configuration file " << rcfile << endl; - + about = 0; if (theArdourUI == 0) { @@ -148,12 +144,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile) color_manager = new ColorManager(); - std::string color_file = Glib::getenv(X_("ARDOUR_COLORS")); - if(!Glib::file_test(color_file, Glib::FILE_TEST_EXISTS)) { - color_file = ARDOUR::find_config_file("ardour.colors"); - } - - cerr << "Loading UI color configuration file " << color_file << endl; + std::string color_file = ARDOUR::find_config_file("ardour.colors"); color_manager->load (color_file); @@ -374,8 +365,8 @@ ARDOUR_UI::save_ardour_state () session->add_instant_xml(enode, session->path()); session->add_instant_xml(mnode, session->path()); } else { - Config->add_instant_xml(enode, Config->get_user_ardour_path()); - Config->add_instant_xml(mnode, Config->get_user_ardour_path()); + Config->add_instant_xml(enode, get_user_ardour_path()); + Config->add_instant_xml(mnode, get_user_ardour_path()); } } @@ -2130,7 +2121,7 @@ ARDOUR_UI::mixer_settings () const if (session) { node = session->instant_xml(X_("Mixer"), session->path()); } else { - node = Config->instant_xml(X_("Mixer"), Config->get_user_ardour_path()); + node = Config->instant_xml(X_("Mixer"), get_user_ardour_path()); } if (!node) { @@ -2148,7 +2139,7 @@ ARDOUR_UI::editor_settings () const if (session) { node = session->instant_xml(X_("Editor"), session->path()); } else { - node = Config->instant_xml(X_("Editor"), Config->get_user_ardour_path()); + node = Config->instant_xml(X_("Editor"), get_user_ardour_path()); } if (!node) { diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index dc69ce8483..1f8b0ef702 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -64,12 +64,8 @@ ARDOUR_UI::setup_keybindings () install_actions (); RedirectBox::register_actions (); - std::string key_binding_file = Glib::getenv(X_("ARDOUR_BINDINGS")); + std::string key_binding_file = ARDOUR::find_config_file("ardour.bindings"); - if(!Glib::file_test(key_binding_file, Glib::FILE_TEST_EXISTS)) key_binding_file = ARDOUR::find_config_file("ardour.bindings"); - - std::cout << "Loading key binding file " << key_binding_file << std::endl; - try { AccelMap::load (key_binding_file); } catch (...) { diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 8789632c3b..1012b67211 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -877,7 +877,7 @@ Editor::instant_save () if (session) { session->add_instant_xml(get_state(), session->path()); } else { - Config->add_instant_xml(get_state(), Config->get_user_ardour_path()); + Config->add_instant_xml(get_state(), get_user_ardour_path()); } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 7ec47fe532..8ad1ff6ae0 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -727,8 +727,9 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp break; default: - if (Keyboard::modifier_state_contains (event->button.state, Keyboard::ModifierMask(Keyboard::Alt))) { + if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask(Keyboard::Shift))) { scroll_backward (0.6f); + return true; } else if (Keyboard::no_modifier_keys_pressed (&event->button)) { scroll_tracks_up_line (); @@ -763,8 +764,9 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp break; default: - if (Keyboard::modifier_state_contains (event->button.state, Keyboard::ModifierMask(Keyboard::Alt))) { + if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask(Keyboard::Shift))) { scroll_forward (0.6f); + return true; } else if (Keyboard::no_modifier_keys_pressed (&event->button)) { scroll_tracks_down_line (); diff --git a/gtk2_ardour/glade_path.cc b/gtk2_ardour/glade_path.cc index 3d6476d821..29bca7151f 100644 --- a/gtk2_ardour/glade_path.cc +++ b/gtk2_ardour/glade_path.cc @@ -31,15 +31,8 @@ std::string GladePath::path(const std::string& glade_file) { - std::string user_glade_dir = Glib::getenv(X_("ARDOUR_GLADE_PATH")); std::string full_path; - - if(!user_glade_dir.empty()) { - full_path = Glib::build_filename(user_glade_dir, glade_file); - if(Glib::file_test(full_path, Glib::FILE_TEST_EXISTS)) return full_path; - } - - full_path = ARDOUR::find_data_file(Glib::build_filename("glade", - glade_file)); + + full_path = ARDOUR::find_data_file(glade_file, "glade"); return full_path; } diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc index 3dd0da9250..14330e2009 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -239,18 +239,13 @@ string which_ui_rcfile () { string rcfile; - char* envvar; - - if ((envvar = getenv("ARDOUR_UI_RC")) == 0) { - rcfile = find_config_file ("ardour2_ui.rc"); - if (rcfile.length() == 0) { - warning << _("Without a UI style file, ardour will look strange.\n Please set ARDOUR_UI_RC to point to a valid UI style file") << endmsg; - } - } else { - rcfile = envvar; + rcfile = find_config_file ("ardour2_ui.rc"); + + if (rcfile.length() == 0) { + warning << _("Without a UI style file, ardour will look strange.\n Please set ARDOUR_UI_RC to point to a valid UI style file") << endmsg; } - + return rcfile; } diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h index 293d346823..45b45ecd06 100644 --- a/libs/ardour/ardour/ardour.h +++ b/libs/ardour/ardour/ardour.h @@ -47,6 +47,11 @@ namespace ARDOUR { int init (AudioEngine&, bool with_vst, bool try_optimization, void (*sighandler)(int,siginfo_t*,void*) = 0); int cleanup (); + + + std::string get_user_ardour_path (); + std::string get_system_ardour_path (); + std::string find_config_file (std::string name); std::string find_data_file (std::string name, std::string subdir = "" ); diff --git a/libs/ardour/ardour/configuration.h b/libs/ardour/ardour/configuration.h index 8ae0c0f73a..7fe3b31232 100644 --- a/libs/ardour/ardour/configuration.h +++ b/libs/ardour/ardour/configuration.h @@ -161,9 +161,6 @@ class Configuration : public Stateful bool get_timecode_source_is_synced (); void set_timecode_source_is_synced (bool); - std::string get_user_ardour_path (); - std::string get_system_ardour_path (); - gain_t get_quieten_at_speed (); void set_quieten_at_speed (gain_t); diff --git a/libs/ardour/audio_library.cc b/libs/ardour/audio_library.cc index 33a1ad230e..bf462f7128 100644 --- a/libs/ardour/audio_library.cc +++ b/libs/ardour/audio_library.cc @@ -49,11 +49,11 @@ AudioLibrary::AudioLibrary () { // sfdb_paths.push_back("/Users/taybin/sounds"); - src = "file:" + Config->get_user_ardour_path() + "sfdb"; + src = "file:" + get_user_ardour_path() + "sfdb"; // workaround for possible bug in raptor that crashes when saving to a // non-existant file. - touch_file(Config->get_user_ardour_path() + "sfdb"); + touch_file(get_user_ardour_path() + "sfdb"); lrdf_read_file(src.c_str()); diff --git a/libs/ardour/configuration.cc b/libs/ardour/configuration.cc index 3b4ad4b45f..f73ba1052a 100644 --- a/libs/ardour/configuration.cc +++ b/libs/ardour/configuration.cc @@ -59,24 +59,12 @@ Configuration::~Configuration () string Configuration::get_user_path() { - char *envvar; - - if ((envvar = getenv ("ARDOUR_RC")) != 0) { - return envvar; - } - return find_config_file ("ardour.rc"); } string Configuration::get_system_path() { - char* envvar; - - if ((envvar = getenv ("ARDOUR_SYSTEM_RC")) != 0) { - return envvar; - } - return find_config_file ("ardour_system.rc"); } @@ -92,9 +80,7 @@ Configuration::load_state () if (rcfile.length()) { XMLTree tree; - - cerr << "Loading system configuration file " << rcfile << endl; - + if (!tree.read (rcfile.c_str())) { error << string_compose(_("Ardour: cannot read system configuration file \"%1\""), rcfile) << endmsg; return -1; @@ -117,9 +103,7 @@ Configuration::load_state () if (rcfile.length()) { XMLTree tree; - - cerr << "Loading user configuration file " << rcfile << endl; - + if (!tree.read (rcfile)) { error << string_compose(_("Ardour: cannot read configuration file \"%1\""), rcfile) << endmsg; return -1; @@ -140,28 +124,12 @@ Configuration::save_state() { XMLTree tree; string rcfile; - char *envvar; /* Note: this only writes the per-user file, and therefore only saves variables marked as user-set or modified */ - if ((envvar = getenv ("ARDOUR_RC")) != 0) { - if (strlen (envvar) == 0) { - return -1; - } - rcfile = envvar; - } else { - - if ((envvar = getenv ("HOME")) == 0) { - return -1; - } - if (strlen (envvar) == 0) { - return -1; - } - rcfile = envvar; - rcfile += "/.ardour/ardour.rc"; - } + rcfile = find_config_file("ardour.rc"); if (rcfile.length()) { tree.set_root (&state (true)); @@ -1054,41 +1022,6 @@ Configuration::set_auto_xfade (bool yn) } } -string -Configuration::get_user_ardour_path () -{ - string path; - char* envvar; - - if ((envvar = getenv ("HOME")) == 0 || strlen (envvar) == 0) { - return "/"; - } - - path = envvar; - path += "/.ardour/"; - - return path; -} - -string -Configuration::get_system_ardour_path () -{ - string path; - char* envvar; - - if ((envvar = getenv ("ARDOUR_DATA_PATH")) != 0) { - path += envvar; - if (path[path.length()-1] != ':') { - path += ':'; - } - } - - path += DATA_DIR; - path += "/ardour/"; - - return path; -} - bool Configuration::get_no_new_session_dialog() { diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index ad7f5c0cc8..9c3cadafe2 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -298,37 +299,72 @@ ARDOUR::new_change () return c; } +string +ARDOUR::get_user_ardour_path () +{ + string path; + char* envvar; + + if ((envvar = getenv ("HOME")) == 0 || strlen (envvar) == 0) { + return "/"; + } + + path = envvar; + path += "/.ardour/"; + + return path; +} + +string +ARDOUR::get_system_ardour_path () +{ + string path; + + path += DATA_DIR; + path += "/ardour/"; + + return path; +} + static string find_file (string name, string dir, string subdir = "") { string path; + char* envvar = getenv("ARDOUR_PATH"); - /* stop A: ~/.ardour/... */ + /* stop A: any directory in ARDOUR_PATH */ + + if (envvar != 0) { - path = getenv ("HOME"); - - if (path.length()) { + vector split_path; + + split (envvar, split_path, ':'); - path += "/.ardour/"; - - /* try to ensure that the directory exists. - failure doesn't mean much here. - */ - - mkdir (path.c_str(), 0755); - - if (subdir.length()) { - path += subdir + "/"; - } - - path += name; - if (access (path.c_str(), R_OK) == 0) { - return path; + for (vector::iterator i = split_path.begin(); i != split_path.end(); ++i) { + path = *i; + path += "/" + name; + if (access (path.c_str(), R_OK) == 0) { + cerr << "Using file " << path << " found in ARDOUR_PATH." << endl; + return path; + } } } - /* stop B: dir/... */ + /* stop B: ~/.ardour/ */ + path = get_user_ardour_path(); + + if (subdir.length()) { + path += subdir + "/"; + } + + path += name; + if (access (path.c_str(), R_OK) == 0) { + return path; + } + + /* C: dir/... */ + path = dir; path += "/ardour/"; diff --git a/libs/ardour/recent_sessions.cc b/libs/ardour/recent_sessions.cc index a5c6b210ee..efbdb807f7 100644 --- a/libs/ardour/recent_sessions.cc +++ b/libs/ardour/recent_sessions.cc @@ -34,7 +34,7 @@ using namespace ARDOUR; int ARDOUR::read_recent_sessions (RecentSessions& rs) { - string path = Config->get_user_ardour_path(); + string path = get_user_ardour_path(); path += "/recent"; ifstream recent (path.c_str()); @@ -82,7 +82,7 @@ ARDOUR::read_recent_sessions (RecentSessions& rs) int ARDOUR::write_recent_sessions (RecentSessions& rs) { - string path = Config->get_user_ardour_path(); + string path = get_user_ardour_path(); path += "/recent"; ofstream recent (path.c_str()); diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 4361bd244e..9b61b5d816 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -3409,7 +3409,7 @@ void Session::add_instant_xml (XMLNode& node, const std::string& dir) { Stateful::add_instant_xml (node, dir); - Config->add_instant_xml (node, Config->get_user_ardour_path()); + Config->add_instant_xml (node, get_user_ardour_path()); } int diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 241d54c8b6..5bb7ad01e4 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -2241,7 +2241,7 @@ Session::automation_dir () const string Session::template_dir () { - string path = Config->get_user_ardour_path(); + string path = get_user_ardour_path(); path += "templates/"; return path; @@ -2252,11 +2252,11 @@ Session::template_path () { string path; - path += Config->get_user_ardour_path(); + path += get_user_ardour_path(); if (path[path.length()-1] != ':') { path += ':'; } - path += Config->get_system_ardour_path(); + path += get_system_ardour_path(); vector split_path; @@ -2654,7 +2654,7 @@ Session::get_template_list (list &template_names) int Session::read_favorite_dirs (FavoriteDirs & favs) { - string path = Config->get_user_ardour_path(); + string path = get_user_ardour_path(); path += "/favorite_dirs"; ifstream fav (path.c_str()); @@ -2689,7 +2689,7 @@ Session::read_favorite_dirs (FavoriteDirs & favs) int Session::write_favorite_dirs (FavoriteDirs & favs) { - string path = Config->get_user_ardour_path(); + string path = get_user_ardour_path(); path += "/favorite_dirs"; ofstream fav (path.c_str());