diff options
Diffstat (limited to 'src/plugins/texteditor')
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 ¶meters) { @@ -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 {}; } |