From 0ef71e47de8870e74f02b457cb513930df514266 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 17 Oct 2006 20:40:39 +0000 Subject: [PATCH] reduce calls to fit_to_pixels(); flip back to old fix for rec regions botch; executable stack fix; avoid delete this in MementoCommand lifetime management git-svn-id: svn://localhost/ardour2/trunk@988 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/arval | 1 + gtk2_ardour/audio_region_view.cc | 2 -- gtk2_ardour/audio_streamview.cc | 21 +++++++++++++-------- gtk2_ardour/audio_streamview.h | 2 +- gtk2_ardour/region_view.cc | 7 ------- gtk2_ardour/streamview.cc | 2 +- gtk2_ardour/streamview.h | 2 +- gtk2_ardour/time_axis_view_item.cc | 6 ++---- libs/ardour/session_state.cc | 7 +++++++ libs/ardour/session_time.cc | 1 + libs/ardour/sse_functions.s | 4 +++- libs/gtkmm2ext/gtk_ui.cc | 6 +++++- libs/pbd/pbd/memento_command.h | 17 ++++++++++++----- 13 files changed, 47 insertions(+), 31 deletions(-) diff --git a/gtk2_ardour/arval b/gtk2_ardour/arval index d427ae62e1..a1dc501d3f 100755 --- a/gtk2_ardour/arval +++ b/gtk2_ardour/arval @@ -1,3 +1,4 @@ #!/bin/sh . ardev_common.sh +export ARDOUR_RUNNING_UNDER_VALGRIND=TRUE exec valgrind --num-callers=50 --tool=memcheck gtk2_ardour/ardour.bin --novst $* diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index 9892eb47cc..d04efb51d7 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -161,8 +161,6 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd) gain_line->show (); } - reset_width_dependent_items ((double) _region->length() / samples_per_unit); - gain_line->reset (); set_height (trackview.height); diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 97505d90f0..0a74d89d35 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -126,7 +126,7 @@ AudioStreamView::set_amplitude_above_axis (gdouble app) } void -AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wait_for_waves, bool watch_death) +AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wait_for_waves) { AudioRegionView *region_view; @@ -167,10 +167,8 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wai region_view->set_waveform_visible(_trackview.editor.show_waveforms()); - if (watch_death) { - /* catch regionview going away */ - region->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_region_view), boost::weak_ptr (r))); - } + /* catch regionview going away */ + region->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_region_view), boost::weak_ptr (r))); RegionViewAdded (region_view); } @@ -510,8 +508,15 @@ AudioStreamView::setup_rec_box () /* remove temp regions */ - for (list >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); ++iter) { + for (list >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); ) { + list >::iterator tmp; + + tmp = iter; + ++tmp; + (*iter)->drop_references (); + + iter = tmp; } rec_regions.clear(); @@ -605,7 +610,7 @@ AudioStreamView::update_rec_regions () if (origlen == 1) { /* our special initial length */ - add_region_view_internal (region, false, false); + add_region_view_internal (region, false); } /* also update rect */ @@ -630,7 +635,7 @@ AudioStreamView::update_rec_regions () if (origlen == 1) { /* our special initial length */ - add_region_view_internal (region, false, false); + add_region_view_internal (region, false); } /* also hide rect */ diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h index b3bfb65c5c..c6db40f336 100644 --- a/gtk2_ardour/audio_streamview.h +++ b/gtk2_ardour/audio_streamview.h @@ -81,7 +81,7 @@ class AudioStreamView : public StreamView void rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::weak_ptr src); void update_rec_regions (); - void add_region_view_internal (boost::shared_ptr, bool wait_for_waves, bool watch_death); + void add_region_view_internal (boost::shared_ptr, bool wait_for_waves); void remove_region_view (boost::weak_ptr ); void remove_audio_region_view (boost::shared_ptr ); diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index b799a1aa5d..db2726e515 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -133,11 +133,6 @@ RegionView::init (Gdk::Color& basic_color, bool wfd) set_height (trackview.height); - region_muted (); - region_sync_changed (); - region_resized (BoundsChanged); - region_locked (); - _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed)); group->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_event), group, this)); @@ -236,8 +231,6 @@ RegionView::region_resized (Change what_changed) unit_length = _region->length() / samples_per_unit; - reset_width_dependent_items (unit_length); - for (vector::iterator i = ghosts.begin(); i != ghosts.end(); ++i) { (*i)->set_duration (unit_length); diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index beed74c59f..10d409a9b0 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -160,7 +160,7 @@ StreamView::set_samples_per_unit (gdouble spp) void StreamView::add_region_view (boost::shared_ptr r) { - add_region_view_internal (r, true, true); + add_region_view_internal (r, true); } void diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index 197c854b7a..cc5f9cb414 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -107,7 +107,7 @@ protected: void update_rec_box (); virtual void update_rec_regions () = 0; - virtual void add_region_view_internal (boost::shared_ptr, bool wait_for_waves, bool watch_death) = 0; + virtual void add_region_view_internal (boost::shared_ptr, bool wait_for_waves) = 0; virtual void remove_region_view (boost::weak_ptr ); //void remove_rec_region (boost::shared_ptr); (unused) diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index 34a10dfca5..b23e7972ae 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -310,9 +310,7 @@ TimeAxisViewItem::set_duration (nframes_t dur, void* src) item_duration = dur; - double pixel_width = trackview.editor.frame_to_pixel (dur); - - reset_width_dependent_items (pixel_width); + reset_width_dependent_items (trackview.editor.frame_to_pixel (dur)); DurationChanged (dur, src) ; /* EMIT_SIGNAL */ return true; @@ -851,7 +849,7 @@ TimeAxisViewItem::reset_width_dependent_items (double pixel_width) } } else { name_highlight->show(); - if (name_text) { + if (name_text && !get_item_name().empty()) { name_text->show(); reset_name_width (pixel_width); } diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index c302633918..e577dfb94a 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -1291,6 +1291,13 @@ Session::XMLRegionFactory (const XMLNode& node, bool full) nchans = atoi (prop->value().c_str()); } + + if ((prop = node.property ("name")) == 0) { + cerr << "no name for this region\n"; + abort (); + } + cerr << "name of this region = " << prop->value() << endl; + if ((prop = node.property (X_("source-0"))) == 0) { if ((prop = node.property ("source")) == 0) { diff --git a/libs/ardour/session_time.cc b/libs/ardour/session_time.cc index dfaab9d4c4..abe4f50696 100644 --- a/libs/ardour/session_time.cc +++ b/libs/ardour/session_time.cc @@ -26,6 +26,7 @@ #include #include +#include #include #include diff --git a/libs/ardour/sse_functions.s b/libs/ardour/sse_functions.s index 7df689188c..934ce6887a 100644 --- a/libs/ardour/sse_functions.s +++ b/libs/ardour/sse_functions.s @@ -524,6 +524,8 @@ x86_sse_compute_peak: .size x86_sse_compute_peak, .-x86_sse_compute_peak #; end proc - +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc index 55a6bebb02..177e4f3dbb 100644 --- a/libs/gtkmm2ext/gtk_ui.cc +++ b/libs/gtkmm2ext/gtk_ui.cc @@ -253,7 +253,11 @@ static bool idle_quit () void UI::do_quit () { - Glib::signal_idle().connect (sigc::ptr_fun (idle_quit)); + if (getenv ("ARDOUR_RUNNING_UNDER_VALGRIND")) { + Main::quit (); + } else { + Glib::signal_idle().connect (sigc::ptr_fun (idle_quit)); + } } void diff --git a/libs/pbd/pbd/memento_command.h b/libs/pbd/pbd/memento_command.h index f257e63233..715e9d33e3 100644 --- a/libs/pbd/pbd/memento_command.h +++ b/libs/pbd/pbd/memento_command.h @@ -30,10 +30,20 @@ using std::endl; #include #include +/* grrr, strict C++ says that static member functions are not C functions, but we also want + to be able to pack this into a sigc::ptr_fun and not sigc::mem_fun, so we have to make + it a genuine function rather than a member. +*/ + +static void object_death (Command* mc) { + delete mc; +} + /** This command class is initialized with before and after mementos * (from Stateful::get_state()), so undo becomes restoring the before * memento, and redo is restoring the after memento. */ + template class MementoCommand : public Command { @@ -43,8 +53,9 @@ class MementoCommand : public Command XMLNode *after ) : obj(object), before(before), after(after) { - obj.GoingAway.connect (sigc::mem_fun (*this, &MementoCommand::object_death)); + obj.GoingAway.connect (sigc::bind (sigc::ptr_fun (object_death), static_cast(this))); } + ~MementoCommand () { GoingAway(); if (before) { @@ -91,10 +102,6 @@ class MementoCommand : public Command protected: obj_T &obj; XMLNode *before, *after; - - void object_death () { - delete this; - } }; #endif // __lib_pbd_memento_h__