mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Add spell checking support (issue #137).
This includes: - Red underline of misspelled words in html text areas. - Right-click context menu options to correct the misspelled word. - New CefBrowser::ReplaceMisspelling method for accepting a word replacement. - Methods added to CefContextMenuParams for retrieving spelling-related information. - Uses the unified text checker when auto-correct is not enabled to match Google Chrome behavior. - On Windows and Linux a hunspell dictionary file will be downloaded to the "<cache_path>/Dictionaries" directory as needed, or used from the <cache_path> directory if the file already exists there. The dictionary file will be downloaded from http://cache.pack.google.com/edgedl/chrome/dict/<LANG>-3-0.bdic where <LANG> is the language abbreviation. - On OS X the spell checking implementation will use the system NSSpellChecker implementation. The following command-line flags have been added: --disable-spell-checking => Disable spell-checking support (no red underline, no dictionary file download, etc). --enable-spelling-auto-correct => Automatically correct common misspellings while typing (like 'omre' to 'more' on Windows/Linux or 'ehlo' to 'helo' on OS X). --enable-spelling-service => Enable use of the remote Google spelling service (this requires Google API keys). --override-spell-check-lang=<LANG> => Use the specified dictionary language <LANG> instead of the language specified in the locales.pak file. To see the default/supported dictionary languages: https://code.google.com/p/chromium/codesearch#search/&q=IDS_SPELLCHECK_DICTIONARY%20xtb&sq=package:chromium git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1859 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
@@ -231,6 +231,26 @@ void CefMenuCreator::CreateDefaultModel() {
|
||||
model_->SetEnabled(MENU_ID_DELETE, false);
|
||||
if (!(params_.edit_flags & CM_EDITFLAG_CAN_SELECT_ALL))
|
||||
model_->SetEnabled(MENU_ID_SELECT_ALL, false);
|
||||
|
||||
if(!params_.misspelled_word.empty()) {
|
||||
if (!params_.dictionary_suggestions.empty())
|
||||
model_->AddSeparator();
|
||||
|
||||
for (size_t i = 0;
|
||||
i < params_.dictionary_suggestions.size() &&
|
||||
MENU_ID_SPELLCHECK_SUGGESTION_0 + i <=
|
||||
MENU_ID_SPELLCHECK_SUGGESTION_LAST;
|
||||
++i) {
|
||||
model_->AddItem(MENU_ID_SPELLCHECK_SUGGESTION_0 + static_cast<int>(i),
|
||||
params_.dictionary_suggestions[i].c_str());
|
||||
}
|
||||
|
||||
if (params_.dictionary_suggestions.empty()) {
|
||||
model_->AddItem(
|
||||
MENU_ID_NO_SPELLING_SUGGESTIONS,
|
||||
GetLabel(IDS_MENU_NO_SPELLING_SUGGESTIONS));
|
||||
}
|
||||
}
|
||||
} else if (!params_.selection_text.empty()) {
|
||||
// Something is selected.
|
||||
model_->AddItem(MENU_ID_COPY, GetLabel(IDS_MENU_COPY));
|
||||
@@ -251,6 +271,18 @@ void CefMenuCreator::CreateDefaultModel() {
|
||||
}
|
||||
|
||||
void CefMenuCreator::ExecuteDefaultCommand(int command_id) {
|
||||
// If the user chose a replacement word for a misspelling, replace it here.
|
||||
if (command_id >= MENU_ID_SPELLCHECK_SUGGESTION_0 &&
|
||||
command_id <= MENU_ID_SPELLCHECK_SUGGESTION_LAST) {
|
||||
const size_t suggestion_index =
|
||||
static_cast<size_t>(command_id) - MENU_ID_SPELLCHECK_SUGGESTION_0;
|
||||
if (suggestion_index < params_.dictionary_suggestions.size()) {
|
||||
browser_->ReplaceMisspelling(
|
||||
params_.dictionary_suggestions[suggestion_index]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
switch (command_id) {
|
||||
// Navigation.
|
||||
case MENU_ID_BACK:
|
||||
|
Reference in New Issue
Block a user