prevent popup deactivation while button_down
[goodguy/history.git] / cinelerra-5.0 / cinelerra / main.C
index bba65b7651c30b0a21a78af301b8f279775e6645..45c4db037a2d651cfcdf2f43621f5723e7bc23ce 100644 (file)
@@ -108,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;
@@ -186,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++)
        {
@@ -263,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];
@@ -353,8 +359,7 @@ int main(int argc, char *argv[])
 
                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;
@@ -386,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;