Hack round a maybe delightful (for some values of delightful) and certainly evil...
[ardour.git] / gtk2_ardour / midi_streamview.cc
index 807d6253d4f4ffbc646c8192f68dfc312ad3665e..f3b418fc99fede4afecd42f3b9a967ccce40ce63 100644 (file)
@@ -206,22 +206,6 @@ MidiStreamView::display_region(MidiRegionView* region_view, bool load_model)
        region_view->display_model(source->model());
 }
 
-void
-MidiStreamView::enter_internal_edit_mode ()
-{
-        for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
-                (*i)->hide_rect ();
-        }
-}
-
-void
-MidiStreamView::leave_internal_edit_mode ()
-{
-        for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
-                (*i)->show_rect ();
-        }
-}
-
 void
 MidiStreamView::display_track (boost::shared_ptr<Track> tr)
 {
@@ -468,6 +452,20 @@ MidiStreamView::setup_rec_box ()
                                
                                plist.add (ARDOUR::Properties::start, start);
                                plist.add (ARDOUR::Properties::length, 1);
+                               /* Just above we're setting this nascent region's length to 1.  I think this
+                                  is so that the RegionView gets created with a non-zero width, as apparently
+                                  creating a RegionView with a zero width causes it never to be displayed
+                                  (there is a warning in TimeAxisViewItem::init about this).  However, we
+                                  must also set length_beats to something non-zero, otherwise the frame length
+                                  of 1 causes length_beats to be set to some small quantity << 1.  Then
+                                  when the position is set up below, this length_beats is used to recompute
+                                  length using Tempo::framepos_plus_bbt, which is slightly innacurate for small
+                                  beats values (see comment in Tempo::framepos_plus_bbt) [mostly because
+                                  it converts floating point beats to bars, beats and integer ticks].  The upshot
+                                  of which being that length gets set back to 0, meaning no region view is ever
+                                  seen, meaning no MIDI notes during record (#3820).
+                               */
+                               plist.add (ARDOUR::Properties::length_beats, 1);
                                plist.add (ARDOUR::Properties::name, string());
                                plist.add (ARDOUR::Properties::layer, 0);