X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcwindowbase.C;h=cee19e7adaf812f51cce88886196d7d79a3f94d7;hb=9f682a609a1817808682efa68cb96a296815bf80;hp=f851f384de0b916e6bb25faa297e7cb8fd5fe169;hpb=4784a8d70bc39f9b7e467f93304d2df3f23fd2df;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bcwindowbase.C b/cinelerra-5.1/guicast/bcwindowbase.C index f851f384..cee19e7a 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.C +++ b/cinelerra-5.1/guicast/bcwindowbase.C @@ -181,9 +181,10 @@ BC_WindowBase::~BC_WindowBase() for( int i=sizeof(xfont)/sizeof(xfont[0]); --i>=0; ) XFreeFont(display, this->*xfont[i]); -// bug in X causes XRenderExtensionInfo to be damaged if this is done here -// left to be done in XCloseDisplay by Xlib. -#if defined(HAVE_XFT) && 0 +// past bug in X caused XRenderExtensionInfo to be damaged +// if this is done here. left to be done in XCloseDisplay by Xlib. +// works in more modern systems, and needed for leak testing. +#if defined(HAVE_XFT) && defined(VALGRIND) static void *BC_WindowBase::*xft_font[] = { &BC_WindowBase::smallfont_xft, &BC_WindowBase::mediumfont_xft, @@ -546,7 +547,7 @@ int BC_WindowBase::create_window(BC_WindowBase *parent_window, get_atoms(); #ifndef SINGLE_THREAD - clipboard = new BC_Clipboard(display_name); + clipboard = new BC_Clipboard(this); clipboard->start_clipboard(); #endif @@ -683,6 +684,15 @@ Display* BC_WindowBase::init_display(const char *display_name) } } } + + static int xsynch = -1; + if( xsynch < 0 ) { + const char *cp = getenv("CIN_XSYNCH"); + xsynch = !cp ? 0 : atoi(cp); + } + if( xsynch > 0 ) + XSynchronize(display, True); + return display; } @@ -1338,6 +1348,7 @@ locking_message = event->xclient.message_type; cursor_y = event->xcrossing.y; dispatch_cursor_enter(); break; + default: break; } @@ -3686,6 +3697,38 @@ BC_Clipboard* BC_WindowBase::get_clipboard() #endif } +Atom BC_WindowBase::to_clipboard(const char *data, long len, int clipboard_num) +{ + return get_clipboard()->to_clipboard(this, data, len, clipboard_num); +} + +long BC_WindowBase::from_clipboard(char *data, long maxlen, int clipboard_num) +{ + return get_clipboard()->from_clipboard(data, maxlen, clipboard_num); +} + +long BC_WindowBase::clipboard_len(int clipboard_num) +{ + return get_clipboard()->clipboard_len(clipboard_num); +} + +int BC_WindowBase::do_selection_clear(Window win) +{ + top_level->event_win = win; + return dispatch_selection_clear(); +} + +int BC_WindowBase::dispatch_selection_clear() +{ + int result = 0; + for( int i=0; itotal && !result; ++i ) + result = subwindows->values[i]->dispatch_selection_clear(); + if( !result ) + result = selection_clear_event(); + return result; +} + + void BC_WindowBase::get_relative_cursor_xy(int &x, int &y, int lock_window) { int abs_x, abs_y, win_x, win_y;