[haiku-commits] Re: r38473 - haiku/trunk/src/servers/app

  • From: "Axel Dörfler" <axeld@xxxxxxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 31 Aug 2010 09:16:37 +0200

clemens.zeidler@xxxxxxxxxxxxxx wrote:
> Fix SendWindowBehind. It now sets the window layer position behind 
> the
> specified window. If behindOf is NULL it is send to the bottom. 

I actually don't think it was - all that SendWindowBehind() does if 
behindOf is set, is to make sure it's behind that window, ie. not in 
front of it. It does not mean it should be directly behind that window. 
That's also something the app_server couldn't guarantee by any means, 
anyway (see below).

> @@ -1047,19 +1047,21 @@
>       // might be dirty after the window is send to back
>       BRegion dirty(window->VisibleRegion());
> -     // detach window and re-attach at desired position
> -     Window* backmost = window->Backmost(behindOf);
> -
>       CurrentWindows().RemoveWindow(window);
> -     CurrentWindows().AddWindow(window, backmost
> -             ? backmost->NextWindow(fCurrentWorkspace) : BackWindow());
> +     CurrentWindows().AddWindow(window, behindOf
> +             ? behindOf : BackWindow());

This breaks a lot of concepts in the app_server; you can't just let the 
user decide where the window should appear - you have to make sure 
certain constraints are met with respect to subset windows. That's what 
Window::Backmost() takes care of. You must not remove that. 
Furthermore, the existence of "behindOf" does not mean that the window 
actually roses even after your changes - in this case, you would now 
repaint much more than needed.
IOW please revert again.


Other related posts: