Editor: Fix reapplying tab and font settings

Change-Id: I6b6ee2d669089adf5db3ae8dabb5d2cc0ca628f9
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
David Schulz
2022-09-27 15:36:40 +02:00
parent edcb5a7e6e
commit 8c996891ae

View File

@@ -588,6 +588,7 @@ public:
void slotUpdateRequest(const QRect &r, int dy); void slotUpdateRequest(const QRect &r, int dy);
void slotUpdateBlockNotify(const QTextBlock &); void slotUpdateBlockNotify(const QTextBlock &);
void updateTabStops(); void updateTabStops();
void applyTabSettings();
void applyFontSettingsDelayed(); void applyFontSettingsDelayed();
void markRemoved(TextMark *mark); void markRemoved(TextMark *mark);
@@ -3484,10 +3485,8 @@ void TextEditorWidgetPrivate::setupDocumentSignals()
QObject::connect(m_document.data(), &TextDocument::reloadFinished, QObject::connect(m_document.data(), &TextDocument::reloadFinished,
this, &TextEditorWidgetPrivate::documentReloadFinished); this, &TextEditorWidgetPrivate::documentReloadFinished);
QObject::connect(m_document.data(), &TextDocument::tabSettingsChanged, this, [this] { QObject::connect(m_document.data(), &TextDocument::tabSettingsChanged,
updateTabStops(); this, &TextEditorWidgetPrivate::applyTabSettings);
m_autoCompleter->setTabSettings(m_document->tabSettings());
});
QObject::connect(m_document.data(), &TextDocument::fontSettingsChanged, QObject::connect(m_document.data(), &TextDocument::fontSettingsChanged,
this, &TextEditorWidgetPrivate::applyFontSettingsDelayed); this, &TextEditorWidgetPrivate::applyFontSettingsDelayed);
@@ -3518,8 +3517,18 @@ void TextEditorWidgetPrivate::setupDocumentSignals()
q, &TextEditorWidget::setExtraEncodingSettings); q, &TextEditorWidget::setExtraEncodingSettings);
// Apply current settings // Apply current settings
m_document->setFontSettings(TextEditorSettings::fontSettings()); // the document might already have the same settings as we set here in which case we do not
m_document->setTabSettings(TextEditorSettings::codeStyle()->tabSettings()); // also set through code style ??? // get an update, so we have to trigger updates manually here
const FontSettings fontSettings = TextEditorSettings::fontSettings();
if (m_document->fontSettings() == fontSettings)
applyFontSettingsDelayed();
else
m_document->setFontSettings(fontSettings);
const TabSettings tabSettings = TextEditorSettings::codeStyle()->tabSettings();
if (m_document->tabSettings() == tabSettings)
applyTabSettings();
else
m_document->setTabSettings(tabSettings); // also set through code style ???
q->setTypingSettings(TextEditorSettings::typingSettings()); q->setTypingSettings(TextEditorSettings::typingSettings());
q->setStorageSettings(TextEditorSettings::storageSettings()); q->setStorageSettings(TextEditorSettings::storageSettings());
q->setBehaviorSettings(TextEditorSettings::behaviorSettings()); q->setBehaviorSettings(TextEditorSettings::behaviorSettings());
@@ -4520,7 +4529,6 @@ void TextEditorWidgetPrivate::paintCursor(const PaintEventData &data, QPainter &
void TextEditorWidgetPrivate::setupBlockLayout(const PaintEventData &data, void TextEditorWidgetPrivate::setupBlockLayout(const PaintEventData &data,
QPainter &painter, QPainter &painter,
PaintEventBlockData &blockData) const PaintEventBlockData &blockData) const
{ {
blockData.layout = data.block.layout(); blockData.layout = data.block.layout();
@@ -7378,6 +7386,11 @@ void TextEditorWidget::applyFontSettings()
if (font != this->font()) { if (font != this->font()) {
setFont(font); setFont(font);
d->updateTabStops(); // update tab stops, they depend on the font d->updateTabStops(); // update tab stops, they depend on the font
} else if (font != document()->defaultFont()) {
// When the editor already have the correct font configured it wont generate a font change
// signal. In turn the default font of the document wont get updated so we need to do that
// manually here
document()->setDefaultFont(font);
} }
// Line numbers // Line numbers
@@ -8280,6 +8293,12 @@ void TextEditorWidgetPrivate::updateTabStops()
q->document()->setDefaultTextOption(option); q->document()->setDefaultTextOption(option);
} }
void TextEditorWidgetPrivate::applyTabSettings()
{
updateTabStops();
m_autoCompleter->setTabSettings(m_document->tabSettings());
}
int TextEditorWidget::columnCount() const int TextEditorWidget::columnCount() const
{ {
QFontMetricsF fm(font()); QFontMetricsF fm(font());