info btn, zoom lockup, nesting, paste fixes
authorGood Guy <good1.2guy@gmail.com>
Mon, 27 Jun 2016 23:03:59 +0000 (17:03 -0600)
committerGood Guy <good1.2guy@gmail.com>
Mon, 27 Jun 2016 23:03:59 +0000 (17:03 -0600)
cinelerra-5.1/cinelerra/awindowgui.C
cinelerra-5.1/cinelerra/resourcepixmap.C
cinelerra-5.1/cinelerra/resourcethread.C
cinelerra-5.1/cinelerra/vedit.C
cinelerra-5.1/guicast/bcclipboard.C
cinelerra-5.1/guicast/bctextbox.C

index a6a1c1ce9ed9f82a964c34fd1bbef5ca4e06cecd..e052668b469b9ca9a0417e09d519712b0e1f75c1 100644 (file)
@@ -1508,8 +1508,6 @@ int AWindowFolders::selection_changed()
 
 int AWindowFolders::button_press_event()
 {
-       if( get_buttonpress() == 3 && is_event_win() && cursor_inside() )
-               return 0;
        return BC_ListBox::button_press_event();
 }
 
@@ -1560,8 +1558,6 @@ AWindowAssets::~AWindowAssets()
 
 int AWindowAssets::button_press_event()
 {
-       if( get_buttonpress() == 3 && is_event_win() && cursor_inside() )
-               return 0;
        return BC_ListBox::button_press_event();
 }
 
index 3892c54f3618c23cca36c25b53f316ab44a1dc95..df2876295ba9b9bbfea8c0a8e3b22f3ab9d34b69 100644 (file)
@@ -634,7 +634,9 @@ void ResourcePixmap::draw_audio_source(TrackCanvas *canvas,
 
                if(indexable->is_asset)
                {
+                       mwindow->gui->unlock_window();
                        File *source = mwindow->audio_cache->check_out(edit->asset, mwindow->edl);
+                       mwindow->gui->lock_window("draw_audio_source");
 
                        if(!source)
                        {
index 6aa27b99e125ff9c5ff9399b057609174a42726a..c3d69412ce65604194b7a6cbe63e47c001dfb9d2 100644 (file)
@@ -374,6 +374,8 @@ void ResourceThread::open_render_engine(EDL *nested_edl,
 
 File *ResourceThread::get_audio_source(Asset *asset)
 {
+       if( interrupted ) asset = 0;
+
        if( audio_asset && audio_asset != asset && (!asset ||
                strcmp(audio_asset->path, asset->path)) )
        {
@@ -394,6 +396,8 @@ File *ResourceThread::get_audio_source(Asset *asset)
 
 File *ResourceThread::get_video_source(Asset *asset)
 {
+       if( interrupted ) asset = 0;
+
        if( video_asset && video_asset != asset && (!asset ||
                strcmp(video_asset->path, asset->path)) )
        {
index 7f0115b08993cf14ccbe92cb02e6590a5f186d2c..775822fe5a0976201d0a6f2ce97ce6de3b98151a 100644 (file)
@@ -129,6 +129,8 @@ int VEdit::read_frame(VFrame *video_out,
        int use_cache,
        int use_asynchronous)
 {
+       File *file = 0;
+       int result = 0;
        int64_t source_position = 0;
        const int debug = 0;
 
@@ -139,20 +141,19 @@ if(debug) printf("VEdit::read_frame %d source_position=%jd input_position=%jd\n"
        Asset *asset = get_nested_asset(&source_position,
                input_position,
                direction);
+       if( !asset ) result = 1;
 
 if(debug) printf("VEdit::read_frame %d source_position=%jd input_position=%jd\n",
 __LINE__, source_position, input_position);
 
-       File *file = cache->check_out(asset,
-               edl);
-       int result = 0;
-
+       if( !result ) {
+               file = cache->check_out(asset, edl);
+               if( !file ) result = 1;
+       }
 if(debug) printf("VEdit::read_frame %d path=%s source_position=%jd\n",
 __LINE__, asset->path, source_position);
 
-       if(file)
-       {
-
+       if( !result ) {
 if(debug) printf("VEdit::read_frame %d\n", __LINE__);
                source_position = (direction == PLAY_FORWARD) ?
                        source_position :
@@ -179,8 +180,6 @@ if(debug) printf("VEdit::read_frame %d\n", __LINE__);
                cache->check_in(asset);
 if(debug) printf("VEdit::read_frame %d\n", __LINE__);
        }
-       else
-               result = 1;
 
 //for(int i = 0; i < video_out->get_w() * 3 * 20; i++) video_out->get_rows()[0][i] = 128;
        return result;
index c91c51fe6b9182ffe7735250014d623426721877..ba33171a71b6fd7588f9796363dd19b725546e91 100644 (file)
@@ -240,7 +240,7 @@ int BC_Clipboard::to_clipboard(const char *data, long len, int clipboard_num)
 #endif
 
 // Store in local buffer
-       if(this->data[clipboard_num] && length[clipboard_num] != len + 1)
+       if(this->data[clipboard_num] && length[clipboard_num] != len)
        {
                delete [] this->data[clipboard_num];
                this->data[clipboard_num] = 0;
@@ -250,10 +250,11 @@ int BC_Clipboard::to_clipboard(const char *data, long len, int clipboard_num)
        {
                length[clipboard_num] = len;
                this->data[clipboard_num] = new char[len + 1];
-               memcpy(this->data[clipboard_num], data, len);
-               this->data[clipboard_num][len] = 0;
        }
 
+       memcpy(this->data[clipboard_num], data, len);
+       this->data[clipboard_num][len] = 0;
+
        if(clipboard_num == PRIMARY_SELECTION)
        {
                XSetSelectionOwner(out_display, 
@@ -370,7 +371,8 @@ int BC_Clipboard::from_clipboard(char *data, long maxlen, int clipboard_num)
 #else
        XUnlockDisplay(in_display);
 #endif
-
+//int len = strlen(data);
+//printf("BC_Clipboard::from_clipboard %d: %d '%*.*s'\n",clipboard_num,len,len,len,data);
        return 0;
 }
 
index 0bcf9f464440069c1b517eac99987d0064a6fd61..cecd249294da015d75bae7a3209d6ca782fc629a 100644 (file)
@@ -2079,27 +2079,21 @@ int BC_TextBox::get_cursor_letter2(int cursor_x, int cursor_y)
 void BC_TextBox::select_word(int &letter1, int &letter2, int ibeam_letter)
 {
        int wtext_len = wtext_update();
-       if(!wtext_len) return;
-
        letter1 = letter2 = ibeam_letter;
-       do {
-               if(iswalnum(wtext[letter1])) letter1--;
-       } while(letter1 > 0 && iswalnum(wtext[letter1]));
-
-       if( !iswalnum(wtext[letter1]) ) letter1++;
-
-       do {
-               if( iswalnum(wtext[letter2]) ) letter2++;
-       } while( letter2 < wtext_len && isalnum(wtext[letter2]) );
+       if( letter1 < 0 ) letter1 = 0;
+       if( letter2 < 0 ) letter2 = 0;
+       if( letter1 > wtext_len ) letter1 = wtext_len;
+       if( letter2 > wtext_len ) letter2 = wtext_len;
+       if( !wtext_len ) return;
 
-       if( letter2 < wtext_len && wtext[letter2] == ' ') letter2++;
+       while( letter1 > 0 && iswalnum(wtext[letter1]) ) --letter1;
+       if( letter1 < wtext_len && iswspace(wtext[letter1]) ) ++letter1;
 
-       if(letter1 < 0) letter1 = 0;
-       if(letter2 < 0) letter2 = 0;
-       if(letter1 > wtext_len) letter1 = wtext_len;
-       if(letter2 > wtext_len) letter2 = wtext_len;
+       while( letter2 < wtext_len && iswalnum(wtext[letter2]) ) ++letter2;
+       if( letter2 < wtext_len && wtext[letter2] == ' ' ) ++letter2;
 }
 
+
 void BC_TextBox::select_line(int &letter1, int &letter2, int ibeam_letter)
 {
        int wtext_len = wtext_update();
@@ -2134,9 +2128,9 @@ void BC_TextBox::copy_selection(int clipboard_num)
                highlight_letter1 < 0 || highlight_letter2 < 0 ||
                highlight_letter2 - highlight_letter1 <= 0) return;
        int clip_len = highlight_letter2 - highlight_letter1;
-       char ctext[clip_len+1];
 //printf(" BC_TextBox::copy_selection %d %d %d\n",highlight_letter1, highlight_letter2, clip_len);
-       text_update(&wtext[highlight_letter1],clip_len, ctext,clip_len+1);
+       char ctext[4*clip_len+4];
+       clip_len = text_update(&wtext[highlight_letter1],clip_len, ctext,4*clip_len+4);
        get_clipboard()->to_clipboard(ctext, clip_len, clipboard_num);
 }
 
@@ -2146,11 +2140,11 @@ void BC_TextBox::paste_selection(int clipboard_num)
        int len = get_clipboard()->clipboard_len(clipboard_num);
        if( len > 0 )
        {
-               char cstring[len];  wchar_t wstring[len];  --len;
-               get_clipboard()->from_clipboard(cstring, len, clipboard_num);
+               char cstring[len];  wchar_t wstring[len];
+               get_clipboard()->from_clipboard(cstring, len, clipboard_num);  --len;
 //printf("BC_TextBox::paste_selection %d '%*.*s'\n",len,len,len,cstring);
-               BC_Resources::encode(BC_Resources::encoding, BC_Resources::wide_encoding,
-                       cstring,(len+1), (char *)wstring,(len+1)*sizeof(wchar_t));
+               len = BC_Resources::encode(BC_Resources::encoding, BC_Resources::wide_encoding,
+                       cstring,len, (char *)wstring,(len+1)*sizeof(wchar_t)) / sizeof(wchar_t);
                insert_text(wstring, len);
        }
 }