X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcdisplayinfo.C;h=5bbe991ce925492b454fbc2fc58c0d59e9ac34ef;hb=b55798fc64eee00c6fab3b4763e791befb7275f9;hp=a7c01e2ca71775b765646464f16150190ffc264e;hpb=21c2e6b36d6a96c2f662a89459d607b5a387f4eb;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bcdisplayinfo.C b/cinelerra-5.1/guicast/bcdisplayinfo.C index a7c01e2c..5bbe991c 100644 --- a/cinelerra-5.1/guicast/bcdisplayinfo.C +++ b/cinelerra-5.1/guicast/bcdisplayinfo.C @@ -64,19 +64,21 @@ void BC_DisplayInfo::parse_geometry(char *geom, int *x, int *y, int *width, int static void get_top_coords(Display *display, Window win, int &px,int &py, int &tx,int &ty) { - Window *pcwin; unsigned int ncwin; + Window *pcwin = 0; unsigned int ncwin = 0; Window cwin = 0, pwin = 0, root = 0; - int nx=0, ny=0; XQueryTree(display, win, &root, &pwin, &pcwin, &ncwin); if( pcwin ) XFree(pcwin); XTranslateCoordinates(display, pwin, root, 0,0, &px,&py, &cwin); //printf(" win=%lx, px/py=%d/%d\n", win, px,py); + int nx = px, ny = py; pwin = win; for( int i=5; --i>=0; ) { - win = pwin; - XQueryTree(display, win, &root, &pwin, &pcwin, &ncwin); + win = pwin; pwin = 0; pcwin = 0; ncwin = 0; + Window rwin = 0; +// XQuerytTree has been known to fail here + XQueryTree(display, win, &rwin, &pwin, &pcwin, &ncwin); if( pcwin ) XFree(pcwin); - if( pwin == root ) break; + if( !rwin || rwin != root || pwin == root ) break; XTranslateCoordinates(display, pwin, root, 0,0, &nx,&ny, &cwin); //printf(" win=%lx, nx/ny=%d/%d\n", win, nx,ny); }