diff options
author | Tobias Markmann <tm@ayena.de> | 2015-07-13 10:57:57 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2015-07-13 10:57:57 (GMT) |
commit | cb8a1c43ff96c1d82c8ba1d30e210135303bbe26 (patch) | |
tree | d0506790ae72be27b2642bd4a2924c3bd43dc7aa | |
parent | c1c1b887ace33ae65a8b6ea00ca1d100c49e024a (diff) | |
download | swift-cb8a1c43ff96c1d82c8ba1d30e210135303bbe26.zip swift-cb8a1c43ff96c1d82c8ba1d30e210135303bbe26.tar.bz2 |
Fix Swift crash during start because of spellcheck code
Check that checker_ and highlighter_ are initialized before
calling them.
A crash report indicated a crash calling getMisspelledPositions()
on highlighter_ from QtTextEdit::contextMenuEvent(). This fix
should prevent this call to cause a crash.
Test-Information:
Verified that spell checking still works on OS X.
Change-Id: Idae37c1f9e2d1a0d0f64da251aa6778f2e9b47a2
-rw-r--r-- | Swift/QtUI/QtTextEdit.cpp | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/Swift/QtUI/QtTextEdit.cpp b/Swift/QtUI/QtTextEdit.cpp index fed8819..79a9474 100644 --- a/Swift/QtUI/QtTextEdit.cpp +++ b/Swift/QtUI/QtTextEdit.cpp @@ -152,31 +152,33 @@ void QtTextEdit::contextMenuEvent(QContextMenuEvent* event) { void QtTextEdit::addSuggestions(QMenu* menu, QContextMenuEvent* event) { replaceWordActions_.clear(); - QAction* insertPoint = menu->actions().first(); - QTextCursor cursor = cursorForPosition(event->pos()); - PositionPair wordPosition = getWordFromCursor(cursor.position()); - if (boost::get<0>(wordPosition) < 0) { - // The click was executed outside a spellable word so no - // suggestions are necessary - return; - } - cursor.setPosition(boost::get<0>(wordPosition), QTextCursor::MoveAnchor); - cursor.setPosition(boost::get<1>(wordPosition), QTextCursor::KeepAnchor); - std::vector<std::string> wordList; - checker_->getSuggestions(Q2PSTRING(cursor.selectedText()), wordList); - if (wordList.size() == 0) { - QAction* noSuggestions = new QAction(tr("No Suggestions"), menu); - noSuggestions->setDisabled(true); - menu->insertAction(insertPoint, noSuggestions); - } - else { - for (std::vector<std::string>::iterator it = wordList.begin(); it != wordList.end(); ++it) { - QAction* wordAction = new QAction(it->c_str(), menu); - menu->insertAction(insertPoint, wordAction); - replaceWordActions_.push_back(wordAction); + if (checker_ && highlighter_) { + QAction* insertPoint = menu->actions().first(); + QTextCursor cursor = cursorForPosition(event->pos()); + PositionPair wordPosition = getWordFromCursor(cursor.position()); + if (boost::get<0>(wordPosition) < 0) { + // The click was executed outside a spellable word so no + // suggestions are necessary + return; + } + cursor.setPosition(boost::get<0>(wordPosition), QTextCursor::MoveAnchor); + cursor.setPosition(boost::get<1>(wordPosition), QTextCursor::KeepAnchor); + std::vector<std::string> wordList; + checker_->getSuggestions(Q2PSTRING(cursor.selectedText()), wordList); + if (wordList.size() == 0) { + QAction* noSuggestions = new QAction(tr("No Suggestions"), menu); + noSuggestions->setDisabled(true); + menu->insertAction(insertPoint, noSuggestions); } + else { + for (std::vector<std::string>::iterator it = wordList.begin(); it != wordList.end(); ++it) { + QAction* wordAction = new QAction(it->c_str(), menu); + menu->insertAction(insertPoint, wordAction); + replaceWordActions_.push_back(wordAction); + } + } + menu->insertAction(insertPoint, menu->addSeparator()); } - menu->insertAction(insertPoint, menu->addSeparator()); } |