From a258295481ea4d9c12115dfe0d42f58aa72b5aa1 Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 29 Jul 2016 12:19:16 +0100 Subject: [PATCH] Don't repeatedly set the wantsFocus flag if it hasn't changed --- .../juce_gui_basics/widgets/juce_ComboBox.cpp | 16 +++++++++++++--- modules/juce_gui_basics/widgets/juce_ComboBox.h | 8 ++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/modules/juce_gui_basics/widgets/juce_ComboBox.cpp b/modules/juce_gui_basics/widgets/juce_ComboBox.cpp index 68e1c23890..85e67108b3 100644 --- a/modules/juce_gui_basics/widgets/juce_ComboBox.cpp +++ b/modules/juce_gui_basics/widgets/juce_ComboBox.cpp @@ -46,7 +46,8 @@ ComboBox::ComboBox (const String& name) menuActive (false), scrollWheelEnabled (false), mouseWheelAccumulator (0), - noChoicesMessage (TRANS("(no choices)")) + noChoicesMessage (TRANS("(no choices)")), + labelEditableState (editableUnknown) { setRepaintsOnMouseActivity (true); lookAndFeelChanged(); @@ -66,7 +67,9 @@ void ComboBox::setEditableText (const bool isEditable) if (label->isEditableOnSingleClick() != isEditable || label->isEditableOnDoubleClick() != isEditable) { label->setEditable (isEditable, isEditable, false); - setWantsKeyboardFocus (! isEditable); + labelEditableState = (isEditable ? labelIsEditable : labelIsNotEditable); + + setWantsKeyboardFocus (labelEditableState == labelIsNotEditable); resized(); } } @@ -437,7 +440,14 @@ void ComboBox::lookAndFeelChanged() } addAndMakeVisible (label); - setWantsKeyboardFocus (! label->isEditable()); + + EditableState newEditableState = (label->isEditable() ? labelIsEditable : labelIsNotEditable); + + if (newEditableState != labelEditableState) + { + labelEditableState = newEditableState; + setWantsKeyboardFocus (labelEditableState == labelIsNotEditable); + } label->addListener (this); label->addMouseListener (this, false); diff --git a/modules/juce_gui_basics/widgets/juce_ComboBox.h b/modules/juce_gui_basics/widgets/juce_ComboBox.h index 515e5d2e5f..1e876cbac2 100644 --- a/modules/juce_gui_basics/widgets/juce_ComboBox.h +++ b/modules/juce_gui_basics/widgets/juce_ComboBox.h @@ -427,6 +427,13 @@ private: bool isEnabled : 1, isHeading : 1; }; + enum EditableState + { + editableUnknown, + labelIsNotEditable, + labelIsEditable + }; + OwnedArray items; Value currentId; int lastCurrentId; @@ -435,6 +442,7 @@ private: ListenerList listeners; ScopedPointer