X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fawindowgui.C;h=8c615bee7be58dea8a298b6d0f3cbb611c32101f;hb=976d56536456148f6d14a2c12630c20e367abbe1;hp=7e97656929ae6787fd8e37d0c8d13de183502c8d;hpb=32294ae14f17c867a39f638112cbec12d59b32d6;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/awindowgui.C b/cinelerra-5.1/cinelerra/awindowgui.C index 7e976569..8c615bee 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.C +++ b/cinelerra-5.1/cinelerra/awindowgui.C @@ -1426,11 +1426,13 @@ void AWindowGUI::create_label_folder() void AWindowGUI::update_asset_list() { + ArrayList new_assets; for( int i = 0; i < assets.total; i++ ) { AssetPicon *picon = (AssetPicon*)assets.values[i]; picon->in_use = 0; } + mwindow->gui->lock_window("AWindowGUI::update_asset_list"); // Synchronize EDL clips for( int i=0; iedl->clips.size(); ++i ) { int exists = 0; @@ -1451,8 +1453,7 @@ void AWindowGUI::update_asset_list() if( !exists ) { AssetPicon *picon = new AssetPicon(mwindow, this, mwindow->edl->clips[i]); - picon->create_objects(); - assets.append(picon); + new_assets.append(picon); } } @@ -1475,14 +1476,11 @@ void AWindowGUI::update_asset_list() if( !exists ) { AssetPicon *picon = new AssetPicon(mwindow, this, current); - picon->create_objects(); - assets.append(picon); + new_assets.append(picon); } } - mwindow->gui->lock_window("AWindowGUI::update_asset_list"); mwindow->gui->default_message(); - mwindow->gui->unlock_window(); // Synchronize nested EDLs for( int i=0; iedl->nested_edls.size(); ++i ) { @@ -1504,10 +1502,16 @@ void AWindowGUI::update_asset_list() if( !exists ) { AssetPicon *picon = new AssetPicon(mwindow, this, (Indexable*)nested_edl); - picon->create_objects(); - assets.append(picon); + new_assets.append(picon); } } + mwindow->gui->unlock_window(); + + for( int i=0; icreate_objects(); + assets.append(picon); + } for( int i = assets.size() - 1; i >= 0; i-- ) { AssetPicon *picon = (AssetPicon*)assets.get(i); @@ -2026,20 +2030,30 @@ int AWindowAssets::handle_event() { AssetPicon *asset_picon = (AssetPicon *)get_selection(0, 0); if( !asset_picon ) return 0; + Indexable *picon_idxbl = asset_picon->indexable; + EDL *picon_edl = asset_picon->edl; + int proxy = 0; + VWindow *vwindow = 0; switch( mwindow->edl->session->awindow_folder ) { case AW_AEFFECT_FOLDER: case AW_VEFFECT_FOLDER: case AW_ATRANSITION_FOLDER: case AW_VTRANSITION_FOLDER: return 1; + case AW_PROXY_FOLDER: + proxy = 1; // fall thru + default: + if( mwindow->vwindows.size() > DEFAULT_VWINDOW ) + vwindow = mwindow->vwindows.get(DEFAULT_VWINDOW); + break; } - VWindow *vwindow = mwindow->vwindows.size() > DEFAULT_VWINDOW ? - mwindow->vwindows.get(DEFAULT_VWINDOW) : 0; if( !vwindow || !vwindow->is_running() ) return 1; + if( proxy && picon_idxbl ) { + picon_edl = gui->collect_proxy(picon_idxbl); + picon_idxbl = 0; + } - if( asset_picon->indexable ) - vwindow->change_source(asset_picon->indexable); - else if( asset_picon->edl ) - vwindow->change_source(asset_picon->edl); + if( picon_idxbl ) vwindow->change_source(picon_idxbl); + else if( picon_edl ) vwindow->change_source(picon_edl); return 1; }