olaf neophyte and de.po updates, valgrind tweaks, delete green lady, inkscape dpi=96
[goodguy/history.git] / cinelerra-5.1 / guicast / bcdisplayinfo.C
index a7c01e2ca71775b765646464f16150190ffc264e..5bbe991ce925492b454fbc2fc58c0d59e9ac34ef 100644 (file)
@@ -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);
        }