From 6d404236e277c2a4251b1eb66a3a2e812003ca9a Mon Sep 17 00:00:00 2001 From: reuk Date: Mon, 14 Feb 2022 13:34:11 +0000 Subject: [PATCH] Toolbar: Fix missing-items button when LookAndFeel changes after construction of toolbar Previously, setting a new look and feel would create a new missing-items button, but would not add it to the toolbar or set the onClick callback. --- modules/juce_gui_basics/widgets/juce_Toolbar.cpp | 16 ++++++++++++---- modules/juce_gui_basics/widgets/juce_Toolbar.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/juce_gui_basics/widgets/juce_Toolbar.cpp b/modules/juce_gui_basics/widgets/juce_Toolbar.cpp index 97cf5034d7..862f014e26 100644 --- a/modules/juce_gui_basics/widgets/juce_Toolbar.cpp +++ b/modules/juce_gui_basics/widgets/juce_Toolbar.cpp @@ -243,10 +243,7 @@ private: Toolbar::Toolbar() { lookAndFeelChanged(); - addChildComponent (missingItemsButton.get()); - - missingItemsButton->setAlwaysOnTop (true); - missingItemsButton->onClick = [this] { showMissingItems(); }; + initMissingItemButton(); } Toolbar::~Toolbar() @@ -534,6 +531,16 @@ void Toolbar::updateAllItemPositions (bool animate) } //============================================================================== +void Toolbar::initMissingItemButton() +{ + if (missingItemsButton == nullptr) + return; + + addChildComponent (*missingItemsButton); + missingItemsButton->setAlwaysOnTop (true); + missingItemsButton->onClick = [this] { showMissingItems(); }; +} + void Toolbar::showMissingItems() { jassert (missingItemsButton->isShowing()); @@ -643,6 +650,7 @@ void Toolbar::itemDropped (const SourceDetails& dragSourceDetails) void Toolbar::lookAndFeelChanged() { missingItemsButton.reset (getLookAndFeel().createToolbarMissingItemsButton (*this)); + initMissingItemButton(); } void Toolbar::mouseDown (const MouseEvent&) {} diff --git a/modules/juce_gui_basics/widgets/juce_Toolbar.h b/modules/juce_gui_basics/widgets/juce_Toolbar.h index 7bb3825a5e..992f1bf452 100644 --- a/modules/juce_gui_basics/widgets/juce_Toolbar.h +++ b/modules/juce_gui_basics/widgets/juce_Toolbar.h @@ -323,6 +323,7 @@ private: class CustomisationDialog; std::unique_ptr createAccessibilityHandler() override; + void initMissingItemButton(); void showMissingItems(); void addItemInternal (ToolbarItemFactory& factory, int itemId, int insertIndex);