mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-17 00:44:19 +00:00
Projucer: Avoid use-after-free in Sidebar destructor
This commit is contained in:
parent
bfdda737a2
commit
9c016af6ee
1 changed files with 25 additions and 15 deletions
|
|
@ -32,7 +32,7 @@ NewFileWizard::Type* createGUIComponentWizard();
|
|||
|
||||
//==============================================================================
|
||||
ProjectContentComponent::ProjectContentComponent()
|
||||
: sidebar (new Sidebar (project))
|
||||
: sidebar (std::make_unique<Sidebar> (project))
|
||||
{
|
||||
setOpaque (true);
|
||||
setWantsKeyboardFocus (true);
|
||||
|
|
@ -76,10 +76,10 @@ void ProjectContentComponent::resized()
|
|||
|
||||
r.removeFromTop (10);
|
||||
|
||||
auto sidebarArea = r.removeFromLeft (sidebar->getWidth() != 0 ? sidebar->getWidth()
|
||||
: r.getWidth() / 4);
|
||||
auto sidebarArea = r.removeFromLeft (sidebar != nullptr && sidebar->getWidth() != 0 ? sidebar->getWidth()
|
||||
: r.getWidth() / 4);
|
||||
|
||||
if (sidebar->isVisible())
|
||||
if (sidebar != nullptr && sidebar->isVisible())
|
||||
sidebar->setBounds (sidebarArea);
|
||||
|
||||
if (resizerBar != nullptr)
|
||||
|
|
@ -87,7 +87,7 @@ void ProjectContentComponent::resized()
|
|||
|
||||
contentViewComponent.setBounds (r);
|
||||
|
||||
headerComponent.sidebarTabsWidthChanged (sidebar->getWidth());
|
||||
headerComponent.sidebarTabsWidthChanged (sidebarArea.getWidth());
|
||||
}
|
||||
|
||||
void ProjectContentComponent::lookAndFeelChanged()
|
||||
|
|
@ -113,6 +113,7 @@ void ProjectContentComponent::setProject (Project* newProject)
|
|||
|
||||
hideEditor();
|
||||
resizerBar = nullptr;
|
||||
sidebar = nullptr;
|
||||
|
||||
project = newProject;
|
||||
|
||||
|
|
@ -122,8 +123,8 @@ void ProjectContentComponent::setProject (Project* newProject)
|
|||
addAndMakeVisible (sidebar.get());
|
||||
|
||||
//==============================================================================
|
||||
resizerBar.reset (new ResizableEdgeComponent (sidebar.get(), &sidebarSizeConstrainer,
|
||||
ResizableEdgeComponent::rightEdge));
|
||||
resizerBar = std::make_unique<ResizableEdgeComponent> (sidebar.get(), &sidebarSizeConstrainer,
|
||||
ResizableEdgeComponent::rightEdge);
|
||||
addAndMakeVisible (resizerBar.get());
|
||||
resizerBar->setAlwaysOnTop (true);
|
||||
|
||||
|
|
@ -138,7 +139,6 @@ void ProjectContentComponent::setProject (Project* newProject)
|
|||
}
|
||||
else
|
||||
{
|
||||
sidebar->setVisible (false);
|
||||
headerComponent.setVisible (false);
|
||||
projectMessagesComponent.setVisible (false);
|
||||
}
|
||||
|
|
@ -190,14 +190,16 @@ void ProjectContentComponent::changeListenerCallback (ChangeBroadcaster* broadca
|
|||
|
||||
void ProjectContentComponent::refreshProjectTreeFileStatuses()
|
||||
{
|
||||
if (auto* fileTree = sidebar->getFileTreePanel())
|
||||
fileTree->repaint();
|
||||
if (sidebar != nullptr)
|
||||
if (auto* fileTree = sidebar->getFileTreePanel())
|
||||
fileTree->repaint();
|
||||
}
|
||||
|
||||
void ProjectContentComponent::updateMissingFileStatuses()
|
||||
{
|
||||
if (auto* tree = sidebar->getFileTreePanel())
|
||||
tree->updateMissingFileStatuses();
|
||||
if (sidebar != nullptr)
|
||||
if (auto* tree = sidebar->getFileTreePanel())
|
||||
tree->updateMissingFileStatuses();
|
||||
}
|
||||
|
||||
bool ProjectContentComponent::showEditorForFile (const File& fileToShow, bool grabFocus)
|
||||
|
|
@ -415,6 +417,9 @@ void ProjectContentComponent::showExporterSettings (const String& exporterName)
|
|||
|
||||
showExportersPanel();
|
||||
|
||||
if (sidebar == nullptr)
|
||||
return;
|
||||
|
||||
if (auto* exportersPanel = sidebar->getExportersTreePanel())
|
||||
{
|
||||
if (auto* exporters = dynamic_cast<TreeItemTypes::ExportersTreeRoot*> (exportersPanel->rootItem.get()))
|
||||
|
|
@ -440,6 +445,9 @@ void ProjectContentComponent::showModule (const String& moduleID)
|
|||
{
|
||||
showModulesPanel();
|
||||
|
||||
if (sidebar == nullptr)
|
||||
return;
|
||||
|
||||
if (auto* modsPanel = sidebar->getModuleTreePanel())
|
||||
{
|
||||
if (auto* mods = dynamic_cast<TreeItemTypes::EnabledModulesItem*> (modsPanel->rootItem.get()))
|
||||
|
|
@ -521,8 +529,9 @@ void ProjectContentComponent::showNewExporterMenu()
|
|||
|
||||
void ProjectContentComponent::deleteSelectedTreeItems()
|
||||
{
|
||||
if (auto* tree = sidebar->getTreeWithSelectedItems())
|
||||
tree->deleteSelectedItems();
|
||||
if (sidebar != nullptr)
|
||||
if (auto* tree = sidebar->getTreeWithSelectedItems())
|
||||
tree->deleteSelectedItems();
|
||||
}
|
||||
|
||||
void ProjectContentComponent::showBubbleMessage (Rectangle<int> pos, const String& text)
|
||||
|
|
@ -869,5 +878,6 @@ void ProjectContentComponent::addNewGUIFile()
|
|||
//==============================================================================
|
||||
void ProjectContentComponent::showProjectPanel (const int index)
|
||||
{
|
||||
sidebar->showPanel (index);
|
||||
if (sidebar != nullptr)
|
||||
sidebar->showPanel (index);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue