X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fcinelerra%2Fmain.C;h=45c4db037a2d651cfcdf2f43621f5723e7bc23ce;hb=af9d0b80674da7166da6faabe7cb43b4244c212c;hp=69895ec4c996df5fb1f065986896e8e9cc5821b7;hpb=0fb566814c8a2948506be87ea7ecd08128ae119b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/cinelerra/main.C b/cinelerra-5.0/cinelerra/main.C index 69895ec4..45c4db03 100644 --- a/cinelerra-5.0/cinelerra/main.C +++ b/cinelerra-5.0/cinelerra/main.C @@ -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; @@ -187,6 +186,7 @@ int main(int argc, char *argv[]) int load_backup = 0; + int start_remote_control = 0; for(int i = 1; i < argc; i++) { @@ -359,7 +359,7 @@ int main(int argc, char *argv[]) case DO_GUI: { - int done = 0; + int restart = 0, done = 0; while( !done ) { BC_WindowBase::get_resources()->vframe_shm = 0; MWindow mwindow; @@ -391,33 +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 1 - if( !mwindow.reload() ) break; -// due to leaks and munges in x fonts, this loop has to be -// executed via a total program restart 2/18/2016 + } + + if( restart < 0 ) { char exe_path[BCTEXTLEN]; - if( readlink("/proc/self/exe", exe_path, sizeof(exe_path)) < 0 ) break; - char *const av[3] = { exe_path, (char*)(load_backup? "-x" : 0), 0 }; + 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); -#endif } + } //SET_TRACE DISABLE_BUFFER - break; - } + break; } return 0;