diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index c409f7b12c..df1d36464a 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -1107,13 +1107,10 @@ Desktop::_UpdateFronts(bool updateFloating) EventTarget* Desktop::KeyboardEventTarget() { - // TODO: Not yet useful, and prevents a crashing application - // which has opened menu windows to be debugged (ticket #1152) -#if 0 WindowLayer* window = _CurrentWindows().LastWindow(); if (window != NULL && window->Feel() == kMenuWindowFeel) return &window->EventTarget(); -#endif + if (FocusWindow() != NULL) return &FocusWindow()->EventTarget(); diff --git a/src/servers/app/WindowLayer.cpp b/src/servers/app/WindowLayer.cpp index dd7d097f3a..19c847401e 100644 --- a/src/servers/app/WindowLayer.cpp +++ b/src/servers/app/WindowLayer.cpp @@ -1528,13 +1528,21 @@ WindowLayer::RemoveFromSubset(WindowLayer* window) bool WindowLayer::HasInSubset(const WindowLayer* window) const { - if (window == NULL || fFeel == window->Feel() || fFeel == B_NORMAL_WINDOW_FEEL) + if (window == NULL || fFeel == window->Feel() + || fFeel == B_NORMAL_WINDOW_FEEL) + return false; + + // Menus are a special case: they will always be on-top of every window + // of their application + if (fFeel == kMenuWindowFeel) + return window->ServerWindow()->App() == ServerWindow()->App(); + else if (window->Feel() == kMenuWindowFeel) return false; // we have a few special feels that have a fixed order - const int32 feel[] = {kWindowScreenFeel, kMenuWindowFeel, - B_MODAL_ALL_WINDOW_FEEL, B_FLOATING_ALL_WINDOW_FEEL, 0}; + const int32 feel[] = {kWindowScreenFeel, B_MODAL_ALL_WINDOW_FEEL, + B_FLOATING_ALL_WINDOW_FEEL, 0}; for (int32 order = 0; feel[order]; order++) { if (fFeel == feel[order])