Here's a pretty deep question for LispView hackers:
I want to programmatically raise a window to the 'top' layer on my screen. In Open Windows, this is accomplished by pressing the 'Front' key (on Sun type 4 keyboard) while the mouse is over the window. LispView provides a foreign function named xview:wmgr-top (in the xview package) that *almost* does what I want.
This function takes a 'Frame' argument, which is really a 'foreign synonym type' that stands for a 32-bit signed integer. So, given a top-level-window WIN the following form is a correct way to call xview:wmgr-top:
(xview:wmgr-top (lv::xview-object-id (lv:device WIN)))
The problem is nothing happens to WIN until I either (interactively) move the mouse into the window or (programmatically) setf lv:mapped to T for the window (redundant, since WIN was already mapped). Then the window moves to the top. I'm guessing that I need to generate some sort of event that forces the window manager to 'touch' the window before it can be raised to the top. My question is Why?, and is
(setf (lv:mapped WIN) t) the best way to do it?
P.S. Anybody know about lv:stacking-order-notification-event and how to support it?
..................................................
Len Charest, Jr.
JPL Artificial Intelligence Group
·······@aig.jpl.nasa.gov
In article <·····················@jpl-devvax.jpl.nasa.gov> ·······@aig.jpl.nasa.gov writes:
>Here's a pretty deep question for LispView hackers:
>I want to programmatically raise a window to the 'top' layer on my
>screen. In Open Windows, this is accomplished by pressing the 'Front'
>key (on Sun type 4 keyboard) while the mouse is over the window.
>LispView provides a foreign function named xview:wmgr
>-top (in the xview package) that *almost* does what I want.
>
[...]
Try: (expose <window>). Its documented on P. 51 of the lispview manual
included in the distrubution.
-Philip
In article <·····················@CSD-NewsHost.Stanford.EDU>, ·······@Xenon.Stanford.EDU (Philip McBride) writes:
|> In article <·····················@jpl-devvax.jpl.nasa.gov> ·······@aig.jpl.nasa.gov writes:
|> >I want to programmatically raise a window to the 'top' layer on my
|> >screen.
|>
|> Try: (expose <window>). Its documented on P. 51 of the lispview manual
Yes, LV:EXPOSE will bring a window to the front of the screen, but only if the window's parent is NIL. One important detail that I unintentionally left out of my post is that the windows I want to "front" are actually children of the main application window. Also, these children are not contained within the bounding region of their parent (see the LispView Manual 'stacking order' example in sec. 6.2). With this child/parent relationship, LV:EXPOSE *erases* the child window! Technically the child is still m
apped (ie, LV:MAPPED returns T) but it has vanished from the display. Perhaps this is a 'feature' of LV:EXPOSE, but its also why I turned to XVIEW:WMGR-TOP, etc.
..................................................
Len Charest, Jr.
JPL Artificial Intelligence Group
·······@aig.jpl.nasa.gov