From 5d32708515eaa89628e5f018736b40473afb546b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 1 Dec 2005 12:31:05 +0000 Subject: [PATCH] Implemented B_AVOID_FOCUS support. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15262 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/RootLayer.cpp | 9 +++++++-- src/servers/app/WindowLayer.cpp | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 7bbb5a0acd..9ec2736138 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -165,9 +165,14 @@ RootLayer::_SetFocus(WindowLayer* focus, BRegion& update) { // TODO: test for FFM and B_LOCK_WINDOW_FOCUS - if (focus == fFocus) + if (focus == fFocus && (focus->WindowFlags() & B_AVOID_FOCUS) == 0) return true; + // make sure no window is chosen that doesn't want focus + while (focus != NULL && (focus->WindowFlags() & B_AVOID_FOCUS) != 0) { + focus = (WindowLayer*)focus->PreviousLayer(); + } + if (fFocus != NULL) { update.Include(&fFocus->VisibleRegion()); fFocus->SetFocus(false); @@ -507,7 +512,7 @@ RootLayer::ShowWindowLayer(WindowLayer* windowLayer, bool toFront) // TODO: if this window has any floating windows, remove them here - // TODO: support FFM and B_AVOID_FOCUS + // TODO: support FFM if (Front() == windowLayer || Focus() == NULL) _SetFocus(windowLayer, changed); _WindowsChanged(changed); diff --git a/src/servers/app/WindowLayer.cpp b/src/servers/app/WindowLayer.cpp index a8aaa9f038..49280d7c65 100644 --- a/src/servers/app/WindowLayer.cpp +++ b/src/servers/app/WindowLayer.cpp @@ -462,7 +462,7 @@ WindowLayer::MouseDown(BMessage *msg, BPoint where, int32* _viewToken) if (desktopSettings.MouseMode() == B_NORMAL_MOUSE) desktop->ActivateWindow(this); - if ((WindowFlags() & B_WILL_ACCEPT_FIRST_CLICK) == 0) + if ((WindowFlags() & (B_WILL_ACCEPT_FIRST_CLICK | B_AVOID_FOCUS)) == 0) return; }