From 3c4acafdb60bb6497b3867ef1d4238e1de29cae0 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 27 Feb 2020 14:43:35 +0100 Subject: [PATCH] Editor: Fix crash on exit Make sure no FontSettingsPageWidget is created when changing the font zoom level in the editor. Otherwise it will crash in the font combo box when closing Qt Creator. Since we can't use the save and emit mechanism from the widget anymore move it to TextEditorSettings Change-Id: I1eb87bbae3cf2b802fb15981e7fc2203106d5565 Reviewed-by: Christian Stenger --- src/plugins/texteditor/fontsettingspage.cpp | 5 ++--- src/plugins/texteditor/texteditorsettings.cpp | 17 +++++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp index c192192bdb8..f0e1bca968f 100644 --- a/src/plugins/texteditor/fontsettingspage.cpp +++ b/src/plugins/texteditor/fontsettingspage.cpp @@ -642,9 +642,8 @@ FontSettingsPage::FontSettingsPage(FontSettings *fontSettings, const FormatDescr void FontSettingsPage::setFontZoom(int zoom) { - auto w = static_cast(widget()); - w->m_ui.zoomSpinBox->setValue(zoom); - w->saveSettings(); + if (m_widget) + static_cast(m_widget.data())->m_ui.zoomSpinBox->setValue(zoom); } } // TextEditor diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp index ed822f20801..eb75f8aeb9c 100644 --- a/src/plugins/texteditor/texteditorsettings.cpp +++ b/src/plugins/texteditor/texteditorsettings.cpp @@ -514,21 +514,26 @@ Core::Id TextEditorSettings::languageId(const QString &mimeType) return d->m_mimeTypeToLanguage.value(mimeType); } +static void setFontZoom(int zoom) +{ + d->m_fontSettingsPage.setFontZoom(zoom); + d->m_fontSettings.setFontZoom(zoom); + d->m_fontSettings.toSettings(Core::ICore::settings()); + emit m_instance->fontSettingsChanged(d->m_fontSettings); +} + int TextEditorSettings::increaseFontZoom(int step) { const int previousZoom = d->m_fontSettings.fontZoom(); const int newZoom = qMax(10, previousZoom + step); - if (newZoom != previousZoom) { - d->m_fontSettings.setFontZoom(newZoom); - d->m_fontSettingsPage.setFontZoom(newZoom); - } + if (newZoom != previousZoom) + setFontZoom(newZoom); return newZoom; } void TextEditorSettings::resetFontZoom() { - d->m_fontSettings.setFontZoom(100); - d->m_fontSettingsPage.setFontZoom(100); + setFontZoom(100); } } // TextEditor