label edit deadlock, build openexr cfg option, code cleanup
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindow.C
index 3a4aee8b5e3146d606c732f5417bc31145b2ec17..33cee066a515ecfff676d5b8ea90cc600d298f7d 100644 (file)
@@ -1180,13 +1180,21 @@ void MWindow::init_brender()
 void MWindow::restart_brender()
 {
 //printf("MWindow::restart_brender 1\n");
-       if(!brender_active || !preferences->use_brender) return;
-       if(brender) brender->restart(edl);
+       if( !brender_active || !preferences->use_brender ) return;
+       if( !brender ) return;
+       int locked  = gui->get_window_lock();
+       if( locked ) gui->unlock_window();
+       brender->restart(edl);
+       if( locked ) gui->lock_window("MWindow::restart_brender");
 }
 
 void MWindow::stop_brender()
 {
-       if(brender) brender->stop();
+       if( !brender ) return;
+       int locked  = gui->get_window_lock();
+       if( locked ) gui->unlock_window();
+       brender->stop();
+       if( locked ) gui->lock_window("MWindow::stop_brender");
 }
 
 int MWindow::brender_available(int position)
@@ -1602,6 +1610,15 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
                                                if(update_filename)
                                                        set_filename(new_edl->local_session->clip_title);
                                        }
+                                       else
+                                       if( load_mode == LOADMODE_RESOURCESONLY ) {
+                                               strcpy(new_edl->local_session->clip_title,
+                                                       filenames->get(i));
+                                               struct stat st;
+                                               time_t t = !stat(filenames->get(i),&st) ?
+                                                       st.st_mtime : time(&t);
+                                               ctime_r(&t, new_edl->local_session->clip_notes);
+                                       }
                                }
 
                                new_edls.append(new_edl);
@@ -1622,12 +1639,10 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
 
 
-       if(!result) gui->statusbar->default_message();
-
-
-
-
-
+       if(!result) {
+               gui->reset_default_message();
+               gui->default_message();
+       }
 
 
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
@@ -1681,32 +1696,26 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
        }
 
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
-       if(new_assets.size())
+       for(int i = 0; i < new_assets.size(); i++)
        {
-               for(int i = 0; i < new_assets.size(); i++)
-               {
-                       Asset *new_asset = new_assets[i];
+               Asset *new_asset = new_assets[i];
 
-                       File *new_file = 0;
-                       int got_it = 0;
-                       for(int j = 0; j < new_files.size(); j++)
+               File *new_file = 0;
+               int got_it = 0;
+               for(int j = 0; j < new_files.size(); j++)
+               {
+                       new_file = new_files[j];
+                       if(!strcmp(new_file->asset->path,
+                               new_asset->path))
                        {
-                               new_file = new_files[j];
-                               if(!strcmp(new_file->asset->path,
-                                       new_asset->path))
-                               {
-                                       got_it = 1;
-                                       break;
-                               }
+                               got_it = 1;
+                               break;
                        }
-
-                       mainindexes->add_next_asset(got_it ? new_file : 0, new_asset);
-                       got_indexes = 1;
-                       edl->assets->update(new_asset);
-
                }
 
-
+               mainindexes->add_next_asset(got_it ? new_file : 0, new_asset);
+               got_indexes = 1;
+               edl->assets->update(new_asset);
        }
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
 
@@ -1971,6 +1980,9 @@ void MWindow::create_objects(int want_gui,
 
        Timer timer;
 
+       init_awindow();
+       if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
+
        init_compositor();
        if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
 
@@ -1982,24 +1994,21 @@ void MWindow::create_objects(int want_gui,
        init_gui();
        if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
 
-       init_awindow();
-       if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
-
        init_levelwindow();
        if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
 
-       if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
-
        init_indexes();
        if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
 
        init_channeldb();
-
        if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
+
        init_gwindow();
        if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
+
        init_render();
        if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
+
        init_brender();
        init_exportedl();
        init_commercials();
@@ -2975,9 +2984,13 @@ void MWindow::rebuild_indices()
                index_state->index_status = INDEX_NOTTESTED;
                if( indexable->is_asset ) {
                        Asset *asset = (Asset *)indexable;
-                       if( asset->format != FILE_PCM )
+                       if( asset->format != FILE_PCM ) {
+                               asset->format = FILE_UNKNOWN;
                                asset->reset_audio();
+                       }
                        asset->reset_video();
+//                     File file; // re-probe the asset
+//                     file.open_file(preferences, asset, 1, 0);
                }
                mainindexes->add_next_asset(0, indexable);
        }
@@ -3122,8 +3135,8 @@ 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)
 {
-       for(int i = 0; i < session->drag_assets->total; i++) {
-               Indexable *indexable = session->drag_assets->get(i);
+       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);
        }
 
@@ -3140,11 +3153,11 @@ void MWindow::remove_assets_from_project(int push_undo, int redraw,
                }
        }
 
-       for(int i = 0; i < session->drag_assets->size(); i++) {
+       for(int i = 0; i < drag_assets->size(); i++) {
                for(int j = 0; j < vwindows.size(); j++) {
                        VWindow *vwindow = vwindows[j];
                        if( !vwindow->is_running() ) continue;
-                       if(session->drag_assets->get(i) == vwindow->get_source()) {
+                       if(drag_assets->get(i) == vwindow->get_source()) {
                                vwindow->gui->lock_window("MWindow::remove_assets_from_project 2");
                                vwindow->delete_source(1, 1);
                                vwindow->gui->unlock_window();
@@ -3152,29 +3165,22 @@ void MWindow::remove_assets_from_project(int push_undo, int redraw,
                }
        }
 
-       for(int i = 0; i < session->drag_assets->size(); i++) {
-               Indexable *indexable = session->drag_assets->get(i);
+       for(int i = 0; i < drag_assets->size(); i++) {
+               Indexable *indexable = drag_assets->get(i);
                remove_indexfile(indexable);
        }
 
 //printf("MWindow::rebuild_indices 1 %s\n", indexable->path);
        if(push_undo) undo->update_undo_before();
        if(drag_assets) edl->remove_from_project(drag_assets);
-       if(drag_clips) edl->remove_from_project(session->drag_clips);
+       if(drag_clips) edl->remove_from_project(drag_clips);
        if(redraw) save_backup();
        if(push_undo) undo->update_undo_after(_("remove assets"), LOAD_ALL);
-       if(redraw)
-       {
+       if(redraw) {
                restart_brender();
 
                gui->lock_window("MWindow::remove_assets_from_project 3");
-               gui->update(1,
-                       1,
-                       1,
-                       1,
-                       0,
-                       1,
-                       0);
+               gui->update(1, 1, 1, 1, 0, 1, 0);
                gui->unlock_window();
 
        // Removes from playback here