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:
Clemens Zeidler
2011-07-26 04:37:27 +00:00
parent 16aa61c46a
commit 7c5525e834
12 changed files with 110 additions and 6 deletions
@@ -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);
+2
View File
@@ -1724,6 +1724,8 @@ Desktop::SetWindowFeel(Window* window, window_feel newFeel)
if (window == FocusWindow() && !window->IsVisible())
SetFocusWindow();
NotifyWindowFeelChanged(window, newFeel);
UnlockAllWindows();
}
+13
View File
@@ -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)
+4
View File
@@ -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);
+2 -1
View File
@@ -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()
{