Coalesce player changes around KDM loading.
[dcpomatic.git] / src / tools / dcpomatic_player.cc
index 2c561d16b69f8d111871280e8d49799aeb7d40b7..ea73511578397f287c82679ac85ab29b93b2073d 100644 (file)
@@ -472,6 +472,19 @@ public:
 
 private:
 
+       void examine_content ()
+       {
+               DCPOMATIC_ASSERT (_film);
+               auto dcp = dynamic_pointer_cast<DCPContent>(_film->content().front());
+               DCPOMATIC_ASSERT (dcp);
+               dcp->examine (_film, shared_ptr<Job>());
+
+               /* Examining content re-creates the TextContent objects, so we must re-enable them */
+               for (auto i: dcp->text) {
+                       i->set_use (true);
+               }
+       }
+
        bool report_errors_from_last_job (wxWindow* parent) const
        {
                auto jm = JobManager::instance ();
@@ -638,8 +651,10 @@ private:
                        DCPOMATIC_ASSERT (dcp);
                        try {
                                if (dcp) {
+                                       _viewer->set_coalesce_player_changes (true);
                                        dcp->add_kdm (dcp::EncryptedKDM(dcp::file_to_string(wx_to_std(d->GetPath()), MAX_KDM_SIZE)));
-                                       dcp->examine (_film, shared_ptr<Job>());
+                                       examine_content();
+                                       _viewer->set_coalesce_player_changes (false);
                                }
                        } catch (exception& e) {
                                error_dialog (this, wxString::Format (_("Could not load KDM.")), std_to_wx(e.what()));
@@ -704,8 +719,11 @@ private:
                        --id;
                }
 
+               _viewer->set_coalesce_player_changes (true);
                dcp->set_cpl ((*i)->id());
-               dcp->examine (_film, shared_ptr<Job>());
+               examine_content ();
+               _viewer->set_coalesce_player_changes (false);
+
                _info->triggered_update ();
        }