Don't write undo records for automation that moves with regions when nothing changes...
[ardour.git] / libs / evoral / src / SMF.cpp
index ae3c8781a53976c49173f463e4806fb406c57d43..f2e12fdeb696c044d0465cdde75a0507e2e0ada9 100644 (file)
@@ -128,11 +128,12 @@ SMF::create(const std::string& path, int track, uint16_t ppqn) THROW_FILE_ERROR
        _file_path = path;
 
        _smf = smf_new();
-       if (smf_set_ppqn(_smf, ppqn) != 0) {
-               throw FileError();
-       }
 
        if (_smf == NULL) {
+                return -1;
+       }
+
+       if (smf_set_ppqn(_smf, ppqn) != 0) {
                return -1;
        }
 
@@ -147,6 +148,21 @@ SMF::create(const std::string& path, int track, uint16_t ppqn) THROW_FILE_ERROR
                return -2;
 
        _smf_track->next_event_number = 0;
+
+        {
+                /* put a stub file on disk */
+
+                PBD::StdioFileDescriptor d (_file_path, "w+");
+                FILE* f = d.allocate ();
+                if (f == 0) {
+                        return -1;
+                }
+                
+                if (smf_save (_smf, f)) {
+                        return -1;
+                }
+        }
+
        _empty = true;
 
        return 0;
@@ -156,22 +172,6 @@ void
 SMF::close() THROW_FILE_ERROR
 {
        if (_smf) {
-#if 0
-                /* XXX why would we automatically save-on-close? 
-                 */
-
-               PBD::StdioFileDescriptor d (_file_path, "w+");
-               FILE* f = d.allocate ();
-               if (f == 0) {
-                       throw FileError ();
-               }
-               
-                cerr << "CLOSE: Save SMF to " << _file_path << endl;
-
-               if (smf_save(_smf, f) != 0) {
-                       throw FileError();
-               }
-#endif
                smf_delete(_smf);
                _smf = 0;
                _smf_track = 0;