diff --git a/src/kits/interface/MenuWindow.cpp b/src/kits/interface/MenuWindow.cpp index 6011d63439..19834a9d85 100644 --- a/src/kits/interface/MenuWindow.cpp +++ b/src/kits/interface/MenuWindow.cpp @@ -1,58 +1,39 @@ -//------------------------------------------------------------------------------ -// Copyright (c) 2001-2005, Haiku, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -// -// File Name: MenuWindow.cpp -// Authors: Marc Flerackers (mflerackers@androme.be) -// Stefano Ceccherini (burton666@libero.it) -// Description: BMenuWindow is a custom BWindow for BMenus. -//------------------------------------------------------------------------------ +/* + * Copyright 2001-2006, Haiku, Inc. + * Distributed under the terms of the MIT License. + * + * Authors: + * Marc Flerackers (mflerackers@androme.be) + * Stefano Ceccherini (burton666@libero.it) + */ + +//! BMenuWindow is a custom BWindow for BMenus. + // TODO: Add scrollers #include #include -// TODO: taken from Deskbar's WindowMenu.cpp. -// this should go to some private header. -const window_feel kMenuWindowFeel = (window_feel)1025; +#include + // This draws the frame around the BMenu class BMenuFrame : public BView { -public: - BMenuFrame(BMenu *menu) ; - - virtual void AttachedToWindow(); - virtual void Draw(BRect updateRect); + public: + BMenuFrame(BMenu *menu); -private: - BMenu *fMenu; + virtual void AttachedToWindow(); + virtual void Draw(BRect updateRect); + + private: + BMenu *fMenu; }; BMenuWindow::BMenuWindow(const char *name, BMenu *menu) - : // The window will be resized by BMenu, so just pass a dummy rect - //BWindow(BRect(0, 0, 0, 0), name, B_BORDERED_WINDOW_LOOK, kMenuWindowFeel, - // B_NOT_ZOOMABLE), - BWindow(BRect(0, 0, 0, 0), name, B_BORDERED_WINDOW_LOOK, B_FLOATING_ALL_WINDOW_FEEL, - B_NOT_ZOOMABLE|B_AVOID_FRONT|B_AVOID_FOCUS), + : BWindow(BRect(0, 0, 0, 0), name, B_BORDERED_WINDOW_LOOK, kMenuWindowFeel, + B_NOT_ZOOMABLE | B_AVOID_FOCUS), fUpperScroller(NULL), fLowerScroller(NULL) { @@ -75,10 +56,11 @@ BMenuWindow::SetMenu(BMenu *menu) } -// BMenuFrame +// #pragma mark - + + BMenuFrame::BMenuFrame(BMenu *menu) - : - BView(BRect(0, 0, 1, 1), "menu frame", B_FOLLOW_ALL_SIDES, B_WILL_DRAW), + : BView(BRect(0, 0, 1, 1), "menu frame", B_FOLLOW_ALL_SIDES, B_WILL_DRAW), fMenu(menu) { } @@ -107,8 +89,9 @@ BMenuFrame::Draw(BRect updateRect) SetHighColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR), B_DARKEN_2_TINT)); BRect bounds(Bounds()); + StrokeLine(BPoint(bounds.right, bounds.top), - BPoint(bounds.right, bounds.bottom - 1)); + BPoint(bounds.right, bounds.bottom - 1)); StrokeLine(BPoint(bounds.left + 1, bounds.bottom), - BPoint(bounds.right, bounds.bottom)); + BPoint(bounds.right, bounds.bottom)); } diff --git a/src/servers/app/WindowLayer.cpp b/src/servers/app/WindowLayer.cpp index 2c9750d308..f300ff05c7 100644 --- a/src/servers/app/WindowLayer.cpp +++ b/src/servers/app/WindowLayer.cpp @@ -1275,7 +1275,9 @@ WindowLayer::InWorkspace(int32 index) const bool WindowLayer::SupportsFront() { - if (fFeel == kDesktopWindowFeel) + if (fFeel == kDesktopWindowFeel + || fFeel == kMenuWindowFeel + || (fFlags & B_AVOID_FRONT) != 0) return false; return true;