rework keyframe hide popup, keyframe auto render, textbox set_selection wide text
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindow.C
index 18b9a239bb6e7fb127a0eb2f0f44981018d412a2..f53dc4d65e587fd1493d423da837ba7928880cac 100644 (file)
@@ -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);
@@ -3209,6 +3197,7 @@ int MWindow::run_script(FileXML *script)
 
 int MWindow::interrupt_indexes()
 {
+       mainprogress->cancelled = 1;
        mainindexes->interrupt_build();
        return 0;
 }
@@ -3524,7 +3513,7 @@ int MWindow::select_asset(int vtrack, int delete_tracks)
        if( !edit ) return 1;
        Asset *asset = edit->asset;
        if( !asset || !asset->is_asset ) return 1;
-       return select_asset(asset, edit->channel, -1, delete_tracks);
+       return select_asset(asset, edit->channel, 0, delete_tracks);
 }
 
 void MWindow::dump_plugindb(FILE *fp)