X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindow.C;h=381b0c1afe7c0d1486f8523b7f79a40bbc7174d4;hb=190b4810ec184c74ceab3fcd6faf09a91c92c53c;hp=18b9a239bb6e7fb127a0eb2f0f44981018d412a2;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index 18b9a239..381b0c1a 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -214,6 +214,8 @@ MWindow::MWindow() MWindow::~MWindow() { in_destructor = 1; + stop_playback(1); + stop_brender(); //printf("MWindow::~MWindow %d\n", __LINE__); gui->stop_drawing(); gui->remote_control->deactivate(); @@ -230,9 +232,9 @@ MWindow::~MWindow() // Save defaults for open plugins plugin_gui_lock->lock("MWindow::~MWindow"); - for(int i = 0; i < plugin_guis->size(); i++) - { + for(int i = 0; i < plugin_guis->size(); i++) { plugin_guis->get(i)->hide_gui(); + delete_plugin(plugin_guis->get(i)); } plugin_gui_lock->unlock(); hide_keyframe_guis(); @@ -277,10 +279,10 @@ MWindow::~MWindow() join(); #endif reset_caches(); - dead_plugins->remove_all(); + dead_plugins->remove_all_objects(); + delete_plugins(); finit_error(); keyframe_threads->remove_all_objects(); - if( !edl->Garbage::remove_user() ) edl = 0; colormodels.remove_all_objects(); delete gui; gui = 0; delete render; render = 0; @@ -303,12 +305,13 @@ MWindow::~MWindow() delete keyframe_threads; keyframe_threads = 0; delete undo; undo = 0; delete preferences; preferences = 0; + delete exportedl; exportedl = 0; delete session; session = 0; delete defaults; defaults = 0; delete assets; assets = 0; delete splash_window; splash_window = 0; - delete theme; theme = 0; - delete_plugins(); +// delete theme; theme = 0; // deleted by delete_plugins + if( !edl->Garbage::remove_user() ) edl = 0; delete channeldb_buz; delete channeldb_v4l2jpeg; // This must be last thread to exit @@ -318,6 +321,10 @@ MWindow::~MWindow() delete vwindows_lock; delete brender_lock; delete keyframe_gui_lock; + colormodels.remove_all_objects(); + interlace_project_modes.remove_all_objects(); + interlace_asset_modes.remove_all_objects(); + interlace_asset_fixmethods.remove_all_objects(); sighandler->terminate(); delete sighandler; } @@ -1400,29 +1407,13 @@ SET_TRACE } // Test existing EDLs - if(result) - { - for(int j = 0; j < new_edls.total + 1; j++) - { - Asset *old_asset; - if(j == new_edls.total) - { - old_asset = edl->assets->get_asset(new_asset->path); - if( old_asset ) - { - *new_asset = *old_asset; - result = 0; - } - } - else - { - old_asset = new_edls[j]->assets->get_asset(new_asset->path); - if( old_asset ) - { - *new_asset = *old_asset; - result = 0; - } - } + for(int j = 0; result && j <= new_edls.total; j++) { + Asset *old_asset = j < new_edls.total ? + new_edls[j]->assets->get_asset(new_asset->path) : + edl->assets->get_asset(new_asset->path); + if( old_asset ) { + *new_asset = *old_asset; + result = 0; } } @@ -2361,12 +2352,8 @@ void MWindow::show_plugin(Plugin *plugin) SET_TRACE // Remove previously deleted plugin GUIs - dead_plugin_lock->lock("MWindow::delete_plugin"); - for(int i = 0; i < dead_plugins->size(); i++) - { - delete dead_plugins->get(i); - } - dead_plugins->remove_all(); + dead_plugin_lock->lock("MWindow::show_plugin"); + dead_plugins->remove_all_objects(); dead_plugin_lock->unlock(); //printf("MWindow::show_plugin %d\n", __LINE__); @@ -2399,7 +2386,8 @@ SET_TRACE //printf("MWindow::show_plugin %p %d\n", server, server->uses_gui); if(server && server->uses_gui) { - PluginServer *gui = plugin_guis->append(new PluginServer(*server)); + PluginServer *gui = new PluginServer(*server); + plugin_guis->append(gui); // Needs mwindow to do GUI gui->set_mwindow(this); gui->open_plugin(0, preferences, edl, plugin);