prevent popup deactivation while button_down
[goodguy/history.git] / cinelerra-5.0 / cinelerra / main.C
index 69895ec4c996df5fb1f065986896e8e9cc5821b7..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;
@@ -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;