aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/texteditor')
-rw-r--r--src/plugins/texteditor/TextEditor.json.in2
-rw-r--r--src/plugins/texteditor/basefilefind.cpp55
-rw-r--r--src/plugins/texteditor/basefilefind.h10
-rw-r--r--src/plugins/texteditor/bookmarkmanager.cpp1
-rw-r--r--src/plugins/texteditor/codestyleselectorwidget.cpp8
-rw-r--r--src/plugins/texteditor/completionsettingspage.cpp2
-rw-r--r--src/plugins/texteditor/displaysettingspage.cpp2
-rw-r--r--src/plugins/texteditor/findincurrentfile.cpp29
-rw-r--r--src/plugins/texteditor/findinfiles.cpp22
-rw-r--r--src/plugins/texteditor/findinfiles.h7
-rw-r--r--src/plugins/texteditor/findinopenfiles.cpp29
-rw-r--r--src/plugins/texteditor/fontsettings.cpp3
-rw-r--r--src/plugins/texteditor/fontsettingspage.cpp7
-rw-r--r--src/plugins/texteditor/refactoringchanges.cpp11
-rw-r--r--src/plugins/texteditor/refactoringchanges.h1
-rw-r--r--src/plugins/texteditor/textdocument.cpp5
-rw-r--r--src/plugins/texteditor/texteditor.cpp62
-rw-r--r--src/plugins/texteditor/texteditor.h12
-rw-r--r--src/plugins/texteditor/textmark.cpp2
19 files changed, 175 insertions, 95 deletions
diff --git a/src/plugins/texteditor/TextEditor.json.in b/src/plugins/texteditor/TextEditor.json.in
index f2b6fbbcf5..42e32325ed 100644
--- a/src/plugins/texteditor/TextEditor.json.in
+++ b/src/plugins/texteditor/TextEditor.json.in
@@ -14,7 +14,7 @@
],
"Category" : "Core",
"Description" : "Text editor framework and the implementation of the basic text editor.",
- "Url" : "http://www.qt.io",
+ "Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES},
"Mimetypes" : [
"<?xml version='1.0'?>",
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index ce6d2f4999..d18a75531b 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -139,8 +139,8 @@ public:
QString title() const override { return Tr::tr("Internal"); }
QString toolTip() const override { return {}; }
QWidget *widget() const override { return m_widget; }
- void readSettings(QtcSettings * /*settings*/) override {}
- void writeSettings(QtcSettings * /*settings*/) const override {}
+ void readSettings(const Store &) override {}
+ void writeSettings(Store &) const override {}
SearchExecutor searchExecutor() const override
{
return [](const FileFindParameters &parameters) {
@@ -442,47 +442,57 @@ FilePath BaseFileFind::searchDir() const
return d->m_searchDir;
}
-void BaseFileFind::writeCommonSettings(QtcSettings *settings)
+void BaseFileFind::writeCommonSettings(
+ Store &s, const QString &defaultFilter, const QString &defaultExclusionFilter) const
{
const auto fromNativeSeparators = [](const QStringList &files) -> QStringList {
return Utils::transform(files, &QDir::fromNativeSeparators);
};
- settings->setValue("filters", fromNativeSeparators(d->m_filterStrings.stringList()));
- if (d->m_filterCombo)
- settings->setValue("currentFilter",
- QDir::fromNativeSeparators(d->m_filterCombo->currentText()));
- settings->setValue("exclusionFilters", fromNativeSeparators(d->m_exclusionStrings.stringList()));
- if (d->m_exclusionCombo)
- settings->setValue("currentExclusionFilter",
- QDir::fromNativeSeparators(d->m_exclusionCombo->currentText()));
+ const QStringList filterStrings = fromNativeSeparators(d->m_filterStrings.stringList());
+ if (filterStrings.size() != 1 || filterStrings.first() != defaultFilter)
+ s.insert("filters", filterStrings);
+ const QString currentFilter = d->m_filterCombo
+ ? QDir::fromNativeSeparators(d->m_filterCombo->currentText())
+ : d->m_filterSetting;
+ if (currentFilter != defaultFilter)
+ s.insert("currentFilter", currentFilter);
+ const QStringList exclusionFilters = fromNativeSeparators(d->m_exclusionStrings.stringList());
+ if (exclusionFilters.size() != 1 || exclusionFilters.first() != defaultExclusionFilter)
+ s.insert("exclusionFilters", exclusionFilters);
+ const QString currentExclusionFilter = d->m_exclusionCombo ? QDir::fromNativeSeparators(
+ d->m_exclusionCombo->currentText())
+ : d->m_exclusionSetting;
+ if (currentExclusionFilter != defaultExclusionFilter)
+ s.insert("currentExclusionFilter", currentExclusionFilter);
for (const SearchEngine *searchEngine : std::as_const(d->m_searchEngines))
- searchEngine->writeSettings(settings);
- settings->setValue("currentSearchEngineIndex", d->m_currentSearchEngineIndex);
+ searchEngine->writeSettings(s);
+ if (d->m_currentSearchEngineIndex != 0)
+ s.insert("currentSearchEngineIndex", d->m_currentSearchEngineIndex);
}
-void BaseFileFind::readCommonSettings(QtcSettings *settings, const QString &defaultFilter,
- const QString &defaultExclusionFilter)
+void BaseFileFind::readCommonSettings(
+ const Store &s, const QString &defaultFilter, const QString &defaultExclusionFilter)
{
const auto toNativeSeparators = [](const QStringList &files) -> QStringList {
return Utils::transform(files, &QDir::toNativeSeparators);
};
- const QStringList filterSetting = settings->value("filters").toStringList();
+ const QStringList filterSetting = s.value("filters").toStringList();
const QStringList filters = filterSetting.isEmpty() ? QStringList(defaultFilter)
: filterSetting;
- const QVariant currentFilter = settings->value("currentFilter");
+ const QVariant currentFilter = s.value("currentFilter");
d->m_filterSetting = currentFilter.isValid() ? currentFilter.toString()
: filters.first();
d->m_filterStrings.setStringList(toNativeSeparators(filters));
if (d->m_filterCombo)
syncComboWithSettings(d->m_filterCombo, d->m_filterSetting);
- QStringList exclusionFilters = settings->value("exclusionFilters").toStringList();
+ QStringList exclusionFilters = s.value("exclusionFilters").toStringList();
if (!exclusionFilters.contains(defaultExclusionFilter))
exclusionFilters << defaultExclusionFilter;
- const QVariant currentExclusionFilter = settings->value("currentExclusionFilter");
+ const QVariant currentExclusionFilter = s.value("currentExclusionFilter");
d->m_exclusionSetting = currentExclusionFilter.isValid() ? currentExclusionFilter.toString()
: exclusionFilters.first();
d->m_exclusionStrings.setStringList(toNativeSeparators(exclusionFilters));
@@ -490,8 +500,8 @@ void BaseFileFind::readCommonSettings(QtcSettings *settings, const QString &defa
syncComboWithSettings(d->m_exclusionCombo, d->m_exclusionSetting);
for (SearchEngine* searchEngine : std::as_const(d->m_searchEngines))
- searchEngine->readSettings(settings);
- const int currentSearchEngineIndex = settings->value("currentSearchEngineIndex", 0).toInt();
+ searchEngine->readSettings(s);
+ const int currentSearchEngineIndex = s.value("currentSearchEngineIndex", 0).toInt();
syncSearchEngineCombo(currentSearchEngineIndex);
}
@@ -594,8 +604,7 @@ FilePaths BaseFileFind::replaceAll(const QString &text, const SearchResultItems
item.mainRange().end.column + 1);
changeSet.replace(start, end, replacement);
}
- file->setChangeSet(changeSet);
- file->apply();
+ file->apply(changeSet);
}
return changes.keys();
diff --git a/src/plugins/texteditor/basefilefind.h b/src/plugins/texteditor/basefilefind.h
index 47adae4b86..de4286c31b 100644
--- a/src/plugins/texteditor/basefilefind.h
+++ b/src/plugins/texteditor/basefilefind.h
@@ -69,8 +69,8 @@ public:
virtual QString title() const = 0;
virtual QString toolTip() const = 0; // add %1 placeholder where the find flags should be put
virtual QWidget *widget() const = 0;
- virtual void readSettings(Utils::QtcSettings *settings) = 0;
- virtual void writeSettings(Utils::QtcSettings *settings) const = 0;
+ virtual void readSettings(const Utils::Store &s) = 0;
+ virtual void writeSettings(Utils::Store &settings) const = 0;
virtual SearchExecutor searchExecutor() const = 0;
virtual EditorOpener editorOpener() const { return {}; }
bool isEnabled() const;
@@ -108,8 +108,10 @@ protected:
virtual QString toolTip() const = 0; // see Core::SearchResultWindow::startNewSearch,
// add %1 placeholder where the find flags should be put
- void writeCommonSettings(Utils::QtcSettings *settings);
- void readCommonSettings(Utils::QtcSettings *settings, const QString &defaultFilter, const QString &defaultExclusionFilter);
+ void writeCommonSettings(
+ Utils::Store &s, const QString &defaultFilter, const QString &defaultExclusionFilter) const;
+ void readCommonSettings(
+ const Utils::Store &s, const QString &defaultFilter, const QString &defaultExclusionFilter);
QList<QPair<QWidget *, QWidget *>> createPatternWidgets();
QStringList fileNameFilters() const;
QStringList fileExclusionFilters() const;
diff --git a/src/plugins/texteditor/bookmarkmanager.cpp b/src/plugins/texteditor/bookmarkmanager.cpp
index 6dcb4de6cc..a61cc58736 100644
--- a/src/plugins/texteditor/bookmarkmanager.cpp
+++ b/src/plugins/texteditor/bookmarkmanager.cpp
@@ -876,6 +876,7 @@ void BookmarkManager::edit()
auto layout = new QFormLayout(&dlg);
auto noteEdit = new QLineEdit(b->note());
noteEdit->setMinimumWidth(300);
+ noteEdit->setFocus();
auto lineNumberSpinbox = new QSpinBox;
lineNumberSpinbox->setRange(1, INT_MAX);
lineNumberSpinbox->setValue(b->lineNumber());
diff --git a/src/plugins/texteditor/codestyleselectorwidget.cpp b/src/plugins/texteditor/codestyleselectorwidget.cpp
index ddeea0a74e..5eb373f00f 100644
--- a/src/plugins/texteditor/codestyleselectorwidget.cpp
+++ b/src/plugins/texteditor/codestyleselectorwidget.cpp
@@ -216,9 +216,11 @@ void CodeStyleSelectorWidget::slotImportClicked()
void CodeStyleSelectorWidget::slotExportClicked()
{
ICodeStylePreferences *currentPreferences = m_codeStyle->currentPreferences();
- const FilePath filePath = FileUtils::getSaveFilePath(this, Tr::tr("Export Code Style"),
- FilePath::fromString(QString::fromUtf8(currentPreferences->id() + ".xml")),
- Tr::tr("Code styles (*.xml);;All files (*)"));
+ const FilePath filePath = FileUtils::getSaveFilePath(
+ this,
+ Tr::tr("Export Code Style"),
+ FileUtils::homePath().pathAppended(QString::fromUtf8(currentPreferences->id() + ".xml")),
+ Tr::tr("Code styles (*.xml);;All files (*)"));
if (!filePath.isEmpty()) {
CodeStylePool *codeStylePool = m_codeStyle->delegatingPool();
codeStylePool->exportCodeStyle(filePath, currentPreferences);
diff --git a/src/plugins/texteditor/completionsettingspage.cpp b/src/plugins/texteditor/completionsettingspage.cpp
index aba8646714..03f45404c6 100644
--- a/src/plugins/texteditor/completionsettingspage.cpp
+++ b/src/plugins/texteditor/completionsettingspage.cpp
@@ -214,7 +214,7 @@ CompletionSettingsPageWidget::CompletionSettingsPageWidget(CompletionSettingsPag
}
},
Group {
- title(Tr::tr("&Automatically insert matching characters")),
+ title(Tr::tr("&Automatically Insert Matching Characters")),
Row {
Column {
m_insertBrackets,
diff --git a/src/plugins/texteditor/displaysettingspage.cpp b/src/plugins/texteditor/displaysettingspage.cpp
index b5435ed5e9..fe914b27ce 100644
--- a/src/plugins/texteditor/displaysettingspage.cpp
+++ b/src/plugins/texteditor/displaysettingspage.cpp
@@ -108,7 +108,7 @@ public:
rightAligned->setChecked(true);
betweenLines = new QRadioButton(Tr::tr("Between lines"));
- displayAnnotations = new QGroupBox(Tr::tr("Line annotations")),
+ displayAnnotations = new QGroupBox(Tr::tr("Line Annotations")),
displayAnnotations->setCheckable(true);
using namespace Layouting;
diff --git a/src/plugins/texteditor/findincurrentfile.cpp b/src/plugins/texteditor/findincurrentfile.cpp
index 7d3ad84997..45121f72d8 100644
--- a/src/plugins/texteditor/findincurrentfile.cpp
+++ b/src/plugins/texteditor/findincurrentfile.cpp
@@ -27,8 +27,8 @@ private:
QString id() const final;
QString displayName() const final;
bool isEnabled() const final;
- void writeSettings(Utils::QtcSettings *settings) final;
- void readSettings(Utils::QtcSettings *settings) final;
+ Utils::Store save() const final;
+ void restore(const Utils::Store &s) final;
QString label() const final;
QString toolTip() const final;
@@ -37,6 +37,9 @@ private:
void handleFileChange(Core::IEditor *editor);
QPointer<Core::IDocument> m_currentDocument;
+
+ // deprecated
+ QByteArray settingsKey() const final;
};
FindInCurrentFile::FindInCurrentFile()
@@ -97,18 +100,24 @@ void FindInCurrentFile::handleFileChange(Core::IEditor *editor)
}
}
-void FindInCurrentFile::writeSettings(QtcSettings *settings)
+const char kDefaultInclusion[] = "*";
+const char kDefaultExclusion[] = "";
+
+Store FindInCurrentFile::save() const
+{
+ Store s;
+ writeCommonSettings(s, kDefaultInclusion, kDefaultExclusion);
+ return s;
+}
+
+void FindInCurrentFile::restore(const Store &s)
{
- settings->beginGroup("FindInCurrentFile");
- writeCommonSettings(settings);
- settings->endGroup();
+ readCommonSettings(s, kDefaultInclusion, kDefaultExclusion);
}
-void FindInCurrentFile::readSettings(QtcSettings *settings)
+QByteArray FindInCurrentFile::settingsKey() const
{
- settings->beginGroup("FindInCurrentFile");
- readCommonSettings(settings, "*", "");
- settings->endGroup();
+ return "FindInCurrentFile";
}
void setupFindInCurrentFile()
diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp
index 955316954b..9dc68cd653 100644
--- a/src/plugins/texteditor/findinfiles.cpp
+++ b/src/plugins/texteditor/findinfiles.cpp
@@ -188,18 +188,24 @@ QWidget *FindInFiles::createConfigWidget()
return m_configWidget;
}
-void FindInFiles::writeSettings(QtcSettings *settings)
+const char kDefaultInclusion[] = "*.cpp,*.h";
+const char kDefaultExclusion[] = "*/.git/*,*/.cvs/*,*/.svn/*,*.autosave,*/build/*";
+
+Store FindInFiles::save() const
+{
+ Store s;
+ writeCommonSettings(s, kDefaultInclusion, kDefaultExclusion);
+ return s;
+}
+
+void FindInFiles::restore(const Utils::Store &s)
{
- settings->beginGroup("FindInFiles");
- writeCommonSettings(settings);
- settings->endGroup();
+ readCommonSettings(s, kDefaultInclusion, kDefaultExclusion);
}
-void FindInFiles::readSettings(QtcSettings *settings)
+QByteArray FindInFiles::settingsKey() const
{
- settings->beginGroup("FindInFiles");
- readCommonSettings(settings, "*.cpp,*.h", "*/.git/*,*/.cvs/*,*/.svn/*,*.autosave");
- settings->endGroup();
+ return "FindInFiles";
}
void FindInFiles::setBaseDirectory(const FilePath &directory)
diff --git a/src/plugins/texteditor/findinfiles.h b/src/plugins/texteditor/findinfiles.h
index c7803a16ed..b3bd7b7095 100644
--- a/src/plugins/texteditor/findinfiles.h
+++ b/src/plugins/texteditor/findinfiles.h
@@ -30,8 +30,8 @@ public:
QString id() const override;
QString displayName() const override;
QWidget *createConfigWidget() override;
- void writeSettings(Utils::QtcSettings *settings) override;
- void readSettings(Utils::QtcSettings *settings) override;
+ Utils::Store save() const override;
+ void restore(const Utils::Store &s) override;
bool isValid() const override;
void setDirectory(const Utils::FilePath &directory);
@@ -39,6 +39,9 @@ public:
static void findOnFileSystem(const QString &path);
static FindInFiles *instance();
+ // deprecated
+ QByteArray settingsKey() const override;
+
protected:
QString label() const override;
QString toolTip() const override;
diff --git a/src/plugins/texteditor/findinopenfiles.cpp b/src/plugins/texteditor/findinopenfiles.cpp
index dcd505cbe1..deeb66e9f5 100644
--- a/src/plugins/texteditor/findinopenfiles.cpp
+++ b/src/plugins/texteditor/findinopenfiles.cpp
@@ -25,14 +25,17 @@ private:
QString id() const final;
QString displayName() const final;
bool isEnabled() const final;
- void writeSettings(Utils::QtcSettings *settings) final;
- void readSettings(Utils::QtcSettings *settings) final;
+ Utils::Store save() const final;
+ void restore(const Utils::Store &s) final;
QString label() const final;
QString toolTip() const final;
FileContainerProvider fileContainerProvider() const final;
void updateEnabledState() { emit enabledChanged(isEnabled()); }
+
+ // deprecated
+ QByteArray settingsKey() const final;
};
FindInOpenFiles::FindInOpenFiles()
@@ -90,21 +93,25 @@ bool FindInOpenFiles::isEnabled() const
return Core::DocumentModel::entryCount() > 0;
}
-void FindInOpenFiles::writeSettings(QtcSettings *settings)
+const char kDefaultInclusion[] = "*";
+const char kDefaultExclusion[] = "";
+
+Store FindInOpenFiles::save() const
{
- settings->beginGroup("FindInOpenFiles");
- writeCommonSettings(settings);
- settings->endGroup();
+ Store s;
+ writeCommonSettings(s, kDefaultInclusion, kDefaultExclusion);
+ return s;
}
-void FindInOpenFiles::readSettings(QtcSettings *settings)
+void FindInOpenFiles::restore(const Store &s)
{
- settings->beginGroup("FindInOpenFiles");
- readCommonSettings(settings, "*", "");
- settings->endGroup();
+ readCommonSettings(s, kDefaultInclusion, kDefaultExclusion);
}
-
+QByteArray FindInOpenFiles::settingsKey() const
+{
+ return "FindInOpenFiles";
+}
void setupFindInOpenFiles()
{
diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp
index e74a37c0d3..44b179d01c 100644
--- a/src/plugins/texteditor/fontsettings.cpp
+++ b/src/plugins/texteditor/fontsettings.cpp
@@ -491,8 +491,7 @@ static QString defaultFontFamily()
return QLatin1String("Menlo");
const QString sourceCodePro(g_sourceCodePro);
- const QFontDatabase dataBase;
- if (dataBase.hasFamily(sourceCodePro))
+ if (QFontDatabase::hasFamily(sourceCodePro))
return sourceCodePro;
if (Utils::HostOsInfo::isAnyUnixHost())
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp
index bdd899b7e0..f528496dcf 100644
--- a/src/plugins/texteditor/fontsettingspage.cpp
+++ b/src/plugins/texteditor/fontsettingspage.cpp
@@ -458,15 +458,14 @@ void FontSettingsPageWidget::updateFontZoom(const FontSettings &fontSettings)
QList<int> FontSettingsPageWidget::pointSizesForSelectedFont() const
{
- QFontDatabase db;
const QString familyName = m_fontComboBox->currentFont().family();
- QList<int> sizeLst = db.pointSizes(familyName);
+ QList<int> sizeLst = QFontDatabase::pointSizes(familyName);
if (!sizeLst.isEmpty())
return sizeLst;
- QStringList styles = db.styles(familyName);
+ QStringList styles = QFontDatabase::styles(familyName);
if (!styles.isEmpty())
- sizeLst = db.pointSizes(familyName, styles.first());
+ sizeLst = QFontDatabase::pointSizes(familyName, styles.first());
if (sizeLst.isEmpty())
sizeLst = QFontDatabase::standardSizes();
diff --git a/src/plugins/texteditor/refactoringchanges.cpp b/src/plugins/texteditor/refactoringchanges.cpp
index ebd487cc37..c8688f2fba 100644
--- a/src/plugins/texteditor/refactoringchanges.cpp
+++ b/src/plugins/texteditor/refactoringchanges.cpp
@@ -214,6 +214,9 @@ void RefactoringFile::setOpenEditor(bool activate, int pos)
bool RefactoringFile::apply()
{
+ if (m_changes.isEmpty())
+ return true;
+
// test file permissions
if (!m_filePath.isWritableFile()) {
ReadOnlyFilesDialog roDialog(m_filePath, ICore::dialogParent());
@@ -287,6 +290,12 @@ bool RefactoringFile::apply()
return result;
}
+bool RefactoringFile::apply(const Utils::ChangeSet &changeSet)
+{
+ setChangeSet(changeSet);
+ return apply();
+}
+
void RefactoringFile::setupFormattingRanges(const QList<ChangeSet::EditOp> &replaceList)
{
QTextDocument * const doc = m_editor ? m_editor->document() : m_document;
@@ -359,7 +368,7 @@ void RefactoringFile::doFormatting()
Utils::sort(m_formattingCursors, [](const auto &tc1, const auto &tc2) {
return tc1.first.selectionStart() < tc2.first.selectionStart();
});
- static const QString clangFormatLineRemovalBlocker("// QTC_TEMP");
+ static const QString clangFormatLineRemovalBlocker("");
for (auto &[formattingCursor, _] : m_formattingCursors) {
const QTextBlock firstBlock = document->findBlock(formattingCursor.selectionStart());
const QTextBlock lastBlock = document->findBlock(formattingCursor.selectionEnd());
diff --git a/src/plugins/texteditor/refactoringchanges.h b/src/plugins/texteditor/refactoringchanges.h
index 913c731df2..3e043c4f6b 100644
--- a/src/plugins/texteditor/refactoringchanges.h
+++ b/src/plugins/texteditor/refactoringchanges.h
@@ -60,6 +60,7 @@ public:
void setChangeSet(const Utils::ChangeSet &changeSet);
void setOpenEditor(bool activate = false, int pos = -1);
bool apply();
+ bool apply(const Utils::ChangeSet &changeSet);
bool create(const QString &contents, bool reindent, bool openInEditor);
protected:
diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp
index 9d8133912c..7fcfe5c86c 100644
--- a/src/plugins/texteditor/textdocument.cpp
+++ b/src/plugins/texteditor/textdocument.cpp
@@ -522,10 +522,7 @@ bool TextDocument::applyChangeSet(const ChangeSet &changeSet)
{
if (changeSet.isEmpty())
return true;
- PlainRefactoringFileFactory changes;
- const RefactoringFilePtr file = changes.file(filePath());
- file->setChangeSet(changeSet);
- return file->apply();
+ return PlainRefactoringFileFactory().file(filePath())->apply(changeSet);
}
// the blocks list must be sorted
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 92636e63cd..03164abb36 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -354,6 +354,7 @@ public:
BaseTextEditorPrivate() = default;
TextEditorFactoryPrivate *m_origin = nullptr;
+ QByteArray m_savedNavigationState;
};
class HoverHandlerRunner
@@ -772,7 +773,6 @@ public:
QSharedPointer<TextDocument> m_document;
QList<QMetaObject::Connection> m_documentConnections;
QByteArray m_tempState;
- QByteArray m_tempNavigationState;
bool m_parenthesesMatchingEnabled = false;
QTimer m_parenthesesMatchingTimer;
@@ -1020,6 +1020,8 @@ void TextEditorWidgetFind::selectAll(const QString &txt, FindFlags findFlags)
if (future.resultCount() <= 0)
return;
const SearchResultItems &results = future.result();
+ if (results.isEmpty())
+ return;
const auto cursorForResult = [this](const SearchResultItem &item) {
return selectRange(m_editor->document(), item.mainRange());
};
@@ -1314,15 +1316,15 @@ TextEditorWidget::TextEditorWidget(QWidget *parent)
{
// "Needed", as the creation below triggers ChildEvents that are
// passed to this object's event() which uses 'd'.
- d = nullptr;
- d = new TextEditorWidgetPrivate(this);
-
+ d = std::make_unique<Internal::TextEditorWidgetPrivate>(this);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
setLayoutDirection(Qt::LeftToRight);
viewport()->setMouseTracking(true);
setFrameStyle(QFrame::NoFrame);
}
+TextEditorWidget::~TextEditorWidget() = default;
+
void TextEditorWidget::setTextDocument(const QSharedPointer<TextDocument> &doc)
{
d->setDocument(doc);
@@ -1501,12 +1503,6 @@ void TextEditorWidgetPrivate::setDocument(const QSharedPointer<TextDocument> &do
setupFromDefinition(currentDefinition());
}
-TextEditorWidget::~TextEditorWidget()
-{
- delete d;
- d = nullptr;
-}
-
void TextEditorWidget::print(QPrinter *printer)
{
const bool oldFullPage = printer->fullPage();
@@ -6391,7 +6387,7 @@ void TextEditorWidgetPrivate::paintRevisionMarker(QPainter &painter,
void TextEditorWidget::extraAreaPaintEvent(QPaintEvent *e)
{
- ExtraAreaPaintEventData data(this, d);
+ ExtraAreaPaintEventData data(this, d.get());
QTC_ASSERT(data.documentLayout, return);
QPainter painter(d->m_extraArea);
@@ -6498,7 +6494,7 @@ void TextEditorWidgetPrivate::slotUpdateRequest(const QRect &r, int dy)
void TextEditorWidgetPrivate::saveCurrentCursorPositionForNavigation()
{
m_lastCursorChangeWasInteresting = true;
- m_tempNavigationState = q->saveState();
+ emit q->saveCurrentStateForNavigationHistory();
}
void TextEditorWidgetPrivate::updateCurrentLineHighlight()
@@ -6554,8 +6550,7 @@ void TextEditorWidget::slotCursorPositionChanged()
<< "indent:" << BaseTextDocumentLayout::userData(textCursor().block())->foldingIndent();
#endif
if (!d->m_contentsChanged && d->m_lastCursorChangeWasInteresting) {
- if (EditorManager::currentEditor() && EditorManager::currentEditor()->widget() == this)
- EditorManager::addCurrentPositionToNavigationHistory(d->m_tempNavigationState);
+ emit addSavedStateToNavigationHistory();
d->m_lastCursorChangeWasInteresting = false;
} else if (d->m_contentsChanged) {
d->saveCurrentCursorPositionForNavigation();
@@ -6861,7 +6856,6 @@ void TextEditorWidget::mouseReleaseEvent(QMouseEvent *e)
{
const Qt::MouseButton button = e->button();
if (d->m_linkPressed && d->isMouseNavigationEvent(e) && button == Qt::LeftButton) {
- EditorManager::addCurrentPositionToNavigationHistory();
bool inNextSplit = ((e->modifiers() & Qt::AltModifier) && !alwaysOpenLinksInNextSplit())
|| (alwaysOpenLinksInNextSplit() && !(e->modifiers() & Qt::AltModifier));
@@ -7589,7 +7583,7 @@ bool TextEditorWidget::openLink(const Utils::Link &link, bool inNextSplit)
}
if (!inNextSplit && textDocument()->filePath() == link.targetFilePath) {
- EditorManager::addCurrentPositionToNavigationHistory();
+ emit addCurrentStateToNavigationHistory();
gotoLine(link.targetLine, link.targetColumn, true, true);
setFocus();
return true;
@@ -9059,7 +9053,7 @@ QMimeData *TextEditorWidget::createMimeDataFromSelection(bool withHtml) const
} else {
const int startPosition = current.position() - selectionStart
- removedCount;
- int endPosition = startPosition + current.text().count();
+ int endPosition = startPosition + current.text().size();
if (current != last)
endPosition++;
removedCount += endPosition - startPosition;
@@ -9605,6 +9599,23 @@ void BaseTextEditor::select(int toPos)
editorWidget()->setTextCursor(tc);
}
+void BaseTextEditor::saveCurrentStateForNavigationHistory()
+{
+ d->m_savedNavigationState = saveState();
+}
+
+void BaseTextEditor::addSavedStateToNavigationHistory()
+{
+ if (EditorManager::currentEditor() == this)
+ EditorManager::addCurrentPositionToNavigationHistory(d->m_savedNavigationState);
+}
+
+void BaseTextEditor::addCurrentStateToNavigationHistory()
+{
+ if (EditorManager::currentEditor() == this)
+ EditorManager::addCurrentPositionToNavigationHistory();
+}
+
void TextEditorWidgetPrivate::updateCursorPosition()
{
m_contextHelpItem = HelpItem();
@@ -10004,7 +10015,7 @@ void TextEditorWidget::setupGenericHighlighter()
setLineSeparatorsAllowed(true);
connect(textDocument(), &IDocument::filePathChanged,
- d, &TextEditorWidgetPrivate::reconfigure);
+ d.get(), &TextEditorWidgetPrivate::reconfigure);
}
//
@@ -10236,6 +10247,21 @@ BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentP
[editor](EditorManager::OpenEditorFlags flags) {
EditorManager::activateEditor(editor, flags);
});
+ QObject::connect(
+ textEditorWidget,
+ &TextEditorWidget::saveCurrentStateForNavigationHistory,
+ editor,
+ &BaseTextEditor::saveCurrentStateForNavigationHistory);
+ QObject::connect(
+ textEditorWidget,
+ &TextEditorWidget::addSavedStateToNavigationHistory,
+ editor,
+ &BaseTextEditor::addSavedStateToNavigationHistory);
+ QObject::connect(
+ textEditorWidget,
+ &TextEditorWidget::addCurrentStateToNavigationHistory,
+ editor,
+ &BaseTextEditor::addCurrentStateToNavigationHistory);
if (m_useGenericHighlighter)
textEditorWidget->setupGenericHighlighter();
diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h
index 78dc0e0b82..7fc56e8733 100644
--- a/src/plugins/texteditor/texteditor.h
+++ b/src/plugins/texteditor/texteditor.h
@@ -169,6 +169,11 @@ public:
private:
friend class TextEditorFactory;
friend class Internal::TextEditorFactoryPrivate;
+
+ void saveCurrentStateForNavigationHistory();
+ void addSavedStateToNavigationHistory();
+ void addCurrentStateToNavigationHistory();
+
Internal::BaseTextEditorPrivate *d;
};
@@ -532,6 +537,11 @@ signals:
void requestCallHierarchy(const QTextCursor &cursor);
void toolbarOutlineChanged(QWidget *newOutline);
+ // used by the IEditor
+ void saveCurrentStateForNavigationHistory();
+ void addSavedStateToNavigationHistory();
+ void addCurrentStateToNavigationHistory();
+
protected:
QTextBlock blockForVisibleRow(int row) const;
QTextBlock blockForVerticalOffset(int offset) const;
@@ -657,7 +667,7 @@ protected:
virtual void slotCodeStyleSettingsChanged(const QVariant &); // Used in CppEditor
private:
- Internal::TextEditorWidgetPrivate *d;
+ std::unique_ptr<Internal::TextEditorWidgetPrivate> d;
friend class BaseTextEditor;
friend class TextEditorFactory;
friend class Internal::TextEditorFactoryPrivate;
diff --git a/src/plugins/texteditor/textmark.cpp b/src/plugins/texteditor/textmark.cpp
index 1739cf61b9..459d0ca27c 100644
--- a/src/plugins/texteditor/textmark.cpp
+++ b/src/plugins/texteditor/textmark.cpp
@@ -371,7 +371,7 @@ bool TextMark::addToolTipContent(QLayout *target) const
QColor TextMark::annotationColor() const
{
if (m_color.has_value())
- return Utils::creatorTheme()->color(*m_color).toHsl();
+ return Utils::creatorColor(*m_color).toHsl();
return {};
}