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; }