X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginclient.C;h=7f1fdd04323959926339ba8bc5ad108803b207ea;hp=0a690b2e673868d3e65700da5c323022f90abc91;hb=2e48b660e37eb5c661264d601211e16cb6cd6e89;hpb=b2eb290b3f6e5c233393017aa152e67c76243130 diff --git a/cinelerra-5.1/cinelerra/pluginclient.C b/cinelerra-5.1/cinelerra/pluginclient.C index 0a690b2e..7f1fdd04 100644 --- a/cinelerra-5.1/cinelerra/pluginclient.C +++ b/cinelerra-5.1/cinelerra/pluginclient.C @@ -30,6 +30,7 @@ #include "edlsession.h" #include "file.h" #include "filesystem.h" +#include "filexml.h" #include "indexable.h" #include "language.h" #include "localsession.h" @@ -201,8 +202,11 @@ PluginClient::PluginClient(PluginServer *server) PluginClient::~PluginClient() { -// Delete the GUI thread. The GUI must be hidden with hide_gui first. - delete thread; + if( thread ) { + hide_gui(); + thread->join(); + delete thread; + } // Virtual functions don't work here. if(defaults) delete defaults; @@ -245,8 +249,6 @@ void PluginClient::hide_gui() thread->window->set_done(0); //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(); } } @@ -556,9 +558,12 @@ void PluginClient::load_defaults_xml() int data_size = fread(data, 1, sz, fp); if( data_size < 0 ) data_size = 0; if( data_size > 0 ) { + data[data_size] = 0; + temp_keyframe.xbuf->oseek(data_size); // Get window extents - int state = 0; - for( int i=0; i<(data_size-8) && data[i]!='<'; ++i ) { + int i = 0; + for( int state=0; i<(data_size-8) && state>=0; ++i ) { + if( !data[i] || data[i] == '<' ) break; if( !isdigit(data[i]) ) continue; if( !state ) { window_x = atoi(data + i); @@ -566,11 +571,11 @@ void PluginClient::load_defaults_xml() } else { window_y = atoi(data + i); - break; + state = -1; } while( iiseek(i); read_data(&temp_keyframe); }