From 6bcec5f82091c860e1625bdc68b0ee4075e84046 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 18 Dec 2007 20:54:46 +0000 Subject: [PATCH] new LocateRollLocate event, used to implement play-at-edit-point-and-return; other fixes from the OS X world git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2792 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour-sae-ansi.bindings.in | 1 + gtk2_ardour/ardour-sae.menus | 1 + gtk2_ardour/editor.cc | 1 + gtk2_ardour/editor.h | 8 ++++ gtk2_ardour/editor_actions.cc | 7 ++- gtk2_ardour/editor_ops.cc | 49 ++++++++++++++++---- gtk2_ardour/editor_region_list.cc | 6 ++- gtk2_ardour/editor_route_list.cc | 19 ++++++++ gtk2_ardour/editor_selection.cc | 2 + gtk2_ardour/plugin_selector.cc | 3 +- libs/ardour/ardour/audio_unit.h | 27 ++++++----- libs/ardour/ardour/session.h | 4 +- libs/ardour/audio_unit.cc | 59 +++++++++++-------------- libs/ardour/enums.cc | 1 + libs/ardour/session_events.cc | 8 ++++ libs/ardour/session_state.cc | 1 + libs/ardour/session_transport.cc | 34 ++++++++++++-- libs/gtkmm2ext/gtkmm2ext/dndtreeview.h | 6 ++- tools/osx_packaging/Info.plist.in | 2 +- tools/osx_packaging/osx_build | 6 ++- 20 files changed, 183 insertions(+), 62 deletions(-) diff --git a/gtk2_ardour/ardour-sae-ansi.bindings.in b/gtk2_ardour/ardour-sae-ansi.bindings.in index 82f967c765..a8edaef378 100644 --- a/gtk2_ardour/ardour-sae-ansi.bindings.in +++ b/gtk2_ardour/ardour-sae-ansi.bindings.in @@ -341,4 +341,5 @@ (gtk_accel_path "/Editor/toggle-zoom" "o") (gtk_accel_path "/Editor/zoom-to-region" "y") (gtk_accel_path "/Editor/pitch-shift-region" "F5") +(gtk_accel_path "/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space") diff --git a/gtk2_ardour/ardour-sae.menus b/gtk2_ardour/ardour-sae.menus index 7a74beb00b..bf7f326784 100644 --- a/gtk2_ardour/ardour-sae.menus +++ b/gtk2_ardour/ardour-sae.menus @@ -30,6 +30,7 @@ + diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 6dc7ecde41..c850b835d7 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -3980,6 +3980,7 @@ Editor::swap_visual_state () set_zoom_focus (last_visual_state.zoom_focus); reposition_and_zoom (last_visual_state.leftmost_frame, last_visual_state.frames_per_unit); + zoomed_to_region = false; } void diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 71a8440ea3..faec9d19ec 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -999,6 +999,7 @@ class Editor : public PublicEditor void play_from_start (); void play_from_edit_point (); + void play_from_edit_point_and_return (); void play_selected_region (); void loop_selected_region (); void play_location (ARDOUR::Location&); @@ -1581,6 +1582,13 @@ class Editor : public PublicEditor bool ignore_route_order_sync; bool route_list_display_button_press (GdkEventButton*); + void route_list_display_drag_data_received (const Glib::RefPtr& context, + gint x, + gint y, + const Gtk::SelectionData& data, + guint info, + guint time); + bool route_list_selection_filter (const Glib::RefPtr& model, const Gtk::TreeModel::Path& path, bool yn); void route_list_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 35ea88a20f..a3c8679819 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -293,7 +293,12 @@ Editor::register_actions () ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "align-regions-sync-relative", _("Align Regions Sync Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::SyncPoint)); ActionManager::session_sensitive_actions.push_back (act); - + + act = ActionManager::register_action (editor_actions, "play-from-edit-point", _("Play From Edit Point"), mem_fun(*this, &Editor::play_from_edit_point)); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "play-from-edit-point-and-return", _("Play from Edit Point & Return"), mem_fun(*this, &Editor::play_from_edit_point_and_return)); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "play-selected-regions", _("Play Selected Region(s)"), mem_fun(*this, &Editor::play_selected_region)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "brush-at-mouse", _("Brush at Mouse"), mem_fun(*this, &Editor::kbd_brush)); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index f3a493e195..dc170e938f 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2118,6 +2118,32 @@ Editor::play_from_edit_point () session->request_locate (get_preferred_edit_position(), true); } +void +Editor::play_from_edit_point_and_return () +{ + nframes64_t start_frame; + nframes64_t return_frame; + + if (session->transport_rolling()) { + session->request_stop (); + return; + } + + switch (_edit_point) { + case EditAtPlayhead: + session->request_transport_speed (1.0f); + break; + + default: + return_frame = session->transport_frame(); + start_frame = get_preferred_edit_position (); + if (start_frame >= 0) { + session->request_roll_at_and_return (start_frame, return_frame); + } + break; + } +} + void Editor::play_selection () { @@ -4193,31 +4219,38 @@ Editor::toggle_fade_active (bool in) } const char* cmd = (in ? _("toggle fade in active") : _("toggle fade out active")); + bool have_switch = false; + bool yn; + bool in_command = false; begin_reversible_command (cmd); for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { AudioRegionView* tmp = dynamic_cast (*x); - + if (!tmp) { return; } boost::shared_ptr region (tmp->audio_region()); - XMLNode &before = region->get_state(); - - if (in) { - region->set_fade_in_active (!region->fade_in_active()); - } else { - region->set_fade_out_active (!region->fade_out_active()); + /* make the behaviour consistent across all regions */ + + if (!have_switch) { + yn = region->fade_in_active(); + have_switch = true; } + XMLNode &before = region->get_state(); + region->set_fade_in_active (!yn); XMLNode &after = region->get_state(); session->add_command(new MementoCommand(*region.get(), &before, &after)); + in_command = true; } - commit_reversible_command (); + if (in_command) { + commit_reversible_command (); + } } void diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc index 1678b3961f..6f54165900 100644 --- a/gtk2_ardour/editor_region_list.cc +++ b/gtk2_ardour/editor_region_list.cc @@ -611,7 +611,11 @@ Editor::region_list_display_drag_data_received (const RefPtr& { vector paths; - cerr << "ERLD:dddr target = " << data.get_target() << endl; + if (data.get_target() == "GTK_TREE_MODEL_ROW") { + cerr << "Delete drag data drop to treeview\n"; + region_list_display.on_drag_data_received (context, x, y, data, info, time); + return; + } if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) { nframes64_t pos = 0; diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc index 86e516d17c..ff9d55f3f8 100644 --- a/gtk2_ardour/editor_route_list.cc +++ b/gtk2_ardour/editor_route_list.cc @@ -38,6 +38,7 @@ using namespace sigc; using namespace ARDOUR; using namespace PBD; using namespace Gtk; +using namespace Glib; void Editor::handle_new_route (Session::RouteList& routes) @@ -546,3 +547,21 @@ Editor::route_list_delete (const Gtk::TreeModel::Path& path) session->set_remote_control_ids(); redisplay_route_list (); } + + +void +Editor::route_list_display_drag_data_received (const RefPtr& context, + int x, int y, + const SelectionData& data, + guint info, guint time) +{ + cerr << "RouteLD::dddr target = " << data.get_target() << endl; + + if (data.get_target() == "GTK_TREE_MODEL_ROW") { + cerr << "Delete drag data drop to treeview\n"; + route_list_display.on_drag_data_received (context, x, y, data, info, time); + return; + } + cerr << "some other kind of drag\n"; + context->drag_finish (true, false, time); +} diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index d31bbd2340..29d7a8a6bb 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -675,6 +675,8 @@ Editor::region_selection_changed () for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (*i)->set_selected_regionviews (selection->regions); } + + zoomed_to_region = false; } void diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index c48a5b775e..cd597af8e4 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -379,7 +379,8 @@ PluginSelector::run () switch (r) { case RESPONSE_APPLY: for (i = amodel->children().begin(); i != amodel->children().end(); ++i) { - use_plugin ((*i)[acols.plugin]); + PluginInfoPtr pp = (*i)[acols.plugin]; + use_plugin (pp); } break; diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h index 7f51d39738..68498f9074 100644 --- a/libs/ardour/ardour/audio_unit.h +++ b/libs/ardour/ardour/audio_unit.h @@ -22,6 +22,7 @@ #define __ardour_audio_unit_h__ #include +#include #include #include @@ -47,7 +48,7 @@ class Session; class AUPlugin : public ARDOUR::Plugin { public: - AUPlugin (AudioEngine& engine, Session& session, CAComponent* comp); + AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr comp); virtual ~AUPlugin (); std::string unique_id () const; @@ -92,20 +93,21 @@ class AUPlugin : public ARDOUR::Plugin uint32_t output_streams() const; uint32_t input_streams() const; - CAAudioUnit* get_au () { return unit; } - CAComponent* get_comp () { return comp; } + boost::shared_ptr get_au () { return unit; } + boost::shared_ptr get_comp () { return comp; } - OSStatus render_callback(AudioUnitRenderActionFlags *ioActionFlags, - const AudioTimeStamp *inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList* ioData); + OSStatus render_callback(AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, + UInt32 inNumberFrames, + AudioBufferList* ioData); private: - CAComponent* comp; - CAAudioUnit* unit; + boost::shared_ptr comp; + boost::shared_ptr unit; AudioStreamBasicDescription streamFormat; bool initialized; + int format_set; AudioBufferList* buffers; UInt32 global_elements; @@ -129,7 +131,7 @@ typedef boost::shared_ptr AUPluginPtr; class AUPluginInfo : public PluginInfo { public: - AUPluginInfo (CAComponentDescription*); + AUPluginInfo (boost::shared_ptr); ~AUPluginInfo (); PluginPtr load (Session& session); @@ -139,7 +141,8 @@ class AUPluginInfo : public PluginInfo { static std::string stringify_descriptor (const CAComponentDescription&); private: - CAComponentDescription* descriptor; + boost::shared_ptr descriptor; + static void discover_music (PluginInfoList&); static void discover_fx (PluginInfoList&); static void discover_by_description (PluginInfoList&, CAComponentDescription&); diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 102db331ac..7318303d33 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -125,6 +125,7 @@ class Session : public PBD::StatefulDestructible SetDiskstreamSpeed, Locate, LocateRoll, + LocateRollLocate, SetLoop, PunchIn, PunchOut, @@ -347,7 +348,7 @@ class Session : public PBD::StatefulDestructible sigc::signal RouteAdded; - void request_roll (); + void request_roll_at_and_return (nframes_t start, nframes_t return_to); void request_bounded_roll (nframes_t start, nframes_t end); void request_stop (bool abort = false); void request_locate (nframes_t frame, bool with_roll = false); @@ -985,6 +986,7 @@ class Session : public PBD::StatefulDestructible nframes_t _last_slave_transport_frame; nframes_t maximum_output_latency; nframes_t last_stop_frame; + nframes64_t requested_return_frame; vector _passthru_buffers; vector _silent_buffers; vector _send_buffers; diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index 502ce2c080..c8dae0406a 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -53,7 +53,7 @@ _render_callback(void *userData, return ((AUPlugin*)userData)->render_callback (ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData); } -AUPlugin::AUPlugin (AudioEngine& engine, Session& session, CAComponent* _comp) +AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr _comp) : Plugin (engine, session), comp (_comp), @@ -65,12 +65,10 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, CAComponent* _comp) current_buffers (0), frames_processed (0) { - OSErr err = CAAudioUnit::Open (*comp, *unit); + OSErr err = CAAudioUnit::Open (*(comp.get()), *unit); if (err != noErr) { error << _("AudioUnit: Could not convert CAComponent to CAAudioUnit") << endmsg; - delete unit; - delete comp; throw failed_constructor (); } @@ -82,8 +80,6 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, CAComponent* _comp) if ((err = unit->SetProperty (kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, (void*) &renderCallbackInfo, sizeof(renderCallbackInfo))) != 0) { cerr << "cannot install render callback (err = " << err << ')' << endl; - delete unit; - delete comp; throw failed_constructor(); } @@ -104,10 +100,10 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, CAComponent* _comp) streamFormat.mBytesPerFrame = 4; streamFormat.mChannelsPerFrame = 1; + format_set = 0; + if (_set_block_size (_session.get_block_size())) { error << _("AUPlugin: cannot set processing block size") << endmsg; - delete unit; - delete comp; throw failed_constructor(); } } @@ -116,16 +112,11 @@ AUPlugin::~AUPlugin () { if (unit) { unit->Uninitialize (); - delete unit; } if (buffers) { free (buffers); } - - if (comp) { - delete comp; - } } string @@ -224,9 +215,6 @@ AUPlugin::_set_block_size (nframes_t nframes) unit->Uninitialize (); } - set_input_format (); - set_output_format (); - if ((err = unit->SetProperty (kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &numFrames, sizeof (numFrames))) != noErr) { cerr << "cannot set max frames (err = " << err << ')' << endl; @@ -242,10 +230,13 @@ AUPlugin::_set_block_size (nframes_t nframes) int32_t AUPlugin::can_support_input_configuration (int32_t in) -{ - streamFormat.mBytesPerPacket = 4 * in; - streamFormat.mBytesPerFrame = 4 * in; +{ streamFormat.mChannelsPerFrame = in; + /* apple says that for non-interleaved data, these + values always refer to a single channel. + */ + streamFormat.mBytesPerPacket = 4; + streamFormat.mBytesPerFrame = 4; if (set_input_format () == 0) { return 1; @@ -273,12 +264,18 @@ AUPlugin::set_stream_format (int scope, uint32_t cnt) for (uint32_t i = 0; i < cnt; ++i) { if ((result = unit->SetFormat (scope, i, streamFormat)) != 0) { - error << string_compose (_("AUPlugin: could not set stream format for %1/%2"), - (scope == kAudioUnitScope_Input ? "input" : "output"), i) << endmsg; + error << string_compose (_("AUPlugin: could not set stream format for %1/%2 (err = %3)"), + (scope == kAudioUnitScope_Input ? "input" : "output"), i, result) << endmsg; return -1; } } + if (scope == kAudioUnitScope_Input) { + format_set |= 0x1; + } else { + format_set |= 0x2; + } + return 0; } @@ -311,8 +308,8 @@ AUPlugin::compute_output_streams (int32_t nplugins) uint32_t AUPlugin::output_streams() const { - if (!initialized) { - warning << _("AUPlugin: output_streams() called without calling Initialize!") << endmsg; + if (!(format_set & 0x2)) { + warning << _("AUPlugin: output_streams() called without any format set!") << endmsg; return 1; } return streamFormat.mChannelsPerFrame; @@ -322,8 +319,8 @@ AUPlugin::output_streams() const uint32_t AUPlugin::input_streams() const { - if (!initialized) { - warning << _("AUPlugin: input_streams() called without calling Initialize!") << endmsg; + if (!(format_set & 0x1)) { + warning << _("AUPlugin: input_streams() called without any format set!") << endmsg; return 1; } return streamFormat.mChannelsPerFrame; @@ -478,7 +475,7 @@ AUPlugin::has_editor () const return true; } -AUPluginInfo::AUPluginInfo (CAComponentDescription* d) +AUPluginInfo::AUPluginInfo (boost::shared_ptr d) : descriptor (d) { @@ -486,9 +483,6 @@ AUPluginInfo::AUPluginInfo (CAComponentDescription* d) AUPluginInfo::~AUPluginInfo () { - if (descriptor) { - delete descriptor; - } } PluginPtr @@ -497,7 +491,7 @@ AUPluginInfo::load (Session& session) try { PluginPtr plugin; - CAComponent* comp = new CAComponent(*descriptor); + boost::shared_ptr comp (new CAComponent(*descriptor)); if (!comp->IsValid()) { error << ("AudioUnit: not a valid Component") << endmsg; @@ -505,7 +499,7 @@ AUPluginInfo::load (Session& session) plugin.reset (new AUPlugin (session.engine(), session, comp)); } - plugin->set_info(PluginInfoPtr(new AUPluginInfo(*this))); + plugin->set_info (PluginInfoPtr (new AUPluginInfo (*this))); return plugin; } @@ -562,7 +556,8 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip CAComponentDescription temp; GetComponentInfo (comp, &temp, NULL, NULL, NULL); - AUPluginInfoPtr info (new AUPluginInfo (new CAComponentDescription(temp))); + AUPluginInfoPtr info (new AUPluginInfo + (boost::shared_ptr (new CAComponentDescription(temp)))); /* no panners, format converters or i/o AU's for our purposes */ diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index 2f119918cc..17dff0bda6 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -231,6 +231,7 @@ setup_enum_writer () REGISTER_CLASS_ENUM (Session::Event, SetDiskstreamSpeed); REGISTER_CLASS_ENUM (Session::Event, Locate); REGISTER_CLASS_ENUM (Session::Event, LocateRoll); + REGISTER_CLASS_ENUM (Session::Event, LocateRollLocate); REGISTER_CLASS_ENUM (Session::Event, SetLoop); REGISTER_CLASS_ENUM (Session::Event, PunchIn); REGISTER_CLASS_ENUM (Session::Event, PunchOut); diff --git a/libs/ardour/session_events.cc b/libs/ardour/session_events.cc index d736784396..a0c556b516 100644 --- a/libs/ardour/session_events.cc +++ b/libs/ardour/session_events.cc @@ -41,6 +41,7 @@ static const char* event_names[] = { "SetDiskstreamSpeed", "Locate", "LocateRoll", + "LocateRollLocate", "SetLoop", "PunchIn", "PunchOut", @@ -347,6 +348,13 @@ Session::process_event (Event* ev) } break; + case Event::LocateRollLocate: + // locate is handled by ::request_roll_at_and_return() + requested_return_frame = ev->target_frame; + set_transport_speed (ev->speed, true); + break; + + case Event::SetTransportSpeed: set_transport_speed (ev->speed, ev->yes_or_no); break; diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 10c813a18d..76e6d6196e 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -138,6 +138,7 @@ Session::first_stage_init (string fullpath, string snapshot_name) transport_sub_state = 0; _transport_frame = 0; last_stop_frame = 0; + requested_return_frame = -1; end_location = new Location (0, 0, _("end"), Location::Flags ((Location::IsMark|Location::IsEnd))); start_location = new Location (0, 0, _("start"), Location::Flags ((Location::IsMark|Location::IsStart))); _end_location_is_free = true; diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index c5cbae11c9..c01f6ed063 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -371,17 +371,35 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) update_latency_compensation (true, abort); } - if ((Config->get_slave_source() == None && Config->get_auto_return()) || (post_transport_work & PostTransportLocate) || synced_to_jack()) { + if ((Config->get_slave_source() == None && Config->get_auto_return()) || + (post_transport_work & PostTransportLocate) || + (requested_return_frame >= 0) || + synced_to_jack()) { if (pending_locate_flush) { flush_all_redirects (); } - if (((Config->get_slave_source() == None && Config->get_auto_return()) || synced_to_jack()) && !(post_transport_work & PostTransportLocate)) { + if (((Config->get_slave_source() == None && Config->get_auto_return()) || + synced_to_jack() || + requested_return_frame >= 0) && + !(post_transport_work & PostTransportLocate)) { - _transport_frame = last_stop_frame; + bool do_locate = false; + + if (requested_return_frame >= 0) { + _transport_frame = requested_return_frame; + requested_return_frame = -1; + do_locate = true; + } else { + _transport_frame = last_stop_frame; + } if (synced_to_jack() && !play_loop) { + do_locate = true; + } + + if (do_locate) { // cerr << "non-realtimestop: transport locate to " << _transport_frame << endl; _engine.transport_locate (_transport_frame); } @@ -1164,6 +1182,16 @@ Session::setup_auto_play () merge_event (ev); } +void +Session::request_roll_at_and_return (nframes_t start, nframes_t return_to) +{ + request_stop (); + request_locate (start, false); + + Event *ev = new Event (Event::LocateRollLocate, Event::Add, Event::Immediate, return_to, 1.0); + queue_event (ev); +} + void Session::request_bounded_roll (nframes_t start, nframes_t end) { diff --git a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h index fbc5ea90ef..0bdfe081b2 100644 --- a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h +++ b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h @@ -93,15 +93,18 @@ class DnDTreeView : public DnDTreeViewBase */ suggested_action = Gdk::DragAction (0); TreeView::on_drag_data_received (context, x, y, selection_data, info, time); + std::cerr << "DDR, suggested action\n"; return; } if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") { TreeView::on_drag_data_received (context, x, y, selection_data, info, time); - + std::cerr << "\n\nREGULAR TREEVIEW DRAG HAS DROPPED HERE @ " << x << '.' << y << std::endl; + } else if (data_column >= 0) { + std::cerr << "DDR, data/object drop\n"; /* object D-n-D */ const void* data = selection_data.get_data(); @@ -112,6 +115,7 @@ class DnDTreeView : public DnDTreeViewBase } } else { + std::cerr << "DDR, unknown drop\n"; /* some kind of target type added by the app, which will be handled by a signal handler */ } } diff --git a/tools/osx_packaging/Info.plist.in b/tools/osx_packaging/Info.plist.in index a0cfb76155..7038de6938 100644 --- a/tools/osx_packaging/Info.plist.in +++ b/tools/osx_packaging/Info.plist.in @@ -23,7 +23,7 @@ CFBundleExecutable Ardour2 CFBundleGetInfoString - Ardour @VERSION@ Copyright 2007 Paul Davis + @INFOSTRING@ CFBundleIconFile appIcon.icns CFBundleIdentifier diff --git a/tools/osx_packaging/osx_build b/tools/osx_packaging/osx_build index 19ff79fef7..fdd7aaac3e 100755 --- a/tools/osx_packaging/osx_build +++ b/tools/osx_packaging/osx_build @@ -23,6 +23,8 @@ done version=`grep -m 1 '^ardour_version' ../../SConstruct | cut -d' ' -f 3 | sed "s/'//g"` echo "Version is $version" +info_string="$version built on `hostname` by `whoami` on `date`" +echo "Info string is $info_string" # setup directory structure @@ -79,7 +81,9 @@ fi env="LSEnvironmentARDOUR_BUNDLEDtrue$env" # edit plist -sed -e "s?@ENV@?$env?g" -e "s?@VERSION@?$version?g" < Info.plist.in > Info.plist +sed -e "s?@ENV@?$env?g" \ + -e "s?@VERSION@?$version?g" \ + -e "s?@INFOSTRING@?$info_string?g" < Info.plist.in > Info.plist # copy static files -- 2.30.2