From 6e6e9650f0133432219b39478b85acd32d5042b9 Mon Sep 17 00:00:00 2001 From: Eugene Shalygin Date: Fri, 26 Jul 2024 13:45:58 +0200 Subject: [PATCH 1/2] Do not unlock QMutex twice This triggers assertion in debug builds. --- src/spellcheckercore.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/spellcheckercore.cpp b/src/spellcheckercore.cpp index c5d026b..bd578f4 100644 --- a/src/spellcheckercore.cpp +++ b/src/spellcheckercore.cpp @@ -439,8 +439,9 @@ void SpellCheckerCore::futureFinished() , Qt::QueuedConnection , Q_ARG( QString, fileName ) , Q_ARG( SpellChecker::WordList, wordsToSpellCheck ) ); + } else { + locker.unlock(); } - locker.unlock(); watcher->deleteLater(); /* Add the list of misspelled words to the mistakes model */ addMisspelledWords( fileName, checkedWords ); From b33294ac942f7dc6689af0d4bbbb4d72146e7998 Mon Sep 17 00:00:00 2001 From: Eugene Shalygin Date: Fri, 26 Jul 2024 13:47:12 +0200 Subject: [PATCH 2/2] Add option to set error color --- src/spellcheckerconstants.h | 1 + src/spellcheckercore.cpp | 3 +- src/spellcheckercoreoptionswidget.cpp | 5 +- src/spellcheckercoreoptionswidget.ui | 96 +++++++++++++++++++++------ src/spellcheckercoresettings.cpp | 4 ++ src/spellcheckercoresettings.h | 2 + 6 files changed, 86 insertions(+), 25 deletions(-) diff --git a/src/spellcheckerconstants.h b/src/spellcheckerconstants.h index a83869d..f9e6685 100644 --- a/src/spellcheckerconstants.h +++ b/src/spellcheckerconstants.h @@ -52,6 +52,7 @@ const char SETTINGS_OUTPUT_PANE_COL_WORD[] = "ColWord"; const char SETTINGS_OUTPUT_PANE_COL_LITERAL[] = "ColLiteral"; const char SETTINGS_OUTPUT_PANE_COL_LINE[] = "ColLine"; const char SETTINGS_OUTPUT_PANE_COL_COLUMN[] = "ColColumn"; +const char SETTINGS_ERRORS_COLOR[] = "ErrorsColor"; const char OUTPUT_PANE_TITLE[] = QT_TRANSLATE_NOOP( "SpellChecker::Internal::OutputPane", "Spelling Mistakes" ); diff --git a/src/spellcheckercore.cpp b/src/spellcheckercore.cpp index bd578f4..16b195f 100644 --- a/src/spellcheckercore.cpp +++ b/src/spellcheckercore.cpp @@ -244,8 +244,7 @@ void SpellCheckerCore::addMisspelledWords( const QString& fileName, const WordLi * and color stays the same, we just want to underline the mistake. */ QTextCharFormat format = cursor.charFormat(); format.setFontUnderline( true ); - static const QColor underLineColor = QColor( Qt::red ); - format.setUnderlineColor( underLineColor ); + format.setUnderlineColor( d->settings.errorsColor ); format.setUnderlineStyle( QTextCharFormat::WaveUnderline ); format.setToolTip( word.suggestions.isEmpty() ? QStringLiteral( "Incorrect spelling" ) diff --git a/src/spellcheckercoreoptionswidget.cpp b/src/spellcheckercoreoptionswidget.cpp index 601b3dc..4d5a03f 100644 --- a/src/spellcheckercoreoptionswidget.cpp +++ b/src/spellcheckercoreoptionswidget.cpp @@ -60,7 +60,7 @@ private slots: void toolButtonRemoveProjectClicked(); void listWidgetItemChanged( QListWidgetItem* item ); -private: + private: void updateWithSettings( const SpellCheckerCoreSettings* const settings ); Ui::SpellCheckerCoreOptionsWidget ui; @@ -96,6 +96,7 @@ SpellCheckerCoreOptionsWidget::SpellCheckerCoreOptionsWidget( SpellCheckerCoreSe * is for the toolbar since nowhere else is a normal one needed. */ ui.toolButtonRemoveProject->setIcon( Utils::Icon( { { ":/utils/images/minus.png" , Utils::Theme::PaletteText } }, Utils::Icon::Tint ).icon() ); + ui.buttonErrorsColor->setAlphaAllowed( false ); const QMap availableSpellCheckers = SpellCheckerCore::instance()->addedSpellCheckers(); // todo: change QMap to std::map and use std::views::keys @@ -129,6 +130,7 @@ SpellCheckerCoreSettings SpellCheckerCoreOptionsWidget::settings() settings.checkExternalFiles = ui.checkBoxCheckExternal->isChecked(); settings.projectsToIgnore = m_projectsToIgnore; settings.replaceAllFromRightClick = ui.checkBoxReplaceAllRightClick->isChecked(); + settings.errorsColor = ui.buttonErrorsColor->color(); return settings; } // -------------------------------------------------- @@ -180,6 +182,7 @@ void SpellCheckerCoreOptionsWidget::updateWithSettings( const SpellCheckerCoreSe ui.listWidget->clear(); ui.listWidget->addItems( m_projectsToIgnore ); ui.checkBoxReplaceAllRightClick->setChecked( settings->replaceAllFromRightClick ); + ui.buttonErrorsColor->setColor( settings->errorsColor ); } // -------------------------------------------------- diff --git a/src/spellcheckercoreoptionswidget.ui b/src/spellcheckercoreoptionswidget.ui index a2864cb..e129567 100644 --- a/src/spellcheckercoreoptionswidget.ui +++ b/src/spellcheckercoreoptionswidget.ui @@ -13,7 +13,7 @@ Form - + @@ -24,23 +24,23 @@ - + + + + Project Options - - - - Parsing the whole project can sometimes take a lot of time, especially for large projects. This setting will restrict the number of files parsed to only the current editor when a project is opened or a setting is changed. - + + - Only check current editor + Replace all occurrence of selected word from suggestion on Right Click menu - + Enable or disable if the SpellChecker should attempt to parse files external to the current active project as they are opened/edited. @@ -50,6 +50,22 @@ + + + + + 64 + 0 + + + + Parsing the whole project can sometimes take a lot of time, especially for large projects. This setting will restrict the number of files parsed to only the current editor when a project is opened or a setting is changed. + + + Only check current editor + + + @@ -57,9 +73,9 @@ - + - + @@ -77,7 +93,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -104,20 +120,53 @@ + + + - - - Replace all occurrence of selected word from suggestion on Right Click menu - - + + + + + Errors color: + + + + + + + + 64 + 0 + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + - + @@ -148,7 +197,6 @@ - 75 true @@ -181,11 +229,15 @@ - - - + + + Utils::QtColorButton + QToolButton +
utils/qtcolorbutton.h
+
+
diff --git a/src/spellcheckercoresettings.cpp b/src/spellcheckercoresettings.cpp index d8978e2..2208efb 100644 --- a/src/spellcheckercoresettings.cpp +++ b/src/spellcheckercoresettings.cpp @@ -55,6 +55,7 @@ void SpellCheckerCoreSettings::saveToSettings( Utils::QtcSettings* settings ) co settings->setValue( Constants::SETTING_CHECK_EXTERNAL, checkExternalFiles ); settings->setValue( Constants::PROJECTS_TO_IGNORE, projectsToIgnore ); settings->setValue( Constants::REPLACE_ALL_FROM_RIGHT_CLICK, replaceAllFromRightClick ); + settings->setValue( Constants::SETTINGS_ERRORS_COLOR, errorsColor ); settings->endGroup(); /* CORE_SETTINGS_GROUP */ settings->sync(); } @@ -68,6 +69,7 @@ void SpellCheckerCoreSettings::loadFromSettings( Utils::QtcSettings* settings ) checkExternalFiles = settings->value( Constants::SETTING_CHECK_EXTERNAL, checkExternalFiles ).toBool(); projectsToIgnore = settings->value( Constants::PROJECTS_TO_IGNORE, projectsToIgnore ).toStringList(); replaceAllFromRightClick = settings->value( Constants::REPLACE_ALL_FROM_RIGHT_CLICK, replaceAllFromRightClick ).toBool(); + errorsColor = settings->value( Constants::SETTINGS_ERRORS_COLOR, errorsColor ).value(); settings->endGroup(); /* CORE_SETTINGS_GROUP */ } // -------------------------------------------------- @@ -81,6 +83,7 @@ SpellCheckerCoreSettings& SpellCheckerCoreSettings::operator=( const SpellChecke this->checkExternalFiles = other.checkExternalFiles; this->projectsToIgnore = other.projectsToIgnore; this->replaceAllFromRightClick = other.replaceAllFromRightClick; + this->errorsColor = other.errorsColor; emit settingsChanged(); } return *this; @@ -95,6 +98,7 @@ bool SpellCheckerCoreSettings::operator==( const SpellCheckerCoreSettings& other different = different | ( checkExternalFiles != other.checkExternalFiles ); different = different | ( projectsToIgnore != other.projectsToIgnore ); different = different | ( replaceAllFromRightClick != other.replaceAllFromRightClick ); + different |= errorsColor != other.errorsColor; return ( different == false ); } // -------------------------------------------------- diff --git a/src/spellcheckercoresettings.h b/src/spellcheckercoresettings.h index 4f1ad49..182dc1a 100644 --- a/src/spellcheckercoresettings.h +++ b/src/spellcheckercoresettings.h @@ -22,6 +22,7 @@ #include +#include #include namespace SpellChecker { @@ -43,6 +44,7 @@ class SpellCheckerCoreSettings bool operator==( const SpellCheckerCoreSettings& other ) const; QString activeSpellChecker; + QColor errorsColor{ Qt::red }; bool onlyParseCurrentFile; bool checkExternalFiles; QStringList projectsToIgnore;