dynamic keyframes, textbox rework, andrea ffmpeg.opts, perpetual chkpt undo, lv2...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / pluginclient.C
index 33aba8f34f691997fece6f33449ad92922b57145..0a690b2e673868d3e65700da5c323022f90abc91 100644 (file)
@@ -246,6 +246,7 @@ void PluginClient::hide_gui()
 //printf("PluginClient::hide_gui %d thread->window=%p\n", __LINE__, thread->window);
                thread->window->unlock_window();
 //printf("PluginClient::delete_thread %d\n", __LINE__);
+               thread->join();
        }
 }
 
@@ -547,39 +548,33 @@ void PluginClient::load_defaults_xml()
 //printf("PluginClient::load_defaults_xml %d %s\n", __LINE__, path);
 
        KeyFrame temp_keyframe;
-       FILE *fd = fopen(path, "r");
-       if(fd)
-       {
-               char *data = temp_keyframe.get_data();
-               int data_size = fread(data, 1, MESSAGESIZE-1, fd);
+       FILE *fp = fopen(path, "r");
+       if( fp ) {
+               struct stat st;  int fd = fileno(fp);
+               int64_t sz = !fstat(fd, &st) ? st.st_size : BCTEXTLEN;
+               char *data = temp_keyframe.get_data(sz+1);
+               int data_size = fread(data, 1, sz, fp);
                if( data_size < 0 ) data_size = 0;
-               if( data_size > 0 )
-               {
+               if( data_size > 0 ) {
 // Get window extents
                        int state = 0;
-                       for(int i = 0; i < data_size - 8; i++)
-                       {
-                               if(data[i] == '<') break;
-                               if(isdigit(data[i]))
-                               {
-                                       if(state == 0)
-                                       {
-                                               window_x = atoi(data + i);
-                                               state++;
-                                       }
-                                       else
-                                       {
-                                               window_y = atoi(data + i);
-                                               break;
-                                       }
-                                       while(i < data_size && isdigit(data[i])) i++;
+                       for( int i=0; i<(data_size-8) && data[i]!='<'; ++i ) {
+                               if( !isdigit(data[i]) ) continue;
+                               if( !state ) {
+                                       window_x = atoi(data + i);
+                                       state = 1;
                                }
+                               else {
+                                       window_y = atoi(data + i);
+                                       break;
+                               }
+                               while( i<data_size && isdigit(data[i]) ) ++i;
                        }
                        data[data_size] = 0;
                        read_data(&temp_keyframe);
                }
 
-               fclose(fd);
+               fclose(fp);
        }
        using_defaults = 0;
 //printf("PluginClient::load_defaults_xml %d %s\n", __LINE__, path);