X-Git-Url: https://cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcwindowbase.C;h=9a730f9541b9697b1b0b4266da3859f77e04ff36;hb=caf23b6b8e0024c33390ddaa165e11956e66f1c2;hp=a12d71f66fa61ee900eaceb936753b41c2f11c4b;hpb=32a609a6bd1181993569399ab51f314dc7cb4fba;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/guicast/bcwindowbase.C b/cinelerra-5.1/guicast/bcwindowbase.C index a12d71f6..9a730f95 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.C +++ b/cinelerra-5.1/guicast/bcwindowbase.C @@ -4214,6 +4214,8 @@ void BC_WindowBase::set_force_tooltip(int v) int BC_WindowBase::raise_window(int do_flush) { + if( hidden ) return 1; + if( wait_viewable(500) ) return 1; XRaiseWindow(top_level->display, win); if(do_flush) XFlush(top_level->display); return 0; @@ -4630,3 +4632,15 @@ void BC_WindowBase::focus() XSetInputFocus(top_level->display, top_level->win, RevertToParent, CurrentTime); } +int BC_WindowBase::wait_viewable(int ms) +{ + Timer timer; + XWindowAttributes xwa; + do { + XGetWindowAttributes(top_level->display, top_level->win, &xwa); + if( xwa.map_state == IsViewable ) return 0; + usleep(10000); + } while( timer.get_difference() < ms ); + return 1; +} +