Opened 7 years ago
#91 new defect
Raise all windows of a WindowGroup when any if it's windows is activated.
Reported by: | Jan Vrany | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | default | Keywords: | |
Cc: | Also affects CVS HEAD (eXept version): | yes |
Description
When a window is activated, the other windows of the same windowgroup should be brought to the top (but below the activated window). For example, when user clicks to UI Painter window, then also a canvas window and widget galley window should be brought to the top.
See https://groups.google.com/forum/#!topic/stx-jv/XB0Wlxe-Nr4
Hints for implementation
X11
Undex X11, the desired behavior can, perhaps, be acheved by properly setting _WM_TRANSIENT_FOR
and _NET_WM_WINDOW_TYPE
properties (see ICCCM and EWMH).
If not, then we have to do it manually. This means:
- Detect that window has been activated. There is no such notion in X11. One can, in theory, listen for ConfigureNotify event which should be sent whenever a window stacking order changes - such as when a window manager raises the window.
- When window is activated, manually restack windows as desired using XRestackWindows().
Windows
Under Windows there's AFAIK no declarative way to achieve this so it has to be done manually. This means:
- Detect that window has been activated. Luckily in that case, Windows send an application WM_ACTIVATE message. In Smalltalk/X when the message arrives {{WinWorkstation?>>activate:view:}}} is sent.
- When window is activated, manually restack windows as desired using BeginDeferWindowPos(), DeferWindowPos() and EndDeferWindowPos(). See example.
Any taker? :-)