Faculty of Information Technology
Software Engineering Group

Opened 3 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:

  1. 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.
  2. 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:

  1. 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.
  2. When window is activated, manually restack windows as desired using BeginDeferWindowPos(), DeferWindowPos() and EndDeferWindowPos(). See example.

Any taker? :-)

Change History (0)

Note: See TracTickets for help on using tickets.