http://bugs.winehq.org/show_bug.cgi?id=26670
Jarek jarekczek@poczta.onet.pl changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |jarekczek@poczta.onet.pl
--- Comment #4 from Jarek jarekczek@poczta.onet.pl 2011-07-04 09:04:17 CDT --- (In reply to comment #3)
Created an attachment (id=34121)
--> (http://bugs.winehq.org/attachment.cgi?id=34121) [details]
Revert a part of 61e50e15ba45ad54655f98619f5ef33917033165
I wouldn't call the fun get_window_owner, because it is really get_window_owner_with_non_zero_size, so the name can be misleading. Maybe get_window_owner_nzs?
But generally this doesn't lead to a sure solution compatible with windows behaviour.
This bug is strictly connected with [url=http://bugs.winehq.org/show_bug.cgi?id=27190%5Dbug 27190[/url]. Delphi app with a hidden window.
I think I managed to reach the core of these problems. I attach a simple winapi (source and exe) which creates 3 windows, called 0, 1, 2. The owner of 2 is 1. All are normal overlapped windows.
On the taskbar there are constantly 2 windows: 0 and 1 (never 2!).
Pressing Alt-tab shows 2 windows: constantly 0 and 1 or 2. Which one of the 2 latter is shown depends on which was the last active. Let's consider a complicated sequence: 1. activate 1 2. activate 2 3. activate 0 4. activate another app After it alt-tab allows to switch between 0 or 2.
This behaviour is reasonable. But how does the system know which was the last active window of the owned bunch 1,2? GetTopWindow - always 0 GetPreviousWindow/GetNextWindow - 2 always previous to 1 GetActiveWindow - points to window "0", as this is an active window for this thread. (I checked they all belong to the same thread. Didn't check the active window, guessing here).
I guess native window manager keeps a variable last_active_of_a_bunch for all windows without owner. But maybe you have a better explanation. Implementing such a variable (updateable at set_active_window) would solve the problem. Plus ability to control window manager and make it show different windows on taskbar and different on alt-tab panel.
My example points that zero size of a window has nothing to do with the problem.