From 11af3f8fdf1daff7a2eda1ce4b2c4926229e4bc0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 14 Mar 2008 20:18:05 +0000 Subject: enable icon-start-from-.ardour-file to work on OS X; properly install apple event handlers; change plugin add logic to avoid asking for stream counts before they would be configured; fix up new session dialog to not use manage(), and thus not throw away widgets when their page is hidden (by removal) in the tabbed browser git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3144 d708f5d6-7413-0410-9779-e7cbd77b26cf --- ardour_system_sae.rc | 51 +++++++++++++ gtk2_ardour/ardour-sae.menus | 5 ++ gtk2_ardour/ardour_ui.cc | 36 ++++++++- gtk2_ardour/ardour_ui.h | 3 +- gtk2_ardour/ardour_ui_options.cc | 5 ++ gtk2_ardour/cocoacarbon.mm | 73 +++++++++++++++---- gtk2_ardour/editor.cc | 4 + gtk2_ardour/editor_actions.cc | 1 + gtk2_ardour/export_dialog.cc | 9 +-- gtk2_ardour/export_dialog.h | 2 - gtk2_ardour/main.cc | 2 +- gtk2_ardour/new_session_dialog.cc | 125 ++++++++++++++++---------------- libs/ardour/ardour/configuration_vars.h | 4 +- libs/ardour/audio_unit.cc | 11 ++- libs/ardour/route.cc | 54 +++++++------- libs/ardour/session.cc | 6 -- libs/pbd/SConscript | 1 - libs/pbd/misc.c | 21 ------ libs/pbd/pbd/misc.h | 15 ---- svn_revision.h | 2 +- tools/osx_packaging/osx_build | 9 ++- 21 files changed, 265 insertions(+), 174 deletions(-) create mode 100644 ardour_system_sae.rc delete mode 100644 libs/pbd/misc.c delete mode 100644 libs/pbd/pbd/misc.h diff --git a/ardour_system_sae.rc b/ardour_system_sae.rc new file mode 100644 index 0000000000..551ee61fca --- /dev/null +++ b/ardour_system_sae.rc @@ -0,0 +1,51 @@ + + + + + + + + + + + + diff --git a/gtk2_ardour/ardour-sae.menus b/gtk2_ardour/ardour-sae.menus index c5d3a26e27..0c84bcc114 100644 --- a/gtk2_ardour/ardour-sae.menus +++ b/gtk2_ardour/ardour-sae.menus @@ -279,6 +279,11 @@ + + + + + diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 8f543b5e8f..a465eed360 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -2192,6 +2191,28 @@ ARDOUR_UI::loading_message (const std::string& msg) flush_pending (); } +void +ARDOUR_UI::idle_load (const Glib::ustring& path) +{ + if (session) { + if (Glib::file_test (path, Glib::FILE_TEST_IS_DIR)) { + /* /path/to/foo => /path/to/foo, foo */ + load_session (path, basename_nosuffix (path)); + } else { + /* /path/to/foo/foo.ardour => /path/to/foo, foo */ + load_session (Glib::path_get_dirname (path), basename_nosuffix (path)); + } + } else { + ARDOUR_COMMAND_LINE::session_name = path; + if (new_session_dialog) { + /* make it break out of Dialog::run() and + start again. + */ + new_session_dialog->response (1); + } + } +} + bool ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be_new) { @@ -2199,8 +2220,10 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be Glib::ustring session_name; Glib::ustring session_path; Glib::ustring template_name; + int response; - int response = Gtk::RESPONSE_NONE; + begin: + response = Gtk::RESPONSE_NONE; if (!ARDOUR_COMMAND_LINE::session_name.empty()) { @@ -2243,6 +2266,13 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be /* handle possible negative responses */ switch (response) { + case 1: + /* sent by idle_load, meaning restart the whole process again */ + new_session_dialog->hide(); + new_session_dialog->reset(); + goto begin; + break; + case Gtk::RESPONSE_CANCEL: case Gtk::RESPONSE_DELETE_EVENT: if (!session) { @@ -2421,7 +2451,6 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na } loading_message (_("Please wait while Ardour loads your session")); - disable_screen_updates (); try { new_session = new Session (*engine, path, snap_name, mix_template); @@ -2493,7 +2522,6 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na session->set_clean (); } - enable_screen_updates (); flush_pending (); retval = 0; diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 93d1c58150..7de4c1e28b 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -115,7 +115,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI void show_about (); void hide_about (); - int load_session (const Glib::ustring & path, const Glib::ustring& snapshot, Glib::ustring mix_template = Glib::ustring()); + void idle_load (const Glib::ustring& path); + int load_session (const Glib::ustring& path, const Glib::ustring& snapshot, Glib::ustring mix_template = Glib::ustring()); bool session_loaded; int build_session (const Glib::ustring& path, const Glib::ustring& snapshot, uint32_t ctl_chns, diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index fcce64ec39..ab42743391 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -1056,10 +1056,13 @@ ARDOUR_UI::parameter_changed (const char* parameter_name) } else if (PARAM_IS ("send-mtc")) { ActionManager::map_some_state ("options", "SendMTC", &Configuration::get_send_mtc); + cerr << "Send MMC = " << Config->get_send_mmc() << endl; } else if (PARAM_IS ("send-mmc")) { + ActionManager::map_some_state ("options", "SendMMC", &Configuration::get_send_mmc); + cerr << "Send MMC = " << Config->get_send_mmc() << endl; } else if (PARAM_IS ("use-osc")) { @@ -1075,6 +1078,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name) } else if (PARAM_IS ("mmc-control")) { ActionManager::map_some_state ("options", "UseMMC", &Configuration::get_mmc_control); + cerr << "Use MMC = " << Config->get_mmc_control() << endl; + } else if (PARAM_IS ("midi-feedback")) { ActionManager::map_some_state ("options", "SendMIDIfeedback", &Configuration::get_midi_feedback); } else if (PARAM_IS ("do-not-record-plugins")) { diff --git a/gtk2_ardour/cocoacarbon.mm b/gtk2_ardour/cocoacarbon.mm index 75141d34f6..75df481186 100644 --- a/gtk2_ardour/cocoacarbon.mm +++ b/gtk2_ardour/cocoacarbon.mm @@ -27,6 +27,7 @@ #include #include +#include sigc::signal ApplicationActivationChanged; static EventHandlerRef application_event_handler_ref; @@ -40,18 +41,51 @@ handle_reopen_application (const AppleEvent *inAppleEvent, AppleEvent *outAppleEvent, long inHandlerRefcon) { - cerr << "reopen app\n"; return noErr; } + static OSErr -handle_quit_application (const AppleEvent *inAppleEvent, +handle_print_documents (const AppleEvent *inAppleEvent, + AppleEvent *outAppleEvent, + long inHandlerRefcon) +{ + return noErr; +} + + +static OSErr +handle_open_documents (const AppleEvent *inAppleEvent, + AppleEvent *outAppleEvent, + long inHandlerRefcon) +{ + AEDescList docs; + + if (AEGetParamDesc(inAppleEvent, keyDirectObject, typeAEList, &docs) == noErr) { + long n = 0; + AECountItems(&docs, &n); + UInt8 strBuffer[PATH_MAX+1]; + + /* ardour only opens 1 session at a time */ + + FSRef ref; + + if (AEGetNthPtr(&docs, 1, typeFSRef, 0, 0, &ref, sizeof(ref), 0) == noErr) { + if (FSRefMakePath(&ref, strBuffer, sizeof(strBuffer)) == noErr) { + Glib::ustring utf8_path ((const char*) strBuffer); + ARDOUR_UI::instance()->idle_load (utf8_path); + } + } + } + + return noErr; +} + +static OSErr +handle_open_application (const AppleEvent *inAppleEvent, AppleEvent *outAppleEvent, long inHandlerRefcon) { - cerr << "quit app\n"; - ARDOUR_UI::instance()->quit (); - return noErr; } @@ -79,12 +113,6 @@ application_event_handler (EventHandlerCallRef nextHandlerRef, EventRef event, v void ARDOUR_UI::platform_specific () { - AEInstallEventHandler (kCoreEventClass, kAEReopenApplication, - handle_reopen_application, 0, true); - - AEInstallEventHandler (kCoreEventClass, kAEQuitApplication, - handle_quit_application, 0, true); - Gtk::Widget* widget = ActionManager::get_widget ("/ui/Main/Session/Quit"); if (widget) { ige_mac_menu_set_quit_menu_item ((GtkMenuItem*) widget->gobj()); @@ -97,9 +125,26 @@ ARDOUR_UI::platform_specific () ige_mac_menu_add_app_menu_item (group, (GtkMenuItem*) widget->gobj(), 0); } widget = ActionManager::get_widget ("/ui/Main/Session/ToggleOptionsEditor"); + if (widget) { ige_mac_menu_add_app_menu_item (group, (GtkMenuItem*) widget->gobj(), 0); } +} + +void +ARDOUR_UI::platform_setup () +{ + AEInstallEventHandler (kCoreEventClass, kAEOpenDocuments, + handle_open_documents, 0, true); + + AEInstallEventHandler (kCoreEventClass, kAEOpenApplication, + handle_open_application, 0, true); + + AEInstallEventHandler (kCoreEventClass, kAEReopenApplication, + handle_reopen_application, 0, true); + + AEInstallEventHandler (kCoreEventClass, kAEPrintDocuments, + handle_print_documents, 0, true); EventTypeSpec applicationEventTypes[] = { {kEventClassApplication, kEventAppActivated }, @@ -110,11 +155,6 @@ ARDOUR_UI::platform_specific () InstallApplicationEventHandler (ehUPP, sizeof(applicationEventTypes) / sizeof(EventTypeSpec), applicationEventTypes, 0, &application_event_handler_ref); -} - -void -ARDOUR_UI::platform_setup () -{ if (!ARDOUR_COMMAND_LINE::finder_invoked_ardour) { /* if invoked from the command line, make sure we're visible */ @@ -122,3 +162,4 @@ ARDOUR_UI::platform_setup () [NSApp activateIgnoringOtherApps:1]; } } + diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index d6c7911ed4..ae97df9011 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -589,6 +589,10 @@ Editor::Editor () region_list_display.set_size_request (100, -1); region_list_display.set_name ("RegionListDisplay"); + /* Try to prevent single mouse presses from initiating edits. + This relies on a hack in gtktreeview.c:gtk_treeview_button_press() + */ + region_list_display.set_data ("mouse-edits-require-mod1", (gpointer) 0x1); region_list_model = TreeStore::create (region_list_columns); region_list_model->set_sort_func (0, mem_fun (*this, &Editor::region_list_sorter)); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 70225d605b..fdcce41e68 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -81,6 +81,7 @@ Editor::register_actions () ActionManager::register_action (editor_actions, X_("SetPunchMenu"), _("Punch")); ActionManager::register_action (editor_actions, X_("Solo"), _("Solo")); ActionManager::register_action (editor_actions, X_("Subframes"), _("Subframes")); + ActionManager::register_action (editor_actions, X_("SyncMenu"), _("Sync")); ActionManager::register_action (editor_actions, X_("TempoMenu"), _("Tempo")); ActionManager::register_action (editor_actions, X_("Timecode"), _("Timecode fps")); ActionManager::register_action (editor_actions, X_("TrackHeightMenu"), _("Height")); diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc index 84dd7cacc1..5fe5a56205 100644 --- a/gtk2_ardour/export_dialog.cc +++ b/gtk2_ardour/export_dialog.cc @@ -127,7 +127,7 @@ ExportDialog::ExportDialog(PublicEditor& e) set_title (title.get_string()); set_wmclass (X_("ardour_export"), "Ardour"); set_name ("ExportWindow"); - set_events (get_events()|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK); + add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK); spec.running = false; @@ -388,13 +388,6 @@ ExportDialog::~ExportDialog() { } -bool -ExportDialog::on_event (GdkEvent* ev) -{ - cerr << "ED event type " << ev->type << endl; - return false; -} - void ExportDialog::do_not_allow_track_and_master_selection() { diff --git a/gtk2_ardour/export_dialog.h b/gtk2_ardour/export_dialog.h index 94420a74ec..596467d3e1 100644 --- a/gtk2_ardour/export_dialog.h +++ b/gtk2_ardour/export_dialog.h @@ -47,8 +47,6 @@ class ExportDialog : public ArdourDialog virtual Gtk::FileChooserAction browse_action() const { return Gtk::FILE_CHOOSER_ACTION_SAVE; } - bool on_event (GdkEvent* ev); - protected: ARDOUR::AudioExportSpecification spec; Gtk::Frame file_frame; diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc index 707a4155a7..7f856adab6 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -225,7 +225,7 @@ int main (int argc, char* argv[]) #endif { vector null_file_list; - + #ifdef __APPLE__ fixup_bundle_environment (); #endif diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc index 604d486990..608fd5e646 100644 --- a/gtk2_ardour/new_session_dialog.cc +++ b/gtk2_ardour/new_session_dialog.cc @@ -37,6 +37,7 @@ #include +using namespace Gtk; using namespace Gtkmm2ext; using namespace PBD; @@ -47,14 +48,14 @@ NewSessionDialog::NewSessionDialog() : ArdourDialog ("session control") { in_destructor = false; - session_name_label = Gtk::manage(new class Gtk::Label(_("Name :"))); - m_name = Gtk::manage(new class Gtk::Entry()); + session_name_label = new Gtk::Label(_("Name :")); + m_name = new Gtk::Entry(); m_name->set_text(ARDOUR_COMMAND_LINE::session_name); - chan_count_label_1 = Gtk::manage(new class Gtk::Label(_("channels"))); - chan_count_label_2 = Gtk::manage(new class Gtk::Label(_("channels"))); - chan_count_label_3 = Gtk::manage(new class Gtk::Label(_("channels"))); - chan_count_label_4 = Gtk::manage(new class Gtk::Label(_("channels"))); + chan_count_label_1 = new Gtk::Label(_("channels")); + chan_count_label_2 = new Gtk::Label(_("channels")); + chan_count_label_3 = new Gtk::Label(_("channels")); + chan_count_label_4 = new Gtk::Label(_("channels")); chan_count_label_1->set_alignment(0,0.5); chan_count_label_1->set_padding(0,0); @@ -72,64 +73,64 @@ NewSessionDialog::NewSessionDialog() chan_count_label_4->set_padding(0,0); chan_count_label_4->set_line_wrap(false); - bus_label = Gtk::manage(new class Gtk::Label(_("Busses"))); - input_label = Gtk::manage(new class Gtk::Label(_("Inputs"))); - output_label = Gtk::manage(new class Gtk::Label(_("Outputs"))); + bus_label = new Gtk::Label(_("Busses")); + input_label = new Gtk::Label(_("Inputs")); + output_label = new Gtk::Label(_("Outputs")); - session_location_label = Gtk::manage(new class Gtk::Label(_("Create Folder In :"))); - m_folder = Gtk::manage(new class Gtk::FileChooserButton(Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER)); - session_template_label = Gtk::manage(new class Gtk::Label(_("Template :"))); - m_template = Gtk::manage(new class Gtk::FileChooserButton()); - m_create_control_bus = Gtk::manage(new class Gtk::CheckButton(_("Create Monitor Bus"))); + session_location_label = new Gtk::Label(_("Create Folder In :")); + m_folder = new Gtk::FileChooserButton(Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); + session_template_label = new Gtk::Label(_("Template :")); + m_template = new Gtk::FileChooserButton(); + m_create_control_bus = new Gtk::CheckButton(_("Create Monitor Bus")); - Gtk::Adjustment *m_control_bus_channel_count_adj = Gtk::manage(new class Gtk::Adjustment(2, 0, 100, 1, 10, 10)); - m_control_bus_channel_count = Gtk::manage(new class Gtk::SpinButton(*m_control_bus_channel_count_adj, 1, 0)); + Gtk::Adjustment *m_control_bus_channel_count_adj = Gtk::manage(new Gtk::Adjustment(2, 0, 100, 1, 10, 10)); + m_control_bus_channel_count = new Gtk::SpinButton(*m_control_bus_channel_count_adj, 1, 0); - Gtk::Adjustment *m_master_bus_channel_count_adj = Gtk::manage(new class Gtk::Adjustment(2, 0, 100, 1, 10, 10)); - m_master_bus_channel_count = Gtk::manage(new class Gtk::SpinButton(*m_master_bus_channel_count_adj, 1, 0)); - m_create_master_bus = Gtk::manage(new class Gtk::CheckButton(_("Create Master Bus"))); - advanced_table = Gtk::manage(new class Gtk::Table(2, 2, true)); - m_connect_inputs = Gtk::manage(new class Gtk::CheckButton(_("Automatically Connect to Physical Inputs"))); - m_limit_input_ports = Gtk::manage(new class Gtk::CheckButton(_("Use only"))); + Gtk::Adjustment *m_master_bus_channel_count_adj = Gtk::manage(new Gtk::Adjustment(2, 0, 100, 1, 10, 10)); + m_master_bus_channel_count = new Gtk::SpinButton(*m_master_bus_channel_count_adj, 1, 0); + m_create_master_bus = new Gtk::CheckButton(_("Create Master Bus")); + advanced_table = new Gtk::Table(2, 2, true); + m_connect_inputs = new Gtk::CheckButton(_("Automatically Connect to Physical Inputs")); + m_limit_input_ports = new Gtk::CheckButton(_("Use only")); - Gtk::Adjustment *m_input_limit_count_adj = Gtk::manage(new class Gtk::Adjustment(1, 0, 100, 1, 10, 10)); - m_input_limit_count = Gtk::manage(new class Gtk::SpinButton(*m_input_limit_count_adj, 1, 0)); - input_port_limit_hbox = Gtk::manage(new class Gtk::HBox(false, 0)); - input_port_vbox = Gtk::manage(new class Gtk::VBox(false, 0)); - input_table = Gtk::manage(new class Gtk::Table(2, 2, false)); - - bus_frame = Gtk::manage(new class Gtk::Frame()); - bus_table = Gtk::manage (new Gtk::Table (2, 3, false)); - - input_frame = Gtk::manage(new class Gtk::Frame()); - m_connect_outputs = Gtk::manage(new class Gtk::CheckButton(_("Automatically Connect Outputs"))); - m_limit_output_ports = Gtk::manage(new class Gtk::CheckButton(_("Use only"))); + Gtk::Adjustment *m_input_limit_count_adj = Gtk::manage(new Gtk::Adjustment(1, 0, 100, 1, 10, 10)); + m_input_limit_count = new Gtk::SpinButton(*m_input_limit_count_adj, 1, 0); + input_port_limit_hbox = new Gtk::HBox(false, 0); + input_port_vbox = new Gtk::VBox(false, 0); + input_table = new Gtk::Table(2, 2, false); + + bus_frame = new Gtk::Frame(); + bus_table = new Gtk::Table (2, 3, false); - Gtk::Adjustment *m_output_limit_count_adj = Gtk::manage(new class Gtk::Adjustment(1, 0, 100, 1, 10, 10)); - m_output_limit_count = Gtk::manage(new class Gtk::SpinButton(*m_output_limit_count_adj, 1, 0)); - output_port_limit_hbox = Gtk::manage(new class Gtk::HBox(false, 0)); - output_port_vbox = Gtk::manage(new class Gtk::VBox(false, 0)); + input_frame = new Gtk::Frame(); + m_connect_outputs = new Gtk::CheckButton(_("Automatically Connect Outputs")); + m_limit_output_ports = new Gtk::CheckButton(_("Use only")); + + Gtk::Adjustment *m_output_limit_count_adj = Gtk::manage(new Gtk::Adjustment(1, 0, 100, 1, 10, 10)); + m_output_limit_count = new Gtk::SpinButton(*m_output_limit_count_adj, 1, 0); + output_port_limit_hbox = new Gtk::HBox(false, 0); + output_port_vbox = new Gtk::VBox(false, 0); Gtk::RadioButton::Group _RadioBGroup_m_connect_outputs_to_master; - m_connect_outputs_to_master = Gtk::manage(new class Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Master Bus"))); - m_connect_outputs_to_physical = Gtk::manage(new class Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Physical Outputs"))); - output_conn_vbox = Gtk::manage(new class Gtk::VBox(false, 0)); - output_vbox = Gtk::manage(new class Gtk::VBox(false, 0)); - - output_frame = Gtk::manage(new class Gtk::Frame()); - advanced_vbox = Gtk::manage(new class Gtk::VBox(false, 0)); - advanced_label = Gtk::manage(new class Gtk::Label(_("Advanced Options"))); - advanced_expander = Gtk::manage(new class Gtk::Expander()); - new_session_table = Gtk::manage(new class Gtk::Table(2, 2, false)); - m_open_filechooser = Gtk::manage(new class Gtk::FileChooserButton()); - open_session_hbox = Gtk::manage(new class Gtk::HBox(false, 0)); - m_treeview = Gtk::manage(new class Gtk::TreeView()); - recent_scrolledwindow = Gtk::manage(new class Gtk::ScrolledWindow()); - - recent_sesion_label = Gtk::manage(new class Gtk::Label(_("Recent:"))); - recent_frame = Gtk::manage(new class Gtk::Frame()); - open_session_vbox = Gtk::manage(new class Gtk::VBox(false, 0)); - m_notebook = Gtk::manage(new class Gtk::Notebook()); + m_connect_outputs_to_master = new Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Master Bus")); + m_connect_outputs_to_physical = new Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Physical Outputs")); + output_conn_vbox = new Gtk::VBox(false, 0); + output_vbox = new Gtk::VBox(false, 0); + + output_frame = new Gtk::Frame(); + advanced_vbox = new Gtk::VBox(false, 0); + advanced_label = new Gtk::Label(_("Advanced Options")); + advanced_expander = new Gtk::Expander(); + new_session_table = new Gtk::Table(2, 2, false); + m_open_filechooser = new Gtk::FileChooserButton(); + open_session_hbox = new Gtk::HBox(false, 0); + m_treeview = new Gtk::TreeView(); + recent_scrolledwindow = new Gtk::ScrolledWindow(); + + recent_sesion_label = new Gtk::Label(_("Recent:")); + recent_frame = new Gtk::Frame(); + open_session_vbox = new Gtk::VBox(false, 0); + m_notebook = new Gtk::Notebook(); session_name_label->set_alignment(0, 0.5); session_name_label->set_padding(6,0); session_name_label->set_line_wrap(false); @@ -163,7 +164,7 @@ NewSessionDialog::NewSessionDialog() m_master_bus_channel_count->set_numeric(true); m_master_bus_channel_count->set_digits(0); m_master_bus_channel_count->set_wrap(false); - open_session_file_label = Gtk::manage(new class Gtk::Label(_("Browse:"))); + open_session_file_label = new Gtk::Label(_("Browse:")); open_session_file_label->set_alignment(0, 0.5); m_create_master_bus->set_flags(Gtk::CAN_FOCUS); m_create_master_bus->set_relief(Gtk::RELIEF_NORMAL); @@ -172,7 +173,7 @@ NewSessionDialog::NewSessionDialog() m_create_master_bus->set_border_width(0); advanced_table->set_row_spacings(0); advanced_table->set_col_spacings(0); - + m_connect_inputs->set_flags(Gtk::CAN_FOCUS); m_connect_inputs->set_relief(Gtk::RELIEF_NORMAL); m_connect_inputs->set_mode(true); @@ -191,7 +192,7 @@ NewSessionDialog::NewSessionDialog() m_input_limit_count->set_wrap(false); m_input_limit_count->set_sensitive(false); - bus_hbox = Gtk::manage (new Gtk::HBox (false, 0)); + bus_hbox = new Gtk::HBox (false, 0); bus_hbox->pack_start (*bus_table, Gtk::PACK_SHRINK, 18); bus_label->set_alignment(0, 0.5); @@ -222,7 +223,7 @@ NewSessionDialog::NewSessionDialog() input_table->set_col_spacings(0); input_table->attach(*input_port_vbox, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 6); - input_hbox = Gtk::manage (new Gtk::HBox (false, 0)); + input_hbox = new Gtk::HBox (false, 0); input_hbox->pack_start (*input_table, Gtk::PACK_SHRINK, 18); input_label->set_alignment(0, 0.5); @@ -282,7 +283,7 @@ NewSessionDialog::NewSessionDialog() output_frame->set_shadow_type(Gtk::SHADOW_NONE); output_frame->set_label_align(0,0.5); - output_hbox = Gtk::manage (new Gtk::HBox (false, 0)); + output_hbox = new Gtk::HBox (false, 0); output_hbox->pack_start (*output_vbox, Gtk::PACK_SHRINK, 18); output_frame->add(*output_hbox); diff --git a/libs/ardour/ardour/configuration_vars.h b/libs/ardour/ardour/configuration_vars.h index 3a6c8399b0..e2fd95edd0 100644 --- a/libs/ardour/ardour/configuration_vars.h +++ b/libs/ardour/ardour/configuration_vars.h @@ -33,8 +33,8 @@ CONFIG_VARIABLE (std::string, midi_port_name, "midi-port-name", "default") CONFIG_VARIABLE (bool, trace_midi_input, "trace-midi-input", false) CONFIG_VARIABLE (bool, trace_midi_output, "trace-midi-output", false) CONFIG_VARIABLE (bool, send_mtc, "send-mtc", false) -CONFIG_VARIABLE (bool, send_mmc, "send-mmc", false) -CONFIG_VARIABLE (bool, mmc_control, "mmc-control", false) +CONFIG_VARIABLE (bool, send_mmc, "send-mmc", true) +CONFIG_VARIABLE (bool, mmc_control, "mmc-control", true) CONFIG_VARIABLE (bool, midi_feedback, "midi-feedback", false) CONFIG_VARIABLE (uint8_t, mmc_receive_device_id, "mmc-receive-device-id", 0) CONFIG_VARIABLE (uint8_t, mmc_send_device_id, "mmc-send-device-id", 0x7f) diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index df4ff59be5..93cab504f6 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -93,12 +93,10 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptrInitialize()) != noErr) { - error << string_compose (_("AUPlugin: cannot initialize plugin (err = %1)"), err) << endmsg; + error << string_compose (_("AUPlugin: %1 cannot initialize plugin (err = %2)"), name(), err) << endmsg; } else { frames_processed = 0; initialized = true; @@ -454,9 +452,10 @@ uint32_t AUPlugin::output_streams() const { if (!(format_set & 0x2)) { - warning << _("AUPlugin: output_streams() called without any format set!") << endmsg; + warning << string_compose (_("AUPlugin: %1 output_streams() called without any format set!"), name()) << endmsg; return 1; } + return streamFormat.mChannelsPerFrame; } diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 1b26dd8c7f..f63524032d 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -861,6 +861,14 @@ Route::add_redirect (boost::shared_ptr redirect, void *src, uint32_t* boost::shared_ptr pi; boost::shared_ptr porti; + _redirects.push_back (redirect); + + if (_reset_plugin_counts (err_streams)) { + _redirects.pop_back (); + _reset_plugin_counts (0); // it worked before we tried to add it ... + return -1; + } + uint32_t potential_max_streams = 0; if ((pi = boost::dynamic_pointer_cast(redirect)) != 0) { @@ -901,14 +909,6 @@ Route::add_redirect (boost::shared_ptr redirect, void *src, uint32_t* _max_peak_power.push_back(-INFINITY); } - _redirects.push_back (redirect); - - if (_reset_plugin_counts (err_streams)) { - _redirects.pop_back (); - _reset_plugin_counts (0); // it worked before we tried to add it ... - return -1; - } - redirect->activate (); redirect->active_changed.connect (mem_fun (*this, &Route::redirect_active_proxy)); } @@ -1129,14 +1129,14 @@ int Route::_reset_plugin_counts (uint32_t* err_streams) { RedirectList::iterator r; - uint32_t i_cnt; - uint32_t s_cnt; + uint32_t insert_cnt = 0; + uint32_t send_cnt = 0; map > insert_map; + RedirectList::iterator prev; nframes_t initial_streams; + int ret = -1; redirect_max_outs = 0; - i_cnt = 0; - s_cnt = 0; /* divide inserts up by placement so we get the signal flow properly modelled. we need to do this because the _redirects @@ -1148,14 +1148,8 @@ Route::_reset_plugin_counts (uint32_t* err_streams) boost::shared_ptr insert; - /* do this here in case we bomb out before we get to the end of - this function. - */ - - redirect_max_outs = max ((*r)->output_streams (), redirect_max_outs); - if ((insert = boost::dynamic_pointer_cast(*r)) != 0) { - ++i_cnt; + ++insert_cnt; insert_map[insert->placement()].push_back (InsertCount (insert)); /* reset plugin counts back to one for now so @@ -1170,15 +1164,16 @@ Route::_reset_plugin_counts (uint32_t* err_streams) } } else if (boost::dynamic_pointer_cast (*r) != 0) { - ++s_cnt; + ++send_cnt; } } - if (i_cnt == 0) { - if (s_cnt) { + if (insert_cnt == 0) { + if (send_cnt) { goto recompute; } else { - return 0; + ret = 0; + goto streamcount; } } @@ -1189,7 +1184,7 @@ Route::_reset_plugin_counts (uint32_t* err_streams) /* A: PreFader */ if (check_some_plugin_counts (insert_map[PreFader], n_inputs (), err_streams)) { - return -1; + goto streamcount; } /* figure out the streams that will feed into PreFader */ @@ -1204,7 +1199,7 @@ Route::_reset_plugin_counts (uint32_t* err_streams) /* B: PostFader */ if (check_some_plugin_counts (insert_map[PostFader], initial_streams, err_streams)) { - return -1; + goto streamcount; } /* OK, everything can be set up correctly, so lets do it */ @@ -1217,7 +1212,7 @@ Route::_reset_plugin_counts (uint32_t* err_streams) recompute: redirect_max_outs = 0; - RedirectList::iterator prev = _redirects.end(); + prev = _redirects.end(); for (r = _redirects.begin(); r != _redirects.end(); prev = r, ++r) { boost::shared_ptr s; @@ -1241,8 +1236,13 @@ Route::_reset_plugin_counts (uint32_t* err_streams) } /* we're done */ - return 0; + + streamcount: + for (r = _redirects.begin(); r != _redirects.end(); ++r) { + redirect_max_outs = max ((*r)->output_streams (), redirect_max_outs); + } + return ret; } int32_t diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index a084a16574..d53291b178 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -578,16 +578,10 @@ Session::destroy () tmp = i; ++tmp; - cerr << "Drop refs to " << i->second->name() << endl; - i->second->drop_references (); - - cerr << "move on\n"; i = tmp; } - - cerr << "clear audio sources\n"; audio_sources.clear (); #ifdef TRACK_DESTRUCTION diff --git a/libs/pbd/SConscript b/libs/pbd/SConscript index 9e09d5513e..a0065f09bd 100644 --- a/libs/pbd/SConscript +++ b/libs/pbd/SConscript @@ -29,7 +29,6 @@ dmalloc.cc error.cc fpu.cc id.cc -misc.c mountpoint.cc path.cc pathscanner.cc diff --git a/libs/pbd/misc.c b/libs/pbd/misc.c deleted file mode 100644 index 34e5888687..0000000000 --- a/libs/pbd/misc.c +++ /dev/null @@ -1,21 +0,0 @@ -#include - -#ifdef GTKOSX -#include -#endif - -void -disable_screen_updates () -{ -#ifdef GTKOSX - // NSDisableScreenUpdates (); -#endif -} - -void -enable_screen_updates () -{ -#ifdef GTKOSX - // NSEnableScreenUpdates(); -#endif -} diff --git a/libs/pbd/pbd/misc.h b/libs/pbd/pbd/misc.h deleted file mode 100644 index 306c00683e..0000000000 --- a/libs/pbd/pbd/misc.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __pbd_misc_h__ -#define __pbd_misc_h__ - -#ifdef __cplusplus -extern "C" { -#endif - - void disable_screen_updates (); - void enable_screen_updates (); - -#ifdef __cplusplus -} -#endif - -#endif /* __pbd_misc_h__ */ diff --git a/svn_revision.h b/svn_revision.h index c0b5a7cdc8..b7d9af4dc7 100644 --- a/svn_revision.h +++ b/svn_revision.h @@ -1,4 +1,4 @@ #ifndef __ardour_svn_revision_h__ #define __ardour_svn_revision_h__ -static const char* ardour_svn_revision = "3117"; +static const char* ardour_svn_revision = "3142"; #endif diff --git a/tools/osx_packaging/osx_build b/tools/osx_packaging/osx_build index d84d1ca030..1160a36459 100755 --- a/tools/osx_packaging/osx_build +++ b/tools/osx_packaging/osx_build @@ -21,6 +21,7 @@ while [ $# -gt 0 ] ; do --sae) SAE=1 ; WITH_JACK=1; WITH_LADSPA=1; STRIP= ; shift ;; --public) SAE= ; WITH_JACK=; WITH_LADSPA=1; STRIP= ; shift ;; --allinone) SAE= ; WITH_JACK=1; WITH_LADSPA=1; STRIP= ; shift ;; + --test) SAE= ; WITH_JACK=; WITH_LADSPA=; STRIP= ; shift ;; # # specific build flags @@ -204,7 +205,13 @@ cp ../../gtk2_ardour/mnemonic-us.bindings $Resources cp ../../gtk2_ardour/SAE-de.bindings $Resources cp ../../gtk2_ardour/ardour.menus $Resources cp ../../gtk2_ardour/ardour-sae.menus $Resources -cp ../../ardour_system.rc $Resources +if test x$SAE != x ; then + cp ../../ardour_system_sae.rc $Resources/ardour_system.rc + echo cp ../../ardour_system_sae.rc $Resources/ardour_system.rc +else + cp ../../ardour_system.rc $Resources/ardour_system.rc + echo FOO cp ../../ardour_system.rc $Resources/ardour_system.rc +fi cp ../../gtk2_ardour/ardour2_ui_sae.conf $Resources cp ../../gtk2_ardour/ardour2_ui_default.conf $Resources cp ../../gtk2_ardour/ardour2_ui_light.rc $Resources -- cgit v1.2.3