Disable preferences menu if the config can't be written.
[dcpomatic.git] / src / lib / film.cc
index 086d12e634188138590807aa9fab6c13f70f9b50..bd5724828b1d196ee279f428a963a2bcb5ee5611 100644 (file)
@@ -948,19 +948,18 @@ Film::signal_change (ChangeType type, Property p)
        if (type == CHANGE_TYPE_DONE) {
                _dirty = true;
 
-               switch (p) {
-               case Film::CONTENT:
+               if (p == Film::CONTENT) {
                        set_video_frame_rate (_playlist->best_video_frame_rate ());
-                       break;
-               case Film::VIDEO_FRAME_RATE:
-               case Film::SEQUENCE:
-                       _playlist->maybe_sequence ();
-                       break;
-               default:
-                       break;
                }
 
                emit (boost::bind (boost::ref (Change), type, p));
+
+               if (p == Film::VIDEO_FRAME_RATE || p == Film::SEQUENCE) {
+                       /* We want to call Playlist::maybe_sequence but this must happen after the
+                          main signal emission (since the butler will see that emission and un-suspend itself).
+                       */
+                       emit (boost::bind(&Playlist::maybe_sequence, _playlist.get()));
+               }
        } else {
                Change (type, p);
        }
@@ -1644,8 +1643,10 @@ Film::closed_caption_tracks () const
        list<DCPTextTrack> tt;
        BOOST_FOREACH (shared_ptr<Content> i, content()) {
                BOOST_FOREACH (shared_ptr<TextContent> j, i->text) {
-                       if (j->type() == TEXT_CLOSED_CAPTION && j->dcp_track() && find(tt.begin(), tt.end(), j->dcp_track().get()) == tt.end()) {
-                               tt.push_back (j->dcp_track().get());
+                       /* XXX: Empty DCPTextTrack ends up being a magic value here */
+                       DCPTextTrack dtt = j->dcp_track().get_value_or(DCPTextTrack());
+                       if (j->type() == TEXT_CLOSED_CAPTION && find(tt.begin(), tt.end(), dtt) == tt.end()) {
+                               tt.push_back (dtt);
                        }
                }
        }