X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmainundo.C;h=9f69f8eb4754b8064dfc28590a202e24e4b70e62;hp=0c149cd40acc445d8626a060b7f7cae831ce0e00;hb=84ac8a2bb3357c04a3f67cf763b0f61ddbbd021d;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/mainundo.C b/cinelerra-5.1/cinelerra/mainundo.C index 0c149cd4..9f69f8eb 100644 --- a/cinelerra-5.1/cinelerra/mainundo.C +++ b/cinelerra-5.1/cinelerra/mainundo.C @@ -25,6 +25,7 @@ #include "clipedls.h" #include "edl.h" #include "filexml.h" +#include "indexfile.h" #include "mainindexes.h" #include "mainmenu.h" #include "mainsession.h" @@ -186,7 +187,9 @@ int MainUndo::redo_load_flags() int MainUndo::undo() { + mwindow->gui->close_keyvalue_popup(); mwindow->undo_commercial(); + UndoStackItem *current = undo_stack->current; if( current ) { undo_stack->current = next_undo(); @@ -209,12 +212,10 @@ int MainUndo::undo() //printf("MainUndo::undo %d %s\n", __LINE__, current->get_filename()); mwindow->set_filename(current->get_filename()); - if( mwindow->gui ) { // Now update the menu with the after entry - UndoStackItem *prev = PREVIOUS; - mwindow->gui->mainmenu->undo-> - update_caption(prev ? prev->get_description() : ""); - } + UndoStackItem *prev = PREVIOUS; + mwindow->gui->mainmenu->undo-> + update_caption(prev ? prev->get_description() : ""); } } @@ -226,6 +227,7 @@ int MainUndo::undo() int MainUndo::redo() { + mwindow->gui->close_keyvalue_popup(); UndoStackItem *current = next_redo(); if( current ) { undo_stack->current = current; @@ -255,25 +257,30 @@ int MainUndo::redo() // Here the master EDL loads int MainUndo::load_from_undo(FileXML *file, uint32_t load_flags) { - delete mwindow->gui->keyvalue_popup; - mwindow->gui->keyvalue_popup = 0; - if( load_flags & LOAD_SESSION ) { mwindow->gui->unlock_window(); mwindow->close_mixers(); mwindow->gui->lock_window("MainUndo::load_from_undo"); } - if( (load_flags & LOAD_ALL) == LOAD_ALL ) { - mwindow->edl->remove_user(); + EDL *prev_edl = mwindow->edl; + if( (load_flags & LOAD_ALL) == LOAD_ALL ) mwindow->init_edl(); - } mwindow->edl->load_xml(file, load_flags); for( Asset *asset=mwindow->edl->assets->first; asset; asset=asset->next ) { - mwindow->mainindexes->add_next_asset(0, asset); + mwindow->mainindexes->add_indexable(asset); } - for( int i=0; iedl->nested_edls.size(); ++i ) { - EDL *nested_edl = mwindow->edl->nested_edls[i]; - mwindow->mainindexes->add_next_asset(0, nested_edl); + if( prev_edl != mwindow->edl ) { + for( int i=0; iedl->nested_edls.size(); ++i ) { + EDL *nested_edl = mwindow->edl->nested_edls[i]; + if( !nested_edl->path[0] ) continue; + int k = prev_edl->nested_edls.size(); + while( --k >= 0 && // if nested edl was updated, force index rebuild + strcmp(nested_edl->path, prev_edl->nested_edls[k]->path) ); + if( k >= 0 && prev_edl->nested_edls[k]->equivalent_output(nested_edl) >= 0 ) + IndexFile::delete_index_files(mwindow->preferences, nested_edl); + mwindow->mainindexes->add_indexable(nested_edl); + } + prev_edl->remove_user(); } mwindow->mainindexes->start_build(); mwindow->update_plugin_guis(1);