diff --git a/src/servers/app/Window.cpp b/src/servers/app/Window.cpp index 3d43bf34d8..d4b003700d 100644 --- a/src/servers/app/Window.cpp +++ b/src/servers/app/Window.cpp @@ -587,14 +587,24 @@ Window::ReloadDecor() if (stack == NULL) return false; + // only reload the window at the first position + if (stack->WindowAt(0) != this) + return true; + if (fLook != B_NO_BORDER_WINDOW_LOOK) { // we need a new decorator decorator = gDecorManager.AllocateDecorator(this); if (decorator == NULL) return false; - int32 index = PositionInStack(); - if (IsFocus()) - decorator->SetFocus(index, true); + + // add all tabs to the decorator + for (int32 i = 1; i < stack->CountWindows(); i++) { + Window* window = stack->WindowAt(i); + BRegion dirty; + DesktopSettings settings(fDesktop); + decorator->AddTab(settings, window->Title(), window->Look(), + window->Flags(), -1, &dirty); + } } windowBehaviour = gDecorManager.AllocateWindowBehaviour(this); @@ -608,6 +618,15 @@ Window::ReloadDecor() delete fWindowBehaviour; fWindowBehaviour = windowBehaviour; + // set the correct focus and top layer tab + for (int32 i = 0; i < stack->CountWindows(); i++) { + Window* window = stack->WindowAt(i); + if (window->IsFocus()) + decorator->SetFocus(i, true); + if (window == stack->TopLayerWindow()) + decorator->SetTopTap(i); + } + return true; } diff --git a/src/servers/app/decorator/DecorManager.h b/src/servers/app/decorator/DecorManager.h index ab67a2e319..5240b01bce 100644 --- a/src/servers/app/decorator/DecorManager.h +++ b/src/servers/app/decorator/DecorManager.h @@ -5,6 +5,7 @@ * Author: * DarkWyrm * Clemens Zeidler + * Joseph Groover */ #ifndef DECOR_MANAGER_H #define DECOR_MANAGER_H