caughey@ale.UVic.CA (Dave Caughey) (06/12/91)
I have developed a number of X applications which spawn other processes. I would like to be able to control those spawned-processes' windows from my applications. For example, by clicking on a button, I spawn an xterm. On subsequent clicks, I would like to bring it to the front by calling XRaiseWindow, or close it with XIconifyWindow. Now, I presume that (one way) I can get the window ID of an autonomous window is to have my application cal XGrabPointer, and then clicking on the target window. It seems that I could then call XIconifyWindow and thus close it. The routine returns a code indicating success in sending the message, but nothing happens. Now, O'Reilly states that "window managers may elect to receive this message" (Vol 2, page 284). So I have a couple questions: 1) Does OLWM recognize such requests? If so, what am I doing wrong? If not, can it be made to? 2) Does TWM? 3) Am I way off-base in my approach to this problem? The development environment is as follows: OpenWindows 2.0, OLWM, SparcStation, and (sigh) DevGuide Thanks much, Dave ___________________________________________________________________________ Dave Caughey Dept. of Elec. & Comp. Engineering caughey@sirius.uvic.ca P.O. Box 3055 University of Victoria "10 million lemmings can't be wrong" Victoria, B.C., CANADA V8W 3P6
Stuart.Marks@Eng.Sun.COM (Stuart Marks) (06/15/91)
Now, I presume that (one way) I can get the window ID of an autonomous window is to have my application cal XGrabPointer, and then clicking on the target window. It seems that I could then call XIconifyWindow and thus close it. The routine returns a code indicating success in sending the message, but nothing happens. The problem is that the window has been reparented. I assume that you're looking at the subwindow field of the button click event. This window will be the window manager's frame window, not the client's top-level window. In order for XIconifyWindow() to work, it must be called with the client's top-level window, not the window manager's window. A simple way to find the client's top-level window given the window manager frame is to call XmuClientWindow(dpy, frame); it will return the ID of the client's top-level window. To use it, include <X11/Xmu/Xmu.h> in your program and link with -lXmu. Unfortunately, we don't ship the Xmu library with OpenWindows 2, though perhaps we should have. You'll have to get it from the MIT distribution. s'marks Stuart W. Marks ARPA: smarks@eng.sun.com Windows & Graphics Software UUCP: sun!smarks Sun Microsystems, Inc.