X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginclient.C;h=606f83d95af6ce007aa7d685d5a6fbb730761af3;hb=04031cc2a664d2a6d9d2a37954c55cc68742d78c;hp=33aba8f34f691997fece6f33449ad92922b57145;hpb=270d86e71b318578d56d0e8a245cf14f32cf09ac;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/pluginclient.C b/cinelerra-5.1/cinelerra/pluginclient.C index 33aba8f3..606f83d9 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" @@ -80,6 +81,8 @@ void PluginClientThread::run() if(window) { window->lock_window("PluginClientThread::run"); window->create_objects(); + VFrame *picon = client->server->get_picon(); + if( picon ) window->set_icon(picon); window->unlock_window(); /* Only set it here so tracking doesn't update it until everything is created. */ @@ -201,8 +204,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,7 +251,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__); } } @@ -547,39 +552,36 @@ 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 ) { + data[data_size] = 0; + temp_keyframe.xbuf->oseek(data_size); // 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++; + 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); + state = 1; + } + else { + window_y = atoi(data + i); + state = -1; } + while( iiseek(i); read_data(&temp_keyframe); } - fclose(fd); + fclose(fp); } using_defaults = 0; //printf("PluginClient::load_defaults_xml %d %s\n", __LINE__, path);