Public bug reported: Binary package hint: compiz
When an application makes an X11 QueryTree call on a window created using X11 call CreateWindow and mapped using the X11 call MapWindow, under the compiz window manager, it's parent turns out to be the root window. For example: ............REQUEST: QueryTree window: WIN 04e0002b ..............REPLY: QueryTree root: WIN 0000013b parent: WIN 0000013b children: (1) Under metacity, kwin, twm, mwm, fvwm and other window managers, the parent of the created/mapped window is some dummy window and the dummy's parent is the root. For example: ............REQUEST: QueryTree window: WIN 0440002b <- the window I created ..............REPLY: QueryTree root: WIN 0000013b parent: WIN 05000112 children: (1) ............REQUEST: QueryTree window: WIN 05000112 <- the dummy window ..............REPLY: QueryTree root: WIN 0000013b parent: WIN 0000013b children: (1) Some (old) X applications rely on the behavior given in metacity et al. They expect to have to QueryTree two levels up to get to the root window. However, under compiz, querying 2 levels up brings you to "parent: None" or "0". An application wanting to know the size of the root window might execute GetGeometry on window id "0" which throws an X "ERROR: Drawable" and closes the application. I am running compiz-fusion under gnome in Hardy, and have confirmed this behavior using compiz/emerald under Gutsy. In Hardy: compiz-core: Version: 1:0.7.2-0ubuntu2 nvidia-glx-new: Version: 169.12+2.6.24.11-12.31 architecture: 2.6.24-12-generic #1 SMP Wed Mar 12 22:31:43 UTC 2008 x86_64 GNU/Linux It has also been confirmed on Feisty. This bug also exists in the "Native" window manager used by Cygwin/X. It does not exist in every old-school window manager I've tried. Using the program "xmon" I have captured the X request/response from a certain X client (HP/Agilent/Verigy SmarTest, using an ancient HP graphics toolkit). Under metacity which works correctly, it looks like: ------ xmon output from program under metacity --------- ............REQUEST: QueryTree window: WIN 0440002b ..............REPLY: QueryTree root: WIN 0000013b parent: WIN 05000112 <-- **** Dummy window **** children: (1) ............REQUEST: QueryTree window: WIN 05000112 ..............REPLY: QueryTree root: WIN 0000013b parent: WIN 0000013b <---- **** This is correct behavior **** children: (1) ............REQUEST: GetGeometry drawable: DWB 0000013b ..............REPLY: GetGeometry depth: 18 root: WIN 0000013b x: 0 y: 0 width: 0cd0 height: 04b0 border-width: 0000 ----------------------------------------- Under compiz which is broken, it looks like: ------ xmon output from program under Compiz --------- ............REQUEST: MapWindow window: WIN 04e0002b ............REQUEST: QueryTree window: WIN 04e0002b ..............REPLY: QueryTree root: WIN 0000013b parent: WIN 0000013b <--- old program thinks this is dummy window but it's the root children: (1) ............REQUEST: QueryTree window: WIN 0000013b ..............REPLY: QueryTree root: WIN 0000013b parent: None <--- ****This is the problem right here**** children: (170) ............REQUEST: GetGeometry drawable: DWB 00000000 <----- "None" gets passed into another request ..............ERROR: Drawable <---- and the program dies. --------------------------------------------------------------------- My theory is that the old-school window managers need to create the dummy window in between the application and the root in order to draw their window decorations. compiz draws window decorations using GLX magic and bypassing X altogether. The Cygwin/X native window manager uses Windows for decoration and so also bypasses this layer. Just creating everything under the root window makes sense in these cases but it creates an incompatibility with old tried-and-true programs which are, closed-source, badly maintained and designed to run under CDE on old HPUX or Solaris. I think it's important to retain backwards compatibility with these programs since one of the goals of X-windows is to enable heterogeneous computing environments where you can run an instrument interface on a 10 -year-old SGI system on the same desktop as the latest beta of firefox. ** Affects: compiz (Ubuntu) Importance: Undecided Status: New -- QueryTree returns parent: None under compiz window manager https://bugs.launchpad.net/bugs/203929 You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs