diff --git a/src/kits/interface/Control.cpp b/src/kits/interface/Control.cpp index d42f88ddd9..431e0444b9 100644 --- a/src/kits/interface/Control.cpp +++ b/src/kits/interface/Control.cpp @@ -344,10 +344,13 @@ BControl::SetEnabled(bool enabled) fEnabled = enabled; - if (fEnabled) - BView::SetFlags(Flags() | B_NAVIGABLE); - else - BView::SetFlags(Flags() & ~B_NAVIGABLE); + if (fEnabled && fWantsNav) + SetFlags(Flags() | B_NAVIGABLE); + else if (!fEnabled && (Flags() & B_NAVIGABLE)) { + fWantsNav = true; + SetFlags(Flags() & ~B_NAVIGABLE); + } else + fWantsNav = false; if (Window()) { Invalidate(Bounds()); @@ -552,7 +555,7 @@ BControl::InitData(BMessage *data) fEnabled = true; fFocusChanging = false; fTracking = false; - fWantsNav = true; + fWantsNav = Flags() & B_NAVIGABLE; if (data && data->HasString("_fname")) SetFont(be_plain_font, B_FONT_FAMILY_AND_STYLE); diff --git a/src/kits/interface/TextControl.cpp b/src/kits/interface/TextControl.cpp index 8cadbf5613..82d869e79c 100644 --- a/src/kits/interface/TextControl.cpp +++ b/src/kits/interface/TextControl.cpp @@ -11,8 +11,6 @@ /*! BTextControl displays text that can act like a control. */ -#include - #include #include #include @@ -27,6 +25,7 @@ //#define TRACE_TEXT_CONTROL #ifdef TRACE_TEXT_CONTROL +# include # include static int32 sFunctionDepth = -1; # define CALLED(x...) FunctionTracer _ft("BTextControl", __FUNCTION__, \ @@ -512,10 +511,7 @@ BTextControl::SetFlags(uint32 flags) if (flags & B_NAVIGABLE) fText->SetFlags(fText->Flags() | B_NAVIGABLE); } - - // Don't make this one navigable - flags &= ~B_NAVIGABLE; - + BView::SetFlags(flags); } @@ -929,8 +925,6 @@ BTextControl::_InitData(const char* label, const char* initialText, fDivider = floorf(bounds.Width() / 2.0f); uint32 navigableFlags = Flags() & B_NAVIGABLE; - if (navigableFlags != 0) - BView::SetFlags(Flags() & ~B_NAVIGABLE); if (archive) fText = static_cast(FindView("_input_"));