reduce calls to fit_to_pixels(); flip back to old fix for rec regions botch; executab...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 17 Oct 2006 20:40:39 +0000 (20:40 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 17 Oct 2006 20:40:39 +0000 (20:40 +0000)
git-svn-id: svn://localhost/ardour2/trunk@988 d708f5d6-7413-0410-9779-e7cbd77b26cf

13 files changed:
gtk2_ardour/arval
gtk2_ardour/audio_region_view.cc
gtk2_ardour/audio_streamview.cc
gtk2_ardour/audio_streamview.h
gtk2_ardour/region_view.cc
gtk2_ardour/streamview.cc
gtk2_ardour/streamview.h
gtk2_ardour/time_axis_view_item.cc
libs/ardour/session_state.cc
libs/ardour/session_time.cc
libs/ardour/sse_functions.s
libs/gtkmm2ext/gtk_ui.cc
libs/pbd/pbd/memento_command.h

index d427ae62e1d90874c2a2d004c95c1099184ab60c..a1dc501d3fbd554792791808f7ea24070a119bc4 100755 (executable)
@@ -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 $*
index 9892eb47cc1726211f393d299189dc4ffc783782..d04efb51d78da18cb2bf42d1102fdb2a4d5550d1 100644 (file)
@@ -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);
index 97505d90f07aface9beb89d25e8823c71d5f2748..0a74d89d353a57181255126ffb4f7c8f67f0395f 100644 (file)
@@ -126,7 +126,7 @@ AudioStreamView::set_amplitude_above_axis (gdouble app)
 }
 
 void
-AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait_for_waves, bool watch_death)
+AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait_for_waves)
 {
        AudioRegionView *region_view;
 
@@ -167,10 +167,8 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> 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<Region> (r)));
-       }
+       /* catch regionview going away */
+       region->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_region_view), boost::weak_ptr<Region> (r)));
 
        RegionViewAdded (region_view);
 }
@@ -510,8 +508,15 @@ AudioStreamView::setup_rec_box ()
                        
                        /* remove temp regions */
 
-                       for (list<boost::shared_ptr<Region> >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); ++iter) {
+                       for (list<boost::shared_ptr<Region> >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); ) {
+                               list<boost::shared_ptr<Region> >::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 */
index b3bfb65c5c409e84e5b2826fa3bb75e16651fb89..c6db40f336bd54837d5ad7a22a3af1ffcf25bfb7 100644 (file)
@@ -81,7 +81,7 @@ class AudioStreamView : public StreamView
        void rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::weak_ptr<ARDOUR::Source> src); 
        void update_rec_regions ();
        
-       void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves, bool watch_death);
+       void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves);
        void remove_region_view (boost::weak_ptr<ARDOUR::Region> );
        void remove_audio_region_view (boost::shared_ptr<ARDOUR::AudioRegion> );
 
index b799a1aa5df788876cc4e592f916dec4cda7541a..db2726e515e5224c2608bf91a36ea77220f25a5c 100644 (file)
@@ -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<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
 
                        (*i)->set_duration (unit_length);
index beed74c59f9e9681638af13901228aa05478ea60..10d409a9b0d9700a4d54ce6637ad151569174ea6 100644 (file)
@@ -160,7 +160,7 @@ StreamView::set_samples_per_unit (gdouble spp)
 void
 StreamView::add_region_view (boost::shared_ptr<Region> r)
 {
-       add_region_view_internal (r, true, true);
+       add_region_view_internal (r, true);
 }
 
 void
index 197c854b7a91f8cb2ec4f6ef7d4c4d7a24fdc79c..cc5f9cb41428399345a47aee9c439de310907224 100644 (file)
@@ -107,7 +107,7 @@ protected:
        void         update_rec_box ();
        virtual void update_rec_regions () = 0;
        
-       virtual void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves, bool watch_death) = 0;
+       virtual void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves) = 0;
        virtual void remove_region_view (boost::weak_ptr<ARDOUR::Region> );
        //void         remove_rec_region (boost::shared_ptr<ARDOUR::Region>); (unused)
 
index 34a10dfca5d49aff164f094d7e816e94c2043785..b23e7972ae953ad661447d5330c70c10b42bcd2a 100644 (file)
@@ -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);
                                }
index c30263391804331345d2480f181253e31c235274..e577dfb94a22f2b2f98dbe209b49395d0d34b8c3 100644 (file)
@@ -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) {
index dfaab9d4c40a4590f9cea8fdfc38a481595e645a..abe4f506963bed0544eafda392f54cc768b1b043 100644 (file)
@@ -26,6 +26,7 @@
 #include <ardour/timestamps.h>
 
 #include <pbd/error.h>
+#include <pbd/stacktrace.h>
 
 #include <ardour/ardour.h>
 #include <ardour/configuration.h>
index 7df689188c9fc35e8d841241d7e57c91933499ce..934ce6887a25e5075782a538013a59ea19049545 100644 (file)
@@ -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
 
 
index 55a6bebb02ba1313a48543054f118e9b39bbe730..177e4f3dbbbf9e01c506eb44a571c092cbd986a6 100644 (file)
@@ -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
index f257e63233ccaa5ce897fe8284c6162bda14257e..715e9d33e387290a9144c88df42486f69bf9d565 100644 (file)
@@ -30,10 +30,20 @@ using std::endl;
 #include <sigc++/slot.h>
 #include <typeinfo>
 
+/* 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 obj_T>
 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<obj_T>::object_death));
+               obj.GoingAway.connect (sigc::bind (sigc::ptr_fun (object_death), static_cast<Command*>(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__