diff --git a/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp b/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp index bd8c6882a3d..efc8d242d9b 100644 --- a/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp +++ b/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp @@ -54,6 +54,12 @@ CMakeSpecificSettings::CMakeSpecificSettings() // never save this to the settings: ninjaPath.setToSettingsTransformation( [](const QVariant &) { return QVariant::fromValue(QString()); }); + ninjaPath.setFromSettingsTransformation([](const QVariant &from) { + // Sometimes the installer appends the same ninja path to the qtcreator.ini file + const QString path = from.canConvert() ? from.toStringList().last() + : from.toString(); + return FilePath::fromUserInput(path).toVariant(); + }); packageManagerAutoSetup.setSettingsKey("PackageManagerAutoSetup"); packageManagerAutoSetup.setDefaultValue(true); diff --git a/src/plugins/fossil/fossilplugin.cpp b/src/plugins/fossil/fossilplugin.cpp index 6706e8e851d..38aabc4c667 100644 --- a/src/plugins/fossil/fossilplugin.cpp +++ b/src/plugins/fossil/fossilplugin.cpp @@ -246,8 +246,10 @@ class RevertDialog : public QDialog { public: RevertDialog(const QString &title, QWidget *parent = nullptr); + QString revision() const { return m_revisionLineEdit->text(); } - QLineEdit *m_revisionLineEdit; +private: + QLineEdit *m_revisionLineEdit = nullptr; }; FossilPlugin::~FossilPlugin() @@ -428,15 +430,11 @@ void FossilPluginPrivate::revertCurrentFile() const VcsBase::VcsBasePluginState state = currentState(); QTC_ASSERT(state.hasFile(), return); - QDialog dialog(Core::ICore::dialogParent()); - - auto revisionLineEdit = new QLineEdit; - - if (dialog.exec() != QDialog::Accepted) - return; - m_client.revertFile(state.currentFileTopLevel(), - state.relativeCurrentFile(), - revisionLineEdit->text()); + RevertDialog dialog(Tr::tr("Revert"), Core::ICore::dialogParent()); + if (dialog.exec() == QDialog::Accepted) { + m_client.revertFile(state.currentFileTopLevel(), state.relativeCurrentFile(), + dialog.revision()); + } } void FossilPluginPrivate::statusCurrentFile() @@ -511,7 +509,7 @@ void FossilPluginPrivate::revertAll() RevertDialog dialog(Tr::tr("Revert"), Core::ICore::dialogParent()); if (dialog.exec() == QDialog::Accepted) - m_client.revertAll(state.topLevel(), dialog.m_revisionLineEdit->text()); + m_client.revertAll(state.topLevel(), dialog.revision()); } void FossilPluginPrivate::statusMulti() @@ -627,7 +625,7 @@ void FossilPluginPrivate::update() RevertDialog dialog(Tr::tr("Update"), Core::ICore::dialogParent()); if (dialog.exec() == QDialog::Accepted) - m_client.update(state.topLevel(), dialog.m_revisionLineEdit->text()); + m_client.update(state.topLevel(), dialog.revision()); } void FossilPluginPrivate::configureRepository() diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index bff716ea8ba..98a2ee663dc 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -843,7 +843,7 @@ bool TextDocument::reload(QString *errorString, const FilePath &realFilePath) auto documentLayout = qobject_cast(d->m_document.documentLayout()); if (documentLayout) - documentLayout->documentAboutToReload(); // removes text marks non-permanently + documentLayout->documentAboutToReload(this); // removes text marks non-permanently bool success = openImpl(errorString, filePath(), realFilePath, /*reload =*/true) == OpenResult::Success; diff --git a/src/plugins/texteditor/textdocumentlayout.cpp b/src/plugins/texteditor/textdocumentlayout.cpp index 08c1e21117b..a1a04e44479 100644 --- a/src/plugins/texteditor/textdocumentlayout.cpp +++ b/src/plugins/texteditor/textdocumentlayout.cpp @@ -4,9 +4,14 @@ #include "textdocumentlayout.h" #include "fontsettings.h" #include "textdocument.h" +#include "texteditorplugin.h" #include "texteditorsettings.h" + #include +#include + #include +#include namespace TextEditor { @@ -667,11 +672,15 @@ TextMarks TextDocumentLayout::documentClosing() return marks; } -void TextDocumentLayout::documentAboutToReload() +void TextDocumentLayout::documentAboutToReload(TextDocument *baseTextDocument) { m_reloadMarks = documentClosing(); - for (TextMark *mark : std::as_const(m_reloadMarks)) - mark->setDeleteCallback([this, mark] { m_reloadMarks.removeOne(mark); }); + for (TextMark *mark : std::as_const(m_reloadMarks)) { + mark->setDeleteCallback([this, mark, baseTextDocument] { + baseTextDocument->removeMarkFromMarksCache(mark); + m_reloadMarks.removeOne(mark); + }); + } } void TextDocumentLayout::documentReloaded(TextDocument *baseTextDocument) @@ -860,4 +869,23 @@ TextSuggestion::TextSuggestion() TextSuggestion::~TextSuggestion() = default; +#ifdef WITH_TESTS + +void Internal::TextEditorPlugin::testDeletingMarkOnReload() +{ + auto doc = new TextDocument(); + doc->setFilePath(Utils::TemporaryDirectory::masterDirectoryFilePath() / "TestMarkDoc.txt"); + doc->setPlainText("asd"); + auto documentLayout = qobject_cast(doc->document()->documentLayout()); + QVERIFY(documentLayout); + auto mark = new TextMark(doc, 1, TextMarkCategory{"testMark","testMark"}); + QVERIFY(doc->marks().contains(mark)); + documentLayout->documentAboutToReload(doc); // removes text marks non-permanently + delete mark; + documentLayout->documentReloaded(doc); // re-adds text marks + QVERIFY(!doc->marks().contains(mark)); +} + +#endif + } // namespace TextEditor diff --git a/src/plugins/texteditor/textdocumentlayout.h b/src/plugins/texteditor/textdocumentlayout.h index 33387093da7..427500a8326 100644 --- a/src/plugins/texteditor/textdocumentlayout.h +++ b/src/plugins/texteditor/textdocumentlayout.h @@ -246,7 +246,7 @@ public: QRectF blockBoundingRect(const QTextBlock &block) const override; TextMarks documentClosing(); - void documentAboutToReload(); + void documentAboutToReload(TextDocument *baseTextDocument); void documentReloaded(TextDocument *baseextDocument); void updateMarksLineNumber(); void updateMarksBlock(const QTextBlock &block); diff --git a/src/plugins/texteditor/texteditorplugin.h b/src/plugins/texteditor/texteditorplugin.h index 3df46c0b578..f5725061950 100644 --- a/src/plugins/texteditor/texteditorplugin.h +++ b/src/plugins/texteditor/texteditorplugin.h @@ -40,6 +40,8 @@ private slots: void testFormatting_data(); void testFormatting(); + + void testDeletingMarkOnReload(); #endif };