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
This commit is contained in:
Paul Davis 2008-03-14 20:18:05 +00:00
parent fb6565456e
commit 11af3f8fdf
21 changed files with 262 additions and 171 deletions

51
ardour_system_sae.rc Normal file
View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<Ardour>
<MIDI-port tag="ardour" device="ardour" type="coremidi" mode="duplex"/>
<MIDI-port tag="mcu" device="ardour" type="coremidi" mode="duplex"/>
<Config>
<Option name="minimum-disk-io-bytes" value="262144"/>
<Option name="track-buffer-seconds" value="5.000000"/>
<Option name="mute-affects-pre-fader" value="yes"/>
<Option name="mute-affects-post-fader" value="yes"/>
<Option name="mute-affects-control-outs" value="yes"/>
<Option name="mute-affects-main-outs" value="yes"/>
<Option name="solo-latch" value="yes"/>
<Option name="mtc-port" value="ardour"/>
<Option name="mmc-port" value="ardour"/>
<Option name="midi-port" value="ardour"/>
<Option name="use-mmc" value="yes"/>
<Option name="send-mmc" value="yes"/>
<Option name="jack-time-master" value="yes"/>
<Option name="trace-midi-input" value="no"/>
<Option name="trace-midi-output" value="no"/>
<Option name="plugins-stop-with-transport" value="no"/>
<Option name="no-sw-monitoring" value="no"/>
<Option name="stop-recording-on-xrun" value="no"/>
<Option name="create-xrun-marker" value="yes"/>
<Option name="stop-at-session-end" value="no"/>
<Option name="auto-xfade" value="yes"/>
<Option name="crossfades-active" value="1"/>
<Option name="crossfades-visible" value="1"/>
<Option name="xfade-model" value="0"/>
<Option name="no-new-session-dialog" value="yes"/>
<Option name="timecode-source-is-synced" value="yes"/>
<Option name="auditioner-left-out" value="coreaudio:Built-in Audio:in1"/>
<Option name="auditioner-right-out" value="coreaudio:Built-in Audio:in2"/>
<Option name="quieten-at-speed" value="1.000000"/>
<Option name="use-vst" value="yes"/>
<Option name="use-tranzport" value="yes"/>
<Option name="disk-choice-space-threshold" value="57600000"/>
<Option name="destructive-xfade-msecs" value="20"/>
<Option name="periodic-safety-backups" value="1"/>
<Option name="periodic-safety-backup-interval" value="120"/>
<Option name="show-track-meters" value="1"/>
<Option name="default-narrow_ms" value="0"/>
<Option name="smpte-format" value="6"/>
<Option name="font-scale" value="102400"/>
</Config>
<extra>
<RulerVisibility smpte="yes" bbt="yes" frames="no" minsec="no" tempo="yes" meter="yes" marker="yes" rangemarker="no" transportmarker="yes" cdmarker="no"/>
<Keyboard edit-button="3" edit-modifier="4" delete-button="3" delete-modifier="1" snap-modifier="32"/>
</extra>
</Ardour>

View file

@ -278,6 +278,11 @@
<menu action='Monitoring'>
<menuitem action='UseSoftwareMonitoring'/>
<menuitem action='UseExternalMonitoring'/>
</menu>
<menu action="SyncMenu">
<menuitem action='SendMMC'/>
<menuitem action='UseMMC'/>
<menuitem action='SendMTC'/>
</menu>
<menu action="TempoMenu">
<menuitem action='set-tempo-from-region'/>

View file

@ -35,7 +35,6 @@
#include <pbd/error.h>
#include <pbd/basename.h>
#include <pbd/compose.h>
#include <pbd/misc.h>
#include <pbd/pathscanner.h>
#include <pbd/failed_constructor.h>
#include <pbd/enumwriter.h>
@ -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;

View file

@ -115,6 +115,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void show_about ();
void hide_about ();
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,

View file

@ -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")) {

View file

@ -27,6 +27,7 @@
#include <gtkmm2ext/sync-menu.h>
#include <Appkit/Appkit.h>
#include <gdk/gdkquartz.h>
sigc::signal<void,bool> 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_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_quit_application (const AppleEvent *inAppleEvent,
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];
}
}

View file

@ -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));

View file

@ -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"));

View file

@ -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()
{

View file

@ -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;

View file

@ -37,6 +37,7 @@
#include <gtkmm2ext/window_title.h>
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(_("<b>Busses</b>")));
input_label = Gtk::manage(new class Gtk::Label(_("<b>Inputs</b>")));
output_label = Gtk::manage(new class Gtk::Label(_("<b>Outputs</b>")));
bus_label = new Gtk::Label(_("<b>Busses</b>"));
input_label = new Gtk::Label(_("<b>Inputs</b>"));
output_label = new Gtk::Label(_("<b>Outputs</b>"));
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));
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 = Gtk::manage(new class Gtk::Frame());
bus_table = Gtk::manage (new Gtk::Table (2, 3, false));
bus_frame = new Gtk::Frame();
bus_table = 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")));
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 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));
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));
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 = 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());
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 = 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());
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);
@ -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);

View file

@ -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)

View file

@ -93,12 +93,10 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr<CAC
streamFormat.mSampleRate = session.frame_rate();
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mFormatFlags = kAudioFormatFlagIsFloat|kAudioFormatFlagIsPacked|kAudioFormatFlagIsNonInterleaved;
#ifdef __LITTLE_ENDIAN__
/* relax, for now */
/* relax */
#else
/* it is ridiculous that this flag is needed when its
opposite flag is not.
*/
streamFormat.mFormatFlags |= kAudioFormatFlagIsBigEndian;
#endif
@ -329,7 +327,7 @@ AUPlugin::activate ()
if (!initialized) {
OSErr err;
if ((err = unit->Initialize()) != 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;
}

View file

@ -861,6 +861,14 @@ Route::add_redirect (boost::shared_ptr<Redirect> redirect, void *src, uint32_t*
boost::shared_ptr<PluginInsert> pi;
boost::shared_ptr<PortInsert> 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<PluginInsert>(redirect)) != 0) {
@ -901,14 +909,6 @@ Route::add_redirect (boost::shared_ptr<Redirect> 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<Placement,list<InsertCount> > 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> 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<Insert>(*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<Send> (*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<Send> 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

View file

@ -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

View file

@ -29,7 +29,6 @@ dmalloc.cc
error.cc
fpu.cc
id.cc
misc.c
mountpoint.cc
path.cc
pathscanner.cc

View file

@ -1,21 +0,0 @@
#include <pbd/misc.h>
#ifdef GTKOSX
#include <AppKit/AppKit.h>
#endif
void
disable_screen_updates ()
{
#ifdef GTKOSX
// NSDisableScreenUpdates ();
#endif
}
void
enable_screen_updates ()
{
#ifdef GTKOSX
// NSEnableScreenUpdates();
#endif
}

View file

@ -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__ */

View file

@ -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

View file

@ -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