mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Use C++14 lambda capture initialisers for initialising deletion checkers
This commit is contained in:
parent
5a78b06f5c
commit
a5c3b81f82
33 changed files with 159 additions and 193 deletions
|
|
@ -213,22 +213,21 @@ private:
|
|||
|
||||
updateLoginButtonStates (true);
|
||||
|
||||
WeakReference<Component> weakThis (this);
|
||||
auto completionCallback = [this, weakThis] (const String& errorMessage)
|
||||
auto completionCallback = [weakThis = SafePointer<LoginFormComponent> { this }] (const String& errorMessage)
|
||||
{
|
||||
if (weakThis == nullptr)
|
||||
return;
|
||||
|
||||
updateLoginButtonStates (false);
|
||||
weakThis->updateLoginButtonStates (false);
|
||||
|
||||
if (errorMessage.isNotEmpty())
|
||||
{
|
||||
showErrorMessage (errorMessage);
|
||||
weakThis->showErrorMessage (errorMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
hideErrorMessage();
|
||||
mainWindow.hideLoginFormOverlay();
|
||||
weakThis->hideErrorMessage();
|
||||
weakThis->mainWindow.hideLoginFormOverlay();
|
||||
ProjucerApplication::getApp().getCommandManager().commandStatusChanged();
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1113,8 +1113,7 @@ void ProjucerApplication::createNewProjectFromClipboard()
|
|||
return;
|
||||
}
|
||||
|
||||
WeakReference<ProjucerApplication> parent { this };
|
||||
openFile (tempFile, [parent, cleanup] (bool openedSuccessfully)
|
||||
openFile (tempFile, [parent = WeakReference<ProjucerApplication> { this }, cleanup] (bool openedSuccessfully)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
@ -1172,8 +1171,7 @@ void ProjucerApplication::closeAllMainWindows (std::function<void (bool)> callba
|
|||
|
||||
void ProjucerApplication::closeAllMainWindowsAndQuitIfNeeded()
|
||||
{
|
||||
WeakReference<ProjucerApplication> parent;
|
||||
closeAllMainWindows ([parent] (bool closedSuccessfully)
|
||||
closeAllMainWindows ([parent = WeakReference<ProjucerApplication> { this }] (bool closedSuccessfully)
|
||||
{
|
||||
#if JUCE_MAC
|
||||
ignoreUnused (parent, closedSuccessfully);
|
||||
|
|
|
|||
|
|
@ -346,9 +346,7 @@ void LatestVersionCheckerAndUpdater::addNotificationToOpenProjects (const Versio
|
|||
{
|
||||
if (auto* project = window->getProject())
|
||||
{
|
||||
Component::SafePointer<MainWindow> safeWindow (window);
|
||||
|
||||
auto ignore = [safeWindow]
|
||||
auto ignore = [safeWindow = Component::SafePointer<MainWindow> { window }]
|
||||
{
|
||||
if (safeWindow != nullptr)
|
||||
safeWindow->getProject()->removeProjectMessage (ProjectMessages::Ids::newVersionAvailable);
|
||||
|
|
|
|||
|
|
@ -247,9 +247,10 @@ void MainWindow::closeCurrentProject (OpenDocumentManager::SaveIfNeeded askUserT
|
|||
pcc->hideEditor();
|
||||
}
|
||||
|
||||
SafePointer<MainWindow> parent { this };
|
||||
ProjucerApplication::getApp().openDocumentManager
|
||||
.closeAllDocumentsUsingProjectAsync (*currentProject, askUserToSave, [parent, askUserToSave, callback] (bool closedSuccessfully)
|
||||
.closeAllDocumentsUsingProjectAsync (*currentProject,
|
||||
askUserToSave,
|
||||
[parent = SafePointer<MainWindow> { this }, askUserToSave, callback] (bool closedSuccessfully)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
@ -291,8 +292,8 @@ void MainWindow::closeCurrentProject (OpenDocumentManager::SaveIfNeeded askUserT
|
|||
|
||||
void MainWindow::moveProject (File newProjectFileToOpen, OpenInIDE openInIDE)
|
||||
{
|
||||
SafePointer<MainWindow> parent { this };
|
||||
closeCurrentProject (OpenDocumentManager::SaveIfNeeded::no, [parent, newProjectFileToOpen, openInIDE] (bool)
|
||||
closeCurrentProject (OpenDocumentManager::SaveIfNeeded::no,
|
||||
[parent = SafePointer<MainWindow> { this }, newProjectFileToOpen, openInIDE] (bool)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
@ -360,9 +361,10 @@ void MainWindow::openFile (const File& file, std::function<void (bool)> callback
|
|||
|
||||
if (result.wasOk())
|
||||
{
|
||||
SafePointer<MainWindow> parent { this };
|
||||
auto sharedDoc = std::make_shared<std::unique_ptr<Project>> (std::move (newDoc));
|
||||
closeCurrentProject (OpenDocumentManager::SaveIfNeeded::yes, [parent, sharedDoc, callback] (bool saveResult)
|
||||
closeCurrentProject (OpenDocumentManager::SaveIfNeeded::yes,
|
||||
[parent = SafePointer<MainWindow> { this },
|
||||
sharedDoc = std::make_shared<std::unique_ptr<Project>> (std::move (newDoc)),
|
||||
callback] (bool saveResult)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
@ -472,8 +474,7 @@ void MainWindow::openPIP (const File& pipFile, std::function<void (bool)> callba
|
|||
return;
|
||||
}
|
||||
|
||||
SafePointer<MainWindow> parent { this };
|
||||
openFile (generator->getJucerFile(), [parent, generator, callback] (bool openedSuccessfully)
|
||||
openFile (generator->getJucerFile(), [parent = SafePointer<MainWindow> { this }, generator, callback] (bool openedSuccessfully)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
@ -768,18 +769,18 @@ void MainWindowList::closeWindow (MainWindow* w)
|
|||
else
|
||||
#endif
|
||||
{
|
||||
WeakReference<MainWindowList> parent { this };
|
||||
w->closeCurrentProject (OpenDocumentManager::SaveIfNeeded::yes, [parent, w] (bool closedSuccessfully)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
w->closeCurrentProject (OpenDocumentManager::SaveIfNeeded::yes,
|
||||
[parent = WeakReference<MainWindowList> { this }, w] (bool closedSuccessfully)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
||||
if (closedSuccessfully)
|
||||
{
|
||||
parent->windows.removeObject (w);
|
||||
parent->saveCurrentlyOpenProjectList();
|
||||
}
|
||||
});
|
||||
if (closedSuccessfully)
|
||||
{
|
||||
parent->windows.removeObject (w);
|
||||
parent->saveCurrentlyOpenProjectList();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -176,7 +176,6 @@ void OpenDocumentManager::saveIfNeededAndUserAgrees (OpenDocumentManager::Docume
|
|||
return;
|
||||
}
|
||||
|
||||
WeakReference<OpenDocumentManager> parent { this };
|
||||
AlertWindow::showYesNoCancelBox (AlertWindow::QuestionIcon,
|
||||
TRANS("Closing document..."),
|
||||
TRANS("Do you want to save the changes to \"")
|
||||
|
|
@ -185,7 +184,7 @@ void OpenDocumentManager::saveIfNeededAndUserAgrees (OpenDocumentManager::Docume
|
|||
TRANS("Discard changes"),
|
||||
TRANS("Cancel"),
|
||||
nullptr,
|
||||
ModalCallbackFunction::create ([parent, doc, callback] (int r)
|
||||
ModalCallbackFunction::create ([parent = WeakReference<OpenDocumentManager> { this }, doc, callback] (int r)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
@ -241,8 +240,8 @@ void OpenDocumentManager::closeDocumentAsync (Document* doc, SaveIfNeeded saveIf
|
|||
|
||||
if (saveIfNeeded == SaveIfNeeded::yes)
|
||||
{
|
||||
WeakReference<OpenDocumentManager> parent { this };
|
||||
saveIfNeededAndUserAgrees (doc, [parent, doc, callback] (FileBasedDocument::SaveResult result)
|
||||
saveIfNeededAndUserAgrees (doc,
|
||||
[parent = WeakReference<OpenDocumentManager> { this }, doc, callback] (FileBasedDocument::SaveResult result)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -667,8 +667,8 @@ void CppCodeEditorComponent::insertComponentClass()
|
|||
asyncAlertWindow->addButton (TRANS ("Insert Code"), 1, KeyPress (KeyPress::returnKey));
|
||||
asyncAlertWindow->addButton (TRANS ("Cancel"), 0, KeyPress (KeyPress::escapeKey));
|
||||
|
||||
SafePointer<CppCodeEditorComponent> parent { this };
|
||||
asyncAlertWindow->enterModalState (true, ModalCallbackFunction::create ([parent, classNameField] (int result)
|
||||
asyncAlertWindow->enterModalState (true,
|
||||
ModalCallbackFunction::create ([parent = SafePointer<CppCodeEditorComponent> { this }, classNameField] (int result)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -262,10 +262,9 @@ public:
|
|||
m.addSubMenu ("Relative to", compLayout->getRelativeTargetMenu (component, (int) dimension));
|
||||
}
|
||||
|
||||
SafePointer<PositionPropertyBase> ref (this);
|
||||
|
||||
m.showMenuAsync (PopupMenu::Options().withTargetComponent (&button),
|
||||
[ref, compLayout, callback, xAnchor, yAnchor, xMode, yMode, sizeW, sizeH, p, rpr] (int menuResult) mutable
|
||||
[compLayout, callback, xAnchor, yAnchor, xMode, yMode, sizeW, sizeH, p, rpr,
|
||||
ref = SafePointer<PositionPropertyBase> { this }] (int menuResult) mutable
|
||||
{
|
||||
if (menuResult == 0 || ref == nullptr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -694,8 +694,7 @@ public:
|
|||
|
||||
void saveAsync (std::function<void (bool)> callback) override
|
||||
{
|
||||
WeakReference<JucerComponentDocument> parent { this };
|
||||
SourceCodeDocument::saveAsync ([parent, callback] (bool saveResult)
|
||||
SourceCodeDocument::saveAsync ([parent = WeakReference<JucerComponentDocument> { this }, callback] (bool saveResult)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
@ -720,8 +719,7 @@ public:
|
|||
|
||||
if (auto* header = odm.openFile (nullptr, getFile().withFileExtension (".h")))
|
||||
{
|
||||
WeakReference<JucerComponentDocument> parent { this };
|
||||
header->saveAsync ([parent, callback] (bool saveResult)
|
||||
header->saveAsync ([parent = WeakReference<JucerComponentDocument> { this }, callback] (bool saveResult)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -78,25 +78,25 @@ public:
|
|||
|
||||
void deleteItem() override
|
||||
{
|
||||
WeakReference<ExporterItem> safeThis { this };
|
||||
auto resultCallback = [safeThis = WeakReference<ExporterItem> { this }] (int result)
|
||||
{
|
||||
if (safeThis == nullptr || result == 0)
|
||||
return;
|
||||
|
||||
safeThis->closeSettingsPage();
|
||||
|
||||
auto parent = safeThis->exporter->settings.getParent();
|
||||
parent.removeChild (safeThis->exporter->settings,
|
||||
safeThis->project.getUndoManagerFor (parent));
|
||||
};
|
||||
|
||||
AlertWindow::showOkCancelBox (AlertWindow::WarningIcon,
|
||||
"Delete Exporter",
|
||||
"Are you sure you want to delete this export target?",
|
||||
"",
|
||||
"",
|
||||
nullptr,
|
||||
ModalCallbackFunction::create ([safeThis] (int result)
|
||||
{
|
||||
if (safeThis == nullptr)
|
||||
return;
|
||||
|
||||
if (result == 0)
|
||||
return;
|
||||
|
||||
safeThis->closeSettingsPage();
|
||||
auto parent = safeThis->exporter->settings.getParent();
|
||||
parent.removeChild (safeThis->exporter->settings, safeThis->project.getUndoManagerFor (parent));
|
||||
}));
|
||||
ModalCallbackFunction::create (std::move (resultCallback)));
|
||||
}
|
||||
|
||||
void addSubItems() override
|
||||
|
|
@ -244,14 +244,13 @@ public:
|
|||
|
||||
void deleteItem() override
|
||||
{
|
||||
WeakReference<ConfigItem> parent { this };
|
||||
AlertWindow::showOkCancelBox (AlertWindow::WarningIcon,
|
||||
"Delete Configuration",
|
||||
"Are you sure you want to delete this configuration?",
|
||||
"",
|
||||
"",
|
||||
nullptr,
|
||||
ModalCallbackFunction::create ([parent] (int result)
|
||||
ModalCallbackFunction::create ([parent = WeakReference<ConfigItem> { this }] (int result)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -538,14 +538,14 @@ public:
|
|||
|
||||
if (correspondingItem.isValid())
|
||||
{
|
||||
WeakReference<SourceFileItem> parent { this };
|
||||
AlertWindow::showOkCancelBox (AlertWindow::NoIcon,
|
||||
"File Rename",
|
||||
"Do you also want to rename the corresponding file \"" + correspondingFile.getFileName() + "\" to match?",
|
||||
{},
|
||||
{},
|
||||
nullptr,
|
||||
ModalCallbackFunction::create ([parent, oldFile, newFile, correspondingFile, correspondingItem] (int result) mutable
|
||||
ModalCallbackFunction::create ([parent = WeakReference<SourceFileItem> { this },
|
||||
oldFile, newFile, correspondingFile, correspondingItem] (int result) mutable
|
||||
{
|
||||
if (parent == nullptr || result == 0)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -330,8 +330,7 @@ void ProjectContentComponent::saveDocumentAsync()
|
|||
{
|
||||
if (currentDocument != nullptr)
|
||||
{
|
||||
SafePointer<ProjectContentComponent> parent { this };
|
||||
currentDocument->saveAsync ([parent] (bool savedSuccessfully)
|
||||
currentDocument->saveAsync ([parent = SafePointer<ProjectContentComponent> { this }] (bool savedSuccessfully)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
@ -352,8 +351,7 @@ void ProjectContentComponent::saveAsAsync()
|
|||
{
|
||||
if (currentDocument != nullptr)
|
||||
{
|
||||
SafePointer<ProjectContentComponent> parent { this };
|
||||
currentDocument->saveAsAsync ([parent] (bool savedSuccessfully)
|
||||
currentDocument->saveAsAsync ([parent = SafePointer<ProjectContentComponent> { this }] (bool savedSuccessfully)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -725,10 +725,9 @@ void Project::saveProject (Async async,
|
|||
registerRecentFile (getFile());
|
||||
}
|
||||
|
||||
WeakReference<Project> ref (this);
|
||||
|
||||
saver = std::make_unique<ProjectSaver> (*this);
|
||||
saver->save (async, exporterToSave, [ref, onCompletion] (Result result)
|
||||
|
||||
saver->save (async, exporterToSave, [ref = WeakReference<Project> { this }, onCompletion] (Result result)
|
||||
{
|
||||
if (ref == nullptr)
|
||||
return;
|
||||
|
|
@ -1040,9 +1039,8 @@ void Project::saveAndMoveTemporaryProject (bool openInIDE)
|
|||
// reload project from new location
|
||||
if (auto* window = ProjucerApplication::getApp().mainWindowList.getMainWindowForFile (getFile()))
|
||||
{
|
||||
Component::SafePointer<MainWindow> safeWindow (window);
|
||||
|
||||
MessageManager::callAsync ([safeWindow, newDirectory, oldJucerFileName, openInIDE]() mutable
|
||||
MessageManager::callAsync ([newDirectory, oldJucerFileName, openInIDE,
|
||||
safeWindow = Component::SafePointer<MainWindow> { window }]() mutable
|
||||
{
|
||||
if (safeWindow != nullptr)
|
||||
safeWindow->moveProject (newDirectory.getChildFile (oldJucerFileName),
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ void ProjectSaver::saveProjectAsync (ProjectExporter* exporterToSave, std::funct
|
|||
{
|
||||
jassert (saveThread == nullptr);
|
||||
|
||||
WeakReference<ProjectSaver> ref (this);
|
||||
saveThread = std::make_unique<SaveThreadWithProgressWindow> (*this, exporterToSave, [ref, onCompletion] (Result result)
|
||||
saveThread = std::make_unique<SaveThreadWithProgressWindow> (*this, exporterToSave,
|
||||
[ref = WeakReference<ProjectSaver> { this }, onCompletion] (Result result)
|
||||
{
|
||||
if (ref == nullptr)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -177,8 +177,7 @@ private:
|
|||
asyncAlertWindow->addButton (TRANS ("Create Files"), 1, KeyPress (KeyPress::returnKey));
|
||||
asyncAlertWindow->addButton (TRANS ("Cancel"), 0, KeyPress (KeyPress::escapeKey));
|
||||
|
||||
WeakReference<NewComponentFileWizard> safeThis { this };
|
||||
asyncAlertWindow->enterModalState (true, ModalCallbackFunction::create ([safeThis, parent] (int result)
|
||||
auto resultCallback = [safeThis = WeakReference<NewComponentFileWizard> { this }, parent] (int result)
|
||||
{
|
||||
if (safeThis == nullptr)
|
||||
return;
|
||||
|
|
@ -195,21 +194,24 @@ private:
|
|||
|
||||
if (className == build_tools::makeValidIdentifier (className, false, true, false))
|
||||
{
|
||||
safeThis->askUserToChooseNewFile (className + ".h", "*.h;*.cpp", parent, [safeThis, parent, className] (File newFile)
|
||||
{
|
||||
if (safeThis == nullptr)
|
||||
return;
|
||||
safeThis->askUserToChooseNewFile (className + ".h", "*.h;*.cpp",
|
||||
parent,
|
||||
[safeThis, parent, className] (File newFile)
|
||||
{
|
||||
if (safeThis == nullptr)
|
||||
return;
|
||||
|
||||
if (newFile != File())
|
||||
safeThis->createFiles (parent, className, newFile);
|
||||
});
|
||||
if (newFile != File())
|
||||
safeThis->createFiles (parent, className, newFile);
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
safeThis->createNewFileInternal (parent);
|
||||
};
|
||||
|
||||
}), false);
|
||||
asyncAlertWindow->enterModalState (true, ModalCallbackFunction::create (std::move (resultCallback)), false);
|
||||
}
|
||||
|
||||
std::unique_ptr<AlertWindow> asyncAlertWindow;
|
||||
|
|
|
|||
|
|
@ -2938,12 +2938,10 @@ public:
|
|||
setScaleFactorAndDispatchMessage (peer->getPlatformScaleFactor());
|
||||
|
||||
#if JUCE_LINUX || JUCE_BSD
|
||||
SafePointer<VSTPluginWindow> safeThis (this);
|
||||
|
||||
MessageManager::callAsync ([this, safeThis]
|
||||
MessageManager::callAsync ([safeThis = SafePointer<VSTPluginWindow> { this }]
|
||||
{
|
||||
if (safeThis != nullptr)
|
||||
componentMovedOrResized (true, true);
|
||||
safeThis->componentMovedOrResized (true, true);
|
||||
});
|
||||
#else
|
||||
componentMovedOrResized (true, true);
|
||||
|
|
|
|||
|
|
@ -130,12 +130,10 @@ public:
|
|||
static BluetoothMidiPairingWindowClass cls;
|
||||
window.reset (cls.createInstance());
|
||||
|
||||
WeakReference<BluetoothMidiSelectorWindowHelper> safeThis (this);
|
||||
|
||||
auto deletionCB = [=]
|
||||
auto deletionCB = [safeThis = WeakReference<BluetoothMidiSelectorWindowHelper> { this }]
|
||||
{
|
||||
if (auto* t = safeThis.get())
|
||||
delete t;
|
||||
if (safeThis != nullptr)
|
||||
delete safeThis.get();
|
||||
};
|
||||
|
||||
callbacks.reset (new BluetoothMidiPairingWindowClass::Callbacks { std::move (exitCB),
|
||||
|
|
|
|||
|
|
@ -1753,12 +1753,10 @@ void Component::exitModalState (int returnValue)
|
|||
}
|
||||
else
|
||||
{
|
||||
WeakReference<Component> target (this);
|
||||
|
||||
MessageManager::callAsync ([=]
|
||||
MessageManager::callAsync ([target = WeakReference<Component> { this }, returnValue]
|
||||
{
|
||||
if (auto* c = target.get())
|
||||
c->exitModalState (returnValue);
|
||||
if (target != nullptr)
|
||||
target->exitModalState (returnValue);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -2306,12 +2304,10 @@ void Component::internalModalInputAttempt()
|
|||
//==============================================================================
|
||||
void Component::postCommandMessage (int commandID)
|
||||
{
|
||||
WeakReference<Component> target (this);
|
||||
|
||||
MessageManager::callAsync ([=]
|
||||
MessageManager::callAsync ([target = WeakReference<Component> { this }, commandID]
|
||||
{
|
||||
if (auto* c = target.get())
|
||||
c->handleCommandMessage (commandID);
|
||||
if (target != nullptr)
|
||||
target->handleCommandMessage (commandID);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ void ModalComponentManager::handleAsyncUpdate()
|
|||
Component::SafePointer<Component> compToDelete (item->autoDelete ? item->component : nullptr);
|
||||
|
||||
for (int j = item->callbacks.size(); --j >= 0;)
|
||||
item->callbacks.getUnchecked(j)->modalStateFinished (item->returnValue);
|
||||
item->callbacks.getUnchecked (j)->modalStateFinished (item->returnValue);
|
||||
|
||||
compToDelete.deleteAndZero();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -198,7 +198,10 @@ public:
|
|||
static ModalComponentManager::Callback* create (void (*functionToCall) (int, ParamType),
|
||||
ParamType parameterValue)
|
||||
{
|
||||
return create ([=] (int r) { functionToCall (r, parameterValue); });
|
||||
return create ([functionToCall, parameterValue] (int r)
|
||||
{
|
||||
functionToCall (r, parameterValue);
|
||||
});
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -228,7 +231,10 @@ public:
|
|||
ParamType1 parameterValue1,
|
||||
ParamType2 parameterValue2)
|
||||
{
|
||||
return create ([=] (int r) { functionToCall (r, parameterValue1, parameterValue2); });
|
||||
return create ([functionToCall, parameterValue1, parameterValue2] (int r)
|
||||
{
|
||||
functionToCall (r, parameterValue1, parameterValue2);
|
||||
});
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -258,8 +264,10 @@ public:
|
|||
static ModalComponentManager::Callback* forComponent (void (*functionToCall) (int, ComponentType*),
|
||||
ComponentType* component)
|
||||
{
|
||||
WeakReference<Component> comp (component);
|
||||
return create ([=] (int r) { functionToCall (r, static_cast<ComponentType*> (comp.get())); });
|
||||
return create ([functionToCall, comp = WeakReference<Component> { component }] (int r)
|
||||
{
|
||||
functionToCall (r, static_cast<ComponentType*> (comp.get()));
|
||||
});
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -290,8 +298,10 @@ public:
|
|||
ComponentType* component,
|
||||
ParamType param)
|
||||
{
|
||||
WeakReference<Component> comp (component);
|
||||
return create ([=] (int r) { functionToCall (r, static_cast<ComponentType*> (comp.get()), param); });
|
||||
return create ([functionToCall, param, comp = WeakReference<Component> { component }] (int r)
|
||||
{
|
||||
functionToCall (r, static_cast<ComponentType*> (comp.get()), param);
|
||||
});
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -192,8 +192,10 @@ void Desktop::handleAsyncUpdate()
|
|||
{
|
||||
// The component may be deleted during this operation, but we'll use a SafePointer rather than a
|
||||
// BailOutChecker so that any remaining listeners will still get a callback (with a null pointer).
|
||||
WeakReference<Component> currentFocus (Component::getCurrentlyFocusedComponent());
|
||||
focusListeners.call ([&] (FocusChangeListener& l) { l.globalFocusChanged (currentFocus.get()); });
|
||||
focusListeners.call ([currentFocus = WeakReference<Component> { Component::getCurrentlyFocusedComponent() }] (FocusChangeListener& l)
|
||||
{
|
||||
l.globalFocusChanged (currentFocus.get());
|
||||
});
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -392,8 +392,8 @@ void MultiDocumentPanel::closeDocumentAsync (Component* component,
|
|||
{
|
||||
if (checkItsOkToCloseFirst)
|
||||
{
|
||||
SafePointer<MultiDocumentPanel> parent { this };
|
||||
tryToCloseDocumentAsync (component, [parent, component, callback] (bool closedSuccessfully)
|
||||
tryToCloseDocumentAsync (component,
|
||||
[parent = SafePointer<MultiDocumentPanel> { this }, component, callback] (bool closedSuccessfully)
|
||||
{
|
||||
if (parent == nullptr)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -490,10 +490,10 @@ public:
|
|||
auto chooserIntent = LocalRef<jobject> (env->CallStaticObjectMethod (AndroidIntent, AndroidIntent.createChooser,
|
||||
intent.get(), javaString ("Choose share target").get()));
|
||||
|
||||
WeakReference<ContentSharerNativeImpl> weakRef (this);
|
||||
|
||||
startAndroidActivityForResult (chooserIntent, 1003,
|
||||
[weakRef] (int /*requestCode*/, int resultCode, LocalRef<jobject> /*intentData*/) mutable
|
||||
[weakRef = WeakReference<ContentSharerNativeImpl> { this }] (int /*requestCode*/,
|
||||
int resultCode,
|
||||
LocalRef<jobject> /*intentData*/) mutable
|
||||
{
|
||||
if (weakRef != nullptr)
|
||||
weakRef->sharingFinished (resultCode);
|
||||
|
|
@ -680,10 +680,11 @@ private:
|
|||
AndroidIntent.createChooser,
|
||||
intent.get(),
|
||||
javaString ("Choose share target").get()));
|
||||
WeakReference<ContentSharerNativeImpl> weakRef (this);
|
||||
|
||||
startAndroidActivityForResult (chooserIntent, 1003,
|
||||
[weakRef] (int /*requestCode*/, int resultCode, LocalRef<jobject> /*intentData*/) mutable
|
||||
[weakRef = WeakReference<ContentSharerNativeImpl> { this }] (int /*requestCode*/,
|
||||
int resultCode,
|
||||
LocalRef<jobject> /*intentData*/) mutable
|
||||
{
|
||||
if (weakRef != nullptr)
|
||||
weakRef->sharingFinished (resultCode);
|
||||
|
|
|
|||
|
|
@ -151,10 +151,8 @@ public:
|
|||
|
||||
if (currentFileChooser != nullptr)
|
||||
{
|
||||
WeakReference<Native> myself (this);
|
||||
|
||||
startAndroidActivityForResult (LocalRef<jobject> (env->NewLocalRef (intent.get())), /*READ_REQUEST_CODE*/ 42,
|
||||
[myself] (int requestCode, int resultCode, LocalRef<jobject> intentData) mutable
|
||||
[myself = WeakReference<Native> { this }] (int requestCode, int resultCode, LocalRef<jobject> intentData) mutable
|
||||
{
|
||||
if (myself != nullptr)
|
||||
myself->onActivityResult (requestCode, resultCode, intentData);
|
||||
|
|
|
|||
|
|
@ -680,12 +680,11 @@ private:
|
|||
}
|
||||
else
|
||||
{
|
||||
Component::SafePointer<FilePreviewComponent> safeComp (comp);
|
||||
|
||||
File selectedFile (path);
|
||||
MessageManager::callAsync ([safeComp, selectedFile]() mutable
|
||||
MessageManager::callAsync ([safeComp = Component::SafePointer<FilePreviewComponent> { comp },
|
||||
selectedFile = File { path }]() mutable
|
||||
{
|
||||
safeComp->selectedFileChanged (selectedFile);
|
||||
if (safeComp != nullptr)
|
||||
safeComp->selectedFileChanged (selectedFile);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -482,14 +482,11 @@ void ComboBox::showPopupIfNotActive()
|
|||
{
|
||||
menuActive = true;
|
||||
|
||||
SafePointer<ComboBox> safePointer (this);
|
||||
|
||||
// as this method was triggered by a mouse event, the same mouse event may have
|
||||
// exited the modal state of other popups currently on the screen. By calling
|
||||
// showPopup asynchronously, we are giving the other popups a chance to properly
|
||||
// close themselves
|
||||
MessageManager::callAsync ([safePointer]() mutable { if (safePointer != nullptr) safePointer->showPopup(); });
|
||||
|
||||
MessageManager::callAsync ([safePointer = SafePointer<ComboBox> { this }]() mutable { if (safePointer != nullptr) safePointer->showPopup(); });
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1875,10 +1875,8 @@ void TextEditor::mouseDown (const MouseEvent& e)
|
|||
|
||||
menuActive = true;
|
||||
|
||||
SafePointer<TextEditor> safeThis (this);
|
||||
|
||||
m.showMenuAsync (PopupMenu::Options(),
|
||||
[safeThis] (int menuResult)
|
||||
[safeThis = SafePointer<TextEditor> { this }] (int menuResult)
|
||||
{
|
||||
if (auto* editor = safeThis.getComponent())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -631,15 +631,14 @@ private:
|
|||
|
||||
auto options = Microsoft::WRL::Make<CoreWebView2EnvironmentOptions>();
|
||||
|
||||
WeakReference<WebView2> weakThis (this);
|
||||
auto hr = createWebViewEnvironmentWithOptions (nullptr,
|
||||
userDataFolder != File() ? userDataFolder.getFullPathName().toWideCharPointer() : nullptr,
|
||||
options.Get(),
|
||||
Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
|
||||
[this, weakThis] (HRESULT, ICoreWebView2Environment* env) -> HRESULT
|
||||
[weakThis = WeakReference<WebView2> { this }] (HRESULT, ICoreWebView2Environment* env) -> HRESULT
|
||||
{
|
||||
if (weakThis != nullptr)
|
||||
webViewEnvironment = env;
|
||||
weakThis->webViewEnvironment = env;
|
||||
|
||||
return S_OK;
|
||||
}).Get());
|
||||
|
|
@ -657,22 +656,22 @@ private:
|
|||
|
||||
webViewEnvironment->CreateCoreWebView2Controller ((HWND) peer->getNativeHandle(),
|
||||
Callback<ICoreWebView2CreateCoreWebView2ControllerCompletedHandler> (
|
||||
[this, weakThis] (HRESULT, ICoreWebView2Controller* controller) -> HRESULT
|
||||
[weakThis = WeakReference<WebView2> { this }] (HRESULT, ICoreWebView2Controller* controller) -> HRESULT
|
||||
{
|
||||
if (weakThis != nullptr)
|
||||
{
|
||||
isCreating = false;
|
||||
weakThis->isCreating = false;
|
||||
|
||||
if (controller != nullptr)
|
||||
{
|
||||
webViewController = controller;
|
||||
controller->get_CoreWebView2 (webView.resetAndGetPointerAddress());
|
||||
weakThis->webViewController = controller;
|
||||
controller->get_CoreWebView2 (weakThis->webView.resetAndGetPointerAddress());
|
||||
|
||||
addEventHandlers();
|
||||
componentMovedOrResized (true, true);
|
||||
weakThis->addEventHandlers();
|
||||
weakThis->componentMovedOrResized (true, true);
|
||||
|
||||
if (webView != nullptr && urlRequest.url.isNotEmpty())
|
||||
webView->Navigate (urlRequest.url.toWideCharPointer());
|
||||
if (weakThis->webView != nullptr && weakThis->urlRequest.url.isNotEmpty())
|
||||
weakThis->webView->Navigate (weakThis->urlRequest.url.toWideCharPointer());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -530,8 +530,8 @@ struct CameraDevice::Pimpl
|
|||
if (cameraOpenCallback == nullptr || scopedCameraDevice != nullptr)
|
||||
return;
|
||||
|
||||
WeakReference<Pimpl> safeThis (this);
|
||||
RuntimePermissions::request (RuntimePermissions::camera, [safeThis] (bool granted) mutable
|
||||
RuntimePermissions::request (RuntimePermissions::camera,
|
||||
[safeThis = WeakReference<Pimpl> { this }] (bool granted) mutable
|
||||
{
|
||||
if (safeThis != nullptr)
|
||||
safeThis->continueOpenRequest (granted);
|
||||
|
|
@ -1189,13 +1189,15 @@ private:
|
|||
|
||||
env->CallVoidMethod (jImage, AndroidImage.close);
|
||||
|
||||
WeakReference<ImageReader> safeThis (this);
|
||||
|
||||
owner.callListeners (image);
|
||||
|
||||
// Android may take multiple pictures before it handles a request to stop.
|
||||
if (hasNotifiedListeners.compareAndSetBool (1, 0))
|
||||
MessageManager::callAsync ([safeThis, image]() mutable { if (safeThis != nullptr) safeThis->owner.notifyPictureTaken (image); });
|
||||
MessageManager::callAsync ([safeThis = WeakReference<ImageReader> { this }, image]() mutable
|
||||
{
|
||||
if (safeThis != nullptr)
|
||||
safeThis->owner.notifyPictureTaken (image);
|
||||
});
|
||||
}
|
||||
|
||||
struct ImageBuffer
|
||||
|
|
@ -2183,14 +2185,10 @@ private:
|
|||
JUCE_CAMERA_LOG ("cameraCaptureSessionConfigureFailed()");
|
||||
ignoreUnused (session);
|
||||
|
||||
WeakReference<CaptureSession> weakRef (this);
|
||||
|
||||
MessageManager::callAsync ([this, weakRef]()
|
||||
MessageManager::callAsync ([weakRef = WeakReference<CaptureSession> { this }]
|
||||
{
|
||||
if (weakRef == nullptr)
|
||||
return;
|
||||
|
||||
configuredCallback.captureSessionConfigured (nullptr);
|
||||
if (weakRef != nullptr)
|
||||
weakRef->configuredCallback.captureSessionConfigured (nullptr);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -2218,17 +2216,18 @@ private:
|
|||
captureSession = GlobalRef (session);
|
||||
}
|
||||
|
||||
WeakReference<CaptureSession> weakRef (this);
|
||||
|
||||
MessageManager::callAsync ([this, weakRef]()
|
||||
MessageManager::callAsync ([weakRef = WeakReference<CaptureSession> { this }]
|
||||
{
|
||||
if (weakRef == nullptr)
|
||||
return;
|
||||
|
||||
stillPictureTaker.reset (new StillPictureTaker (captureSession, captureRequestBuilder,
|
||||
previewCaptureRequest, handler, autoFocusMode));
|
||||
weakRef->stillPictureTaker.reset (new StillPictureTaker (weakRef->captureSession,
|
||||
weakRef->captureRequestBuilder,
|
||||
weakRef->previewCaptureRequest,
|
||||
weakRef->handler,
|
||||
weakRef->autoFocusMode));
|
||||
|
||||
configuredCallback.captureSessionConfigured (this);
|
||||
weakRef->configuredCallback.captureSessionConfigured (weakRef.get());
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -2542,18 +2541,11 @@ private:
|
|||
cameraLensFacing (cameraLensFacingToUse),
|
||||
streamConfigurationMap (streamConfigurationMapToUse)
|
||||
{
|
||||
WeakReference<CaptureSessionMode<Mode>> weakRef (this);
|
||||
|
||||
if (weakRef == nullptr)
|
||||
return;
|
||||
|
||||
// async so that the object is fully constructed before the callback gets invoked
|
||||
MessageManager::callAsync ([this, weakRef]()
|
||||
MessageManager::callAsync ([weakRef = WeakReference<CaptureSessionMode<Mode>> { this }]
|
||||
{
|
||||
if (weakRef == nullptr)
|
||||
return;
|
||||
|
||||
previewDisplay.addListener (this);
|
||||
if (weakRef != nullptr)
|
||||
weakRef->previewDisplay.addListener (weakRef.get());
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1716,9 +1716,7 @@ private:
|
|||
//==============================================================================
|
||||
void systemVolumeChanged()
|
||||
{
|
||||
WeakReference<SystemVolumeListener> weakThis (this);
|
||||
|
||||
MessageManager::callAsync ([weakThis]() mutable
|
||||
MessageManager::callAsync ([weakThis = WeakReference<SystemVolumeListener> { this }]() mutable
|
||||
{
|
||||
if (weakThis == nullptr)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -407,9 +407,7 @@ private:
|
|||
|
||||
if (error.isNotEmpty())
|
||||
{
|
||||
WeakReference<CaptureSession> weakRef (this);
|
||||
|
||||
MessageManager::callAsync ([weakRef, error]() mutable
|
||||
MessageManager::callAsync ([weakRef = WeakReference<CaptureSession> { this }, error]() mutable
|
||||
{
|
||||
if (weakRef != nullptr)
|
||||
weakRef->owner.cameraOpenCallback ({}, error);
|
||||
|
|
@ -423,9 +421,7 @@ private:
|
|||
|
||||
if (error.isNotEmpty())
|
||||
{
|
||||
WeakReference<CaptureSession> weakRef (this);
|
||||
|
||||
MessageManager::callAsync ([weakRef, error]() mutable
|
||||
MessageManager::callAsync ([weakRef = WeakReference<CaptureSession> { this }, error]() mutable
|
||||
{
|
||||
if (weakRef != nullptr)
|
||||
weakRef->owner.cameraOpenCallback ({}, error);
|
||||
|
|
|
|||
|
|
@ -496,8 +496,7 @@ private:
|
|||
{
|
||||
handleImageCapture (image);
|
||||
|
||||
WeakReference<Pimpl> weakRef (this);
|
||||
MessageManager::callAsync ([weakRef, image]() mutable
|
||||
MessageManager::callAsync ([weakRef = WeakReference<Pimpl> { this }, image]() mutable
|
||||
{
|
||||
if (weakRef != nullptr && weakRef->pictureTakenCallback != nullptr)
|
||||
weakRef->pictureTakenCallback (image);
|
||||
|
|
|
|||
|
|
@ -435,9 +435,8 @@ private:
|
|||
//==============================================================================
|
||||
void notifyOwnerPreparationFinished (const URL& url, Result r, AVPlayer* preparedPlayer)
|
||||
{
|
||||
WeakReference<PlayerAsyncInitialiser> safeThis (this);
|
||||
|
||||
MessageManager::callAsync ([safeThis, url, r, preparedPlayer]() mutable
|
||||
MessageManager::callAsync ([url, preparedPlayer, r,
|
||||
safeThis = WeakReference<PlayerAsyncInitialiser> { this }]() mutable
|
||||
{
|
||||
if (safeThis != nullptr)
|
||||
safeThis->owner.playerPreparationFinished (url, r, preparedPlayer);
|
||||
|
|
@ -530,9 +529,7 @@ private:
|
|||
|
||||
void playbackReachedEndTime()
|
||||
{
|
||||
WeakReference<PlayerControllerBase> safeThis (this);
|
||||
|
||||
MessageManager::callAsync ([safeThis]() mutable
|
||||
MessageManager::callAsync ([safeThis = WeakReference<PlayerControllerBase> { this }]() mutable
|
||||
{
|
||||
if (safeThis != nullptr)
|
||||
safeThis->owner.playbackReachedEndTime();
|
||||
|
|
|
|||
|
|
@ -258,8 +258,7 @@ struct CameraDevice::Pimpl : public ChangeBroadcaster
|
|||
return;
|
||||
}
|
||||
|
||||
WeakReference<Pimpl> weakRef (this);
|
||||
MessageManager::callAsync ([weakRef, image]() mutable
|
||||
MessageManager::callAsync ([weakRef = WeakReference<Pimpl> { this }, image]() mutable
|
||||
{
|
||||
if (weakRef == nullptr)
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue