Only allow windows with a normal thick border to S&T. Fixes #6647.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42492 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -427,6 +427,14 @@ SATWindow::RemovedFromArea(WindowArea* area)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SATWindow::WindowLookChanged(window_look look)
|
||||
{
|
||||
for (int i = 0; i < fSATSnappingBehaviourList.CountItems(); i++)
|
||||
fSATSnappingBehaviourList.ItemAt(i)->WindowLookChanged(look);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SATWindow::FindSnappingCandidates()
|
||||
{
|
||||
|
||||
@@ -99,6 +99,7 @@ public:
|
||||
bool RemovedFromGroup(SATGroup* group,
|
||||
bool stayBelowMouse);
|
||||
void RemovedFromArea(WindowArea* area);
|
||||
void WindowLookChanged(window_look look);
|
||||
|
||||
bool StackWindow(SATWindow* child);
|
||||
|
||||
|
||||
@@ -382,10 +382,19 @@ StackAndTile::SizeLimitsChanged(Window* window, int32 minWidth, int32 maxWidth,
|
||||
void
|
||||
StackAndTile::WindowLookChanged(Window* window, window_look look)
|
||||
{
|
||||
// if the decorator has been removed remove it from the stacking group
|
||||
if (look != B_NO_BORDER_WINDOW_LOOK)
|
||||
SATWindow* satWindow = GetSATWindow(window);
|
||||
if (!satWindow)
|
||||
return;
|
||||
satWindow->WindowLookChanged(look);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
StackAndTile::WindowFeelChanged(Window* window, window_feel feel)
|
||||
{
|
||||
// check if it is still a compatible feel
|
||||
if (feel != B_NORMAL_WINDOW_FEEL)
|
||||
return;
|
||||
SATWindow* satWindow = GetSATWindow(window);
|
||||
if (!satWindow)
|
||||
return;
|
||||
|
||||
@@ -80,6 +80,8 @@ public:
|
||||
int32 minHeight, int32 maxHeight);
|
||||
virtual void WindowLookChanged(Window* window,
|
||||
window_look look);
|
||||
virtual void WindowFeelChanged(Window* window,
|
||||
window_feel feel);
|
||||
|
||||
virtual bool SetDecoratorSettings(Window* window,
|
||||
const BMessage& settings);
|
||||
@@ -166,8 +168,7 @@ public:
|
||||
/*! Update the window tab values, solve the layout and move all windows in
|
||||
the group accordantly. */
|
||||
virtual void RemovedFromArea(WindowArea* area) {}
|
||||
virtual void TabLocationMoved(float location, bool shifting)
|
||||
{}
|
||||
virtual void WindowLookChanged(window_look look) {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -239,6 +239,9 @@ SATStacking::FindSnappingCandidates(SATGroup* group)
|
||||
Window* win = satWindow->GetWindow();
|
||||
if (win == window || !win->Decorator())
|
||||
continue;
|
||||
if (_IsStackableWindow(win) == false
|
||||
|| _IsStackableWindow(window) == false)
|
||||
continue;
|
||||
Decorator::Tab* tab = win->Decorator()->TabAt(win->PositionInStack());
|
||||
if (tab == NULL)
|
||||
continue;
|
||||
@@ -276,6 +279,32 @@ SATStacking::RemovedFromArea(WindowArea* area)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SATStacking::WindowLookChanged(window_look look)
|
||||
{
|
||||
Window* window = fSATWindow->GetWindow();
|
||||
WindowStack* stack = window->GetWindowStack();
|
||||
if (stack == NULL)
|
||||
return;
|
||||
SATGroup* group = fSATWindow->GetGroup();
|
||||
if (group == NULL)
|
||||
return;
|
||||
if (stack->CountWindows() > 1 && _IsStackableWindow(window) == false)
|
||||
group->RemoveWindow(fSATWindow);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
SATStacking::_IsStackableWindow(Window* window)
|
||||
{
|
||||
if (window->Look() == B_DOCUMENT_WINDOW_LOOK)
|
||||
return true;
|
||||
if (window->Look() == B_TITLED_WINDOW_LOOK)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SATStacking::_ClearSearchResult()
|
||||
{
|
||||
|
||||
@@ -34,8 +34,9 @@ public:
|
||||
void DoWindowLayout();
|
||||
|
||||
void RemovedFromArea(WindowArea* area);
|
||||
|
||||
void WindowLookChanged(window_look look);
|
||||
private:
|
||||
bool _IsStackableWindow(Window* window);
|
||||
void _ClearSearchResult();
|
||||
void _HighlightWindows(bool highlight = true);
|
||||
|
||||
|
||||
@@ -46,6 +46,10 @@ SATTiling::FindSnappingCandidates(SATGroup* group)
|
||||
{
|
||||
_ResetSearchResults();
|
||||
|
||||
if (_IsTileableWindow(fSATWindow->GetWindow()) == false
|
||||
|| (group->CountItems() == 1
|
||||
&& _IsTileableWindow(group->WindowAt(0)->GetWindow()) == false))
|
||||
return false;
|
||||
if (fSATWindow->GetGroup() == group)
|
||||
return false;
|
||||
|
||||
@@ -78,6 +82,34 @@ SATTiling::JoinCandidates()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SATTiling::WindowLookChanged(window_look look)
|
||||
{
|
||||
SATGroup* group = fSATWindow->GetGroup();
|
||||
if (group == NULL)
|
||||
return;
|
||||
if (_IsTileableWindow(fSATWindow->GetWindow()) == false)
|
||||
group->RemoveWindow(fSATWindow);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
SATTiling::_IsTileableWindow(Window* window)
|
||||
{
|
||||
if (window->Look() == B_DOCUMENT_WINDOW_LOOK)
|
||||
return true;
|
||||
if (window->Look() == B_TITLED_WINDOW_LOOK)
|
||||
return true;
|
||||
if (window->Look() == B_FLOATING_WINDOW_LOOK)
|
||||
return true;
|
||||
if (window->Look() == B_MODAL_WINDOW_LOOK)
|
||||
return true;
|
||||
if (window->Look() == B_BORDERED_WINDOW_LOOK)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
SATTiling::_FindFreeAreaInGroup(SATGroup* group)
|
||||
{
|
||||
|
||||
@@ -25,7 +25,10 @@ public:
|
||||
bool FindSnappingCandidates(SATGroup* group);
|
||||
bool JoinCandidates();
|
||||
|
||||
void WindowLookChanged(window_look look);
|
||||
private:
|
||||
bool _IsTileableWindow(Window* window);
|
||||
|
||||
bool _FindFreeAreaInGroup(SATGroup* group);
|
||||
bool _FindFreeAreaInGroup(SATGroup* group,
|
||||
Corner::position_t corner);
|
||||
|
||||
@@ -1724,6 +1724,8 @@ Desktop::SetWindowFeel(Window* window, window_feel newFeel)
|
||||
if (window == FocusWindow() && !window->IsVisible())
|
||||
SetFocusWindow();
|
||||
|
||||
NotifyWindowFeelChanged(window, newFeel);
|
||||
|
||||
UnlockAllWindows();
|
||||
}
|
||||
|
||||
|
||||
@@ -284,6 +284,19 @@ DesktopObservable::NotifyWindowLookChanged(Window* window, window_look look)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopObservable::NotifyWindowFeelChanged(Window* window, window_feel feel)
|
||||
{
|
||||
if (fWeAreInvoking)
|
||||
return;
|
||||
InvokeGuard invokeGuard(fWeAreInvoking);
|
||||
|
||||
for (DesktopListener* listener = fDesktopListenerList.First();
|
||||
listener != NULL; listener = fDesktopListenerList.GetNext(listener))
|
||||
listener->WindowFeelChanged(window, feel);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
DesktopObservable::SetDecoratorSettings(Window* window,
|
||||
const BMessage& settings)
|
||||
|
||||
@@ -65,6 +65,8 @@ public:
|
||||
int32 minHeight, int32 maxHeight) = 0;
|
||||
virtual void WindowLookChanged(Window* window,
|
||||
window_look look) = 0;
|
||||
virtual void WindowFeelChanged(Window* window,
|
||||
window_feel feel) = 0;
|
||||
|
||||
virtual bool SetDecoratorSettings(Window* window,
|
||||
const BMessage& settings) = 0;
|
||||
@@ -119,6 +121,8 @@ public:
|
||||
int32 minHeight, int32 maxHeight);
|
||||
void NotifyWindowLookChanged(Window* window,
|
||||
window_look look);
|
||||
void NotifyWindowFeelChanged(Window* window,
|
||||
window_feel feel);
|
||||
|
||||
bool SetDecoratorSettings(Window* window,
|
||||
const BMessage& settings);
|
||||
|
||||
@@ -2100,6 +2100,8 @@ Window::DetachFromWindowStack(bool ownStackNeeded)
|
||||
decorator->SetDrawingEngine(remainingTop->fDrawingEngine);
|
||||
// propagate focus to the decorator
|
||||
remainingTop->SetFocus(remainingTop->IsFocus());
|
||||
remainingTop->SetFeel(remainingTop->Feel());
|
||||
remainingTop->SetLook(remainingTop->Look(), &dirty);
|
||||
}
|
||||
|
||||
fCurrentStack = NULL;
|
||||
@@ -2185,7 +2187,6 @@ Window::GetWindowStack()
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool
|
||||
Window::MoveToTopStackLayer()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user