From 408c0ee4cdd7cbe9935aae9af2c5e3ca110a89a6 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Tue, 20 Aug 2013 18:15:13 -0400 Subject: [PATCH] MenuField: enable/disable the menu field when... the child menu bar or the child menu bar's menu is enabled/disabled. This means that there is just one status we have to check, the menu fields, and the child menus agree. This change takes practical form in the Backgrounds preflet which disables the placement menu when the image is set to "None", but, only the menu got disabled and not the parent menu field so the label was erroneously still drawn as enabled. --- headers/private/interface/BMCPrivate.h | 1 + src/kits/interface/BMCPrivate.cpp | 9 +++++++++ src/kits/interface/Menu.cpp | 3 +++ 3 files changed, 13 insertions(+) diff --git a/headers/private/interface/BMCPrivate.h b/headers/private/interface/BMCPrivate.h index 876ad1f37c..ee6084998a 100644 --- a/headers/private/interface/BMCPrivate.h +++ b/headers/private/interface/BMCPrivate.h @@ -52,6 +52,7 @@ public: virtual void MessageReceived(BMessage* msg); virtual void MakeFocus(bool focused = true); virtual void SetMaxContentWidth(float width); + virtual void SetEnabled(bool enabled); void TogglePopUpMarker(bool show) { fShowPopUpMarker = show; } diff --git a/src/kits/interface/BMCPrivate.cpp b/src/kits/interface/BMCPrivate.cpp index e46eef58c0..5ceccecd7c 100644 --- a/src/kits/interface/BMCPrivate.cpp +++ b/src/kits/interface/BMCPrivate.cpp @@ -276,6 +276,15 @@ _BMCMenuBar_::SetMaxContentWidth(float width) } +void +_BMCMenuBar_::SetEnabled(bool enabled) +{ + fMenuField->SetEnabled(enabled); + + BMenuBar::SetEnabled(enabled); +} + + BSize _BMCMenuBar_::MinSize() { diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp index 565a77e954..3bfbf98f73 100644 --- a/src/kits/interface/Menu.cpp +++ b/src/kits/interface/Menu.cpp @@ -1021,6 +1021,9 @@ BMenu::SetEnabled(bool enabled) fEnabled = enabled; + if (dynamic_cast<_BMCMenuBar_*>(Supermenu()) != NULL) + Supermenu()->SetEnabled(enabled); + if (fSuperitem) fSuperitem->SetEnabled(enabled); }