prevent popup deactivation while button_down
[goodguy/history.git] / cinelerra-5.0 / cinelerra / main.C
index 1df7ff000662e95091655442cfe2bb70c0664fe7..45c4db037a2d651cfcdf2f43621f5723e7bc23ce 100644 (file)
@@ -22,8 +22,8 @@
 #include "batchrender.h"
 #include "bcsignals.h"
 #include "edl.h"
+#include "file.inc"
 #include "filexml.h"
-#include "fileserver.h"
 #include "filesystem.h"
 #include "language.h"
 #include "langinfo.h"
@@ -91,25 +91,6 @@ public:
 };
 
 
-void get_exe_path(char *result)
-{
-// Get executable path
-       pid_t pid = getpid();
-       char proc_path[BCTEXTLEN];
-       int len = 0;
-       result[0] = 0;
-       sprintf(proc_path, "/proc/%d/exe", pid);
-       if((len = readlink(proc_path, result, BCTEXTLEN)) >= 0)
-       {
-               result[len] = 0;
-//printf("Preferences::Preferences %d %s\n", __LINE__, result);
-               char *ptr = strrchr(result, '/');
-               if(ptr) *ptr = 0;
-       }
-
-}
-
-
 int main(int argc, char *argv[])
 {
 // handle command line arguments first
@@ -127,7 +108,6 @@ int main(int argc, char *argv[])
        char exe_path[BCTEXTLEN];
        char env_path[BCTEXTLEN];
        int nice_value = 20;
-       int start_remote_control = 0;
        config_path[0] = 0;
        batch_path[0] = 0;
        deamon_path[0] = 0;
@@ -205,6 +185,8 @@ int main(int argc, char *argv[])
 
 
 
+       int load_backup = 0;
+       int start_remote_control = 0;
 
        for(int i = 1; i < argc; i++)
        {
@@ -282,6 +264,11 @@ int main(int argc, char *argv[])
                        }
                }
                else
+               if(!strcmp(argv[i], "-x"))
+               {
+                       load_backup = 1;
+               }
+               else
                {
                        char *new_filename;
                        new_filename = new char[BCTEXTLEN];
@@ -367,14 +354,12 @@ int main(int argc, char *argv[])
                        BatchRenderThread *thread = new BatchRenderThread;
                        thread->start_rendering(config_path,
                                batch_path);
-                       delete MWindow::file_server;
                        break;
                }
 
                case DO_GUI:
                {
-                       int done = 0;
-                       int load_backup = 0;
+                       int restart = 0, done = 0;
                        while( !done ) {
                                BC_WindowBase::get_resources()->vframe_shm = 0;
                                MWindow mwindow;
@@ -406,24 +391,37 @@ int main(int argc, char *argv[])
                                mwindow.start();
                                mwindow.run();
 //PRINT_TRACE
-                               if( mwindow.reload() )
-                                       start_remote_control =
-                                               mwindow.gui->remote_control->is_active();
-                               else
-                                       done = 1;
-                               if( !done ) {
+                               restart = mwindow.restart();
+                               if( restart ) {
                                        mwindow.save_backup();
                                        load_backup = 1;
+                                       start_remote_control =
+                                               mwindow.gui->remote_control->is_active();
                                }
+                               if( restart <= 0 )
+                                       done = 1;
 
                                mwindow.save_defaults();
 //PRINT_TRACE
                                filenames.remove_all_objects();
                        }
+
+                       if( restart < 0 ) {
+                               char exe_path[BCTEXTLEN];
+                               int len = readlink("/proc/self/exe", exe_path, sizeof(exe_path)-1);
+                               if( len < 0 ) break;
+                               exe_path[len] = 0;
+                               char *av[4] = { 0, };  int ac = 0;
+                               av[ac++] = exe_path;
+                               if( load_backup ) av[ac++] = (char*) "-x";
+                               if( start_remote_control ) av[ac++] = (char*) "-z";
+                               av[ac++] = 0;
+                               execv(exe_path, av);
+                       }
+               }
 //SET_TRACE
 DISABLE_BUFFER
-                       break;
-               }
+               break;
        }
 
        return 0;