remove asset while preview active segv fix, guard against segv with missing asset...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mwindow.C
index 5a5c5f03f2485b29b74b160cf9ff2345c15ecbf4..5fde46cc777d3ecf986554ba31354881e8af0591 100644 (file)
 #include "vframe.h"
 #include "vtrack.h"
 #include "versioninfo.h"
+#include "vicon.h"
 #include "videodevice.inc"
 #include "videowindow.h"
 #include "vplayback.h"
@@ -1388,7 +1389,7 @@ void MWindow::create_mixers()
        save_backup();
        undo->update_undo_after(_("create mixers"), LOAD_ALL);
        restart_brender();
-       gui->update(1, 2, 1, 1, 1, 1, 0);
+       gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 0);
        sync_parameters(CHANGE_ALL);
 }
 
@@ -2007,6 +2008,7 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
                                break;
                        }
                        if( strcmp(cin_version, CINELERRA_VERSION) &&
+                           strcmp(cin_version, "Unify") &&
                            strcmp(cin_version, "5.1") ) {
                                char string[BCTEXTLEN];
                                snprintf(string, sizeof(string),
@@ -2977,7 +2979,7 @@ void MWindow::set_auto_visibility(Autos *autos, int value)
        else
                return;
 
-       gui->update(0, 1, 0, 0, 0, 0, 0);
+       gui->update(0, NORMAL_DRAW, 0, 0, 0, 0, 0);
        gui->mainmenu->update_toggles(1);
        gui->unlock_window();
        gwindow->gui->update_toggles(1);
@@ -3218,7 +3220,7 @@ void MWindow::hide_plugin(Plugin *plugin, int lock)
        plugin->show = 0;
 // Update the toggle
        gui->lock_window("MWindow::hide_plugin");
-       gui->update(0, 1, 0, 0, 0, 0, 0);
+       gui->update(0, NORMAL_DRAW, 0, 0, 0, 0, 0);
        gui->unlock_window();
 
        if(lock) plugin_gui_lock->lock("MWindow::hide_plugin");
@@ -3549,7 +3551,7 @@ void MWindow::update_project(int load_mode)
                gui->load_panes();
        }
 
-       gui->update(1, 1, 1, 1, 1, 1, 1);
+       gui->update(1, NORMAL_DRAW, 1, 1, 1, 1, 1);
        if(debug) PRINT_TRACE
        gui->unlock_window();
        init_brender();
@@ -4009,6 +4011,10 @@ void MWindow::remove_asset_from_caches(Asset *asset)
 void MWindow::remove_assets_from_project(int push_undo, int redraw,
                ArrayList<Indexable*> *drag_assets, ArrayList<EDL*> *drag_clips)
 {
+       awindow->gui->vicon_thread->stop_drawing();
+       awindow->gui->vicon_thread->drawing_started(); // waits for draw lock
+       awindow->gui->vicon_thread->drawing_stopped();
+
        for(int i = 0; i < drag_assets->total; i++) {
                Indexable *indexable = drag_assets->get(i);
                if(indexable->is_asset) remove_asset_from_caches((Asset*)indexable);
@@ -4054,7 +4060,7 @@ void MWindow::remove_assets_from_project(int push_undo, int redraw,
                restart_brender();
 
                gui->lock_window("MWindow::remove_assets_from_project 3");
-               gui->update(1, 1, 1, 1, 0, 1, 0);
+               gui->update(1, NORMAL_DRAW, 1, 1, 0, 1, 0);
                gui->unlock_window();
 
        // Removes from playback here
@@ -4380,7 +4386,7 @@ void MWindow::resync_guis()
 // Update GUIs
        restart_brender();
        gui->lock_window("MWindow::resync_guis");
-       gui->update(1, 1, 1, 1, 1, 1, 0);
+       gui->update(1, NORMAL_DRAW, 1, 1, 1, 1, 0);
        gui->unlock_window();
 
        cwindow->gui->lock_window("MWindow::resync_guis");