The window being ordered was first put in the correct place and then was moved to the other end of the children list by the loop that was intended to adjust the windows strictly between the window and the ancestor.
Signed-off-by: Ken Thomases ken@codeweavers.com --- dlls/winemac.drv/cocoa_window.m | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index b94b774..e37e071 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -1590,14 +1590,17 @@ - (void) orderBelow:(WineWindow*)prev orAbove:(WineWindow*)next activate:(BOOL)a [ancestor orderWindow:orderingMode relativeTo:[ancestorOfOther windowNumber]]; }
- for (child = self; - (parent = (WineWindow*)child.parentWindow); - child = parent) + if (!ancestorOfOther || ancestor != self) { - if ([parent isKindOfClass:[WineWindow class]]) - [parent order:-orderingMode childWindow:child relativeTo:nil]; - if (parent == ancestor) - break; + for (child = self; + (parent = (WineWindow*)child.parentWindow); + child = parent) + { + if ([parent isKindOfClass:[WineWindow class]]) + [parent order:-orderingMode childWindow:child relativeTo:nil]; + if (parent == ancestor) + break; + } }
[self checkWineDisplayLink];