mask xy scale, mask boundary only overlay, fix 8 char mask nm bug, rework maskgui...
[goodguy/cinelerra.git] / cinelerra-5.1 / guicast / bcdialog.C
index ef834919c6f250388c974eae0a881a1761d2d521..0a855f68c9ca2ed109af96be92ff962094072003 100644 (file)
@@ -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();
+}