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;
int load_backup = 0;
+ int start_remote_control = 0;
for(int i = 1; i < argc; i++)
{
case DO_GUI:
{
- int done = 0;
+ int restart = 0, done = 0;
while( !done ) {
BC_WindowBase::get_resources()->vframe_shm = 0;
MWindow mwindow;
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;