From e806ea40ccaff89857604d53fc8e78a155ce9ad1 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 6 Apr 2018 15:57:30 +0200 Subject: [PATCH] Pass this context object to the connect() Otherwise when "this" instance gets deleted and the sender still exists, the lambda expression is still invoked for the deleted object. Task-number: QTCREATORBUG-20223 Change-Id: Ifd5c9e6ce1fe7fde71698c6683cdfcd7566e8d35 Reviewed-by: Orgad Shaneh --- src/plugins/diffeditor/descriptionwidgetwatcher.cpp | 4 ++-- src/plugins/diffeditor/diffeditorwidgetcontroller.cpp | 6 +++--- src/plugins/diffeditor/sidebysidediffeditorwidget.cpp | 8 ++++---- src/plugins/git/gitclient.cpp | 10 +++++----- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/plugins/diffeditor/descriptionwidgetwatcher.cpp b/src/plugins/diffeditor/descriptionwidgetwatcher.cpp index 0e310cfbcd8..5b266ebe74a 100644 --- a/src/plugins/diffeditor/descriptionwidgetwatcher.cpp +++ b/src/plugins/diffeditor/descriptionwidgetwatcher.cpp @@ -44,7 +44,7 @@ DescriptionWidgetWatcher::DescriptionWidgetWatcher(DiffEditorController *control m_widgets.append(widget); } - connect(EditorManager::instance(), &EditorManager::editorOpened, + connect(EditorManager::instance(), &EditorManager::editorOpened, this, [this](IEditor *editor) { if (TextEditor::TextEditorWidget *widget = descriptionWidget(editor)) { m_widgets.append(widget); @@ -52,7 +52,7 @@ DescriptionWidgetWatcher::DescriptionWidgetWatcher(DiffEditorController *control } }); - connect(EditorManager::instance(), &EditorManager::editorAboutToClose, + connect(EditorManager::instance(), &EditorManager::editorAboutToClose, this, [this](IEditor *editor) { if (TextEditor::TextEditorWidget *widget = descriptionWidget(editor)) { emit descriptionWidgetRemoved(widget); diff --git a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp index c4a826bfe90..834c320a526 100644 --- a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp +++ b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp @@ -227,7 +227,7 @@ void DiffEditorWidgetController::addCodePasterAction(QMenu *menu, int fileIndex, if (ExtensionSystem::PluginManager::getObject()) { // optional code pasting service QAction *sendChunkToCodePasterAction = menu->addAction(tr("Send Chunk to CodePaster...")); - connect(sendChunkToCodePasterAction, &QAction::triggered, [this, fileIndex, chunkIndex]() { + connect(sendChunkToCodePasterAction, &QAction::triggered, this, [this, fileIndex, chunkIndex]() { sendChunkToCodePaster(fileIndex, chunkIndex); }); } @@ -253,7 +253,7 @@ bool DiffEditorWidgetController::fileNamesAreDifferent(int fileIndex) const void DiffEditorWidgetController::addApplyAction(QMenu *menu, int fileIndex, int chunkIndex) { QAction *applyAction = menu->addAction(tr("Apply Chunk...")); - connect(applyAction, &QAction::triggered, [this, fileIndex, chunkIndex]() { + connect(applyAction, &QAction::triggered, this, [this, fileIndex, chunkIndex]() { patch(false, fileIndex, chunkIndex); }); applyAction->setEnabled(chunkExists(fileIndex, chunkIndex) && fileNamesAreDifferent(fileIndex)); @@ -262,7 +262,7 @@ void DiffEditorWidgetController::addApplyAction(QMenu *menu, int fileIndex, int void DiffEditorWidgetController::addRevertAction(QMenu *menu, int fileIndex, int chunkIndex) { QAction *revertAction = menu->addAction(tr("Revert Chunk...")); - connect(revertAction, &QAction::triggered, [this, fileIndex, chunkIndex]() { + connect(revertAction, &QAction::triggered, this, [this, fileIndex, chunkIndex]() { patch(true, fileIndex, chunkIndex); }); revertAction->setEnabled(chunkExists(fileIndex, chunkIndex)); diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp index 81942a9a665..0836e9a952f 100644 --- a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp +++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp @@ -166,7 +166,7 @@ SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent) settings.m_highlightBlocks = false; SelectableTextEditorWidget::setDisplaySettings(settings); - connect(this, &TextEditorWidget::tooltipRequested, [this](const QPoint &point, int position) { + connect(this, &TextEditorWidget::tooltipRequested, this, [this](const QPoint &point, int position) { const int block = document()->findBlock(position).blockNumber(); const auto it = m_fileInfo.constFind(block); if (it != m_fileInfo.constEnd()) @@ -648,10 +648,10 @@ SideBySideDiffEditorWidget::SideBySideDiffEditorWidget(QWidget *parent) }; setupHighlightController(); - connect(m_leftEditor, &SideDiffEditorWidget::gotDisplaySettings, setupHighlightController); + connect(m_leftEditor, &SideDiffEditorWidget::gotDisplaySettings, this, setupHighlightController); m_rightEditor->verticalScrollBar()->setFocusProxy(m_leftEditor); - connect(m_leftEditor, &SideDiffEditorWidget::gotFocus, [this]() { + connect(m_leftEditor, &SideDiffEditorWidget::gotFocus, this, [this]() { if (m_rightEditor->verticalScrollBar()->focusProxy() == m_leftEditor) return; // We already did it before. @@ -672,7 +672,7 @@ SideBySideDiffEditorWidget::SideBySideDiffEditorWidget(QWidget *parent) // too. We bring back the original policy to keep tab focus working. m_leftEditor->setFocusPolicy(Qt::StrongFocus); }); - connect(m_rightEditor, &SideDiffEditorWidget::gotFocus, [this]() { + connect(m_rightEditor, &SideDiffEditorWidget::gotFocus, this, [this]() { // Unhack #1. m_rightEditor->verticalScrollBar()->setFocusProxy(nullptr); // Unhack #2. diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 92803826d61..237b77234f1 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -304,7 +304,7 @@ void GitDiffEditorController::updateBranchList() VcsCommand *command = GitPlugin::client()->vcsExec( workingDirectory, {"branch", noColorOption, "-a", "--contains", revision}, nullptr, false, 0, workingDirectory); - connect(command, &VcsCommand::stdOutText, [this](const QString &text) { + connect(command, &VcsCommand::stdOutText, this, [this](const QString &text) { const QString remotePrefix = "remotes/"; const QString localPrefix = ""; const int prefixLength = remotePrefix.length(); @@ -830,12 +830,12 @@ void GitClient::chunkActionsRequested(QMenu *menu, int fileIndex, int chunkIndex menu->addSeparator(); QAction *stageChunkAction = menu->addAction(tr("Stage Chunk")); - connect(stageChunkAction, &QAction::triggered, + connect(stageChunkAction, &QAction::triggered, this, [this, stageChunk, diffController, fileIndex, chunkIndex]() { stageChunk(diffController, fileIndex, chunkIndex, false); }); QAction *unstageChunkAction = menu->addAction(tr("Unstage Chunk")); - connect(unstageChunkAction, &QAction::triggered, + connect(unstageChunkAction, &QAction::triggered, this, [this, stageChunk, diffController, fileIndex, chunkIndex]() { stageChunk(diffController, fileIndex, chunkIndex, true); }); @@ -1001,7 +1001,7 @@ void GitClient::log(const QString &workingDirectory, const QString &fileName, if (!argWidget) { argWidget = new GitLogArgumentsWidget(settings(), editor->toolBar()); argWidget->setBaseArguments(args); - connect(argWidget, &VcsBaseEditorConfig::commandExecutionRequested, + connect(argWidget, &VcsBaseEditorConfig::commandExecutionRequested, this, [=]() { this->log(workingDir, fileName, enableAnnotationContextMenu, args); }); editor->setEditorConfig(argWidget); } @@ -1087,7 +1087,7 @@ VcsBaseEditorWidget *GitClient::annotate( if (!argWidget) { argWidget = new GitBlameArgumentsWidget(settings(), editor->toolBar()); argWidget->setBaseArguments(extraOptions); - connect(argWidget, &VcsBaseEditorConfig::commandExecutionRequested, + connect(argWidget, &VcsBaseEditorConfig::commandExecutionRequested, this, [=] { const int line = VcsBaseEditor::lineNumberOfCurrentEditor(); annotate(workingDir, file, revision, line, extraOptions);