gamma yuva hist fix, theme change without exit
[goodguy/history.git] / cinelerra-5.0 / cinelerra / main.C
index e13cbabe5dd830f1cc605a8624946f1e72f4b101..69895ec4c996df5fb1f065986896e8e9cc5821b7 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
@@ -125,6 +106,7 @@ int main(int argc, char *argv[])
        char batch_path[BCTEXTLEN];
        char locale_path[BCTEXTLEN];
        char exe_path[BCTEXTLEN];
+       char env_path[BCTEXTLEN];
        int nice_value = 20;
        int start_remote_control = 0;
        config_path[0] = 0;
@@ -134,6 +116,8 @@ int main(int argc, char *argv[])
 
 
        get_exe_path(exe_path);
+       snprintf(env_path, sizeof(env_path), "CINELERRA_PATH=%s", exe_path);
+       putenv(env_path);
        sprintf(locale_path, "%s%s", exe_path, LOCALEDIR);
 
 
@@ -202,6 +186,7 @@ int main(int argc, char *argv[])
 
 
 
+       int load_backup = 0;
 
        for(int i = 1; i < argc; i++)
        {
@@ -279,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];
@@ -364,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;
                        while( !done ) {
                                BC_WindowBase::get_resources()->vframe_shm = 0;
                                MWindow mwindow;
@@ -416,6 +404,15 @@ int main(int argc, char *argv[])
                                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
+                               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 };
+                               execv(exe_path, av);
+#endif
                        }
 //SET_TRACE
 DISABLE_BUFFER