X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcdialog.C;h=0a855f68c9ca2ed109af96be92ff962094072003;hp=ef834919c6f250388c974eae0a881a1761d2d521;hb=22c6251d37911a11e322bf7518e6a992ea0bb6c7;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/guicast/bcdialog.C b/cinelerra-5.1/guicast/bcdialog.C index ef834919..0a855f68 100644 --- a/cinelerra-5.1/guicast/bcdialog.C +++ b/cinelerra-5.1/guicast/bcdialog.C @@ -34,6 +34,7 @@ BC_DialogThread::BC_DialogThread() gui = 0; startup_lock = new Condition(1, "BC_DialogThread::startup_lock"); window_lock = new Mutex("BC_DialogThread::window_lock"); + active_lock = new Mutex("BC_DialogThread::active_lock"); } BC_DialogThread::~BC_DialogThread() @@ -49,14 +50,15 @@ BC_DialogThread::~BC_DialogThread() delete startup_lock; delete window_lock; + delete active_lock; } -void BC_DialogThread::lock_window(const char *location) +void BC_DialogThread::lock_dialog(const char *location) { window_lock->lock(location); } -void BC_DialogThread::unlock_window() +void BC_DialogThread::unlock_dialog() { window_lock->unlock(); } @@ -93,6 +95,7 @@ void BC_DialogThread::start() void BC_DialogThread::run() { + active_lock->lock("BC_DialogThread::run"); gui = new_gui(); startup_lock->unlock(); int result = gui->run_window(); @@ -105,19 +108,9 @@ void BC_DialogThread::run() window_lock->unlock(); handle_close_event(result); + active_lock->unlock(); } -void BC_DialogThread::lock_gui(const char *location) -{ - window_lock->lock(location); -} - -void BC_DialogThread::unlock_gui() -{ - window_lock->unlock(); -} - - BC_Window* BC_DialogThread::new_gui() { printf("BC_DialogThread::new_gui called\n"); @@ -139,17 +132,22 @@ void BC_DialogThread::handle_close_event(int result) void BC_DialogThread::close_window() { - lock_window("BC_DialogThread::close_window"); + lock_dialog("BC_DialogThread::close_window"); if(gui) { gui->lock_window("BC_DialogThread::close_window"); gui->set_done(1); gui->unlock_window(); } - unlock_window(); + unlock_dialog(); join(); } - +void BC_DialogThread::join() +{ + if( !running() ) return; + active_lock->lock("BC_DialogThread::join"); + active_lock->unlock(); +}