diff --git a/editor/composer/nsEditorSpellCheck.cpp b/editor/composer/nsEditorSpellCheck.cpp index c9292b9796b..f20a66f9e53 100644 --- a/editor/composer/nsEditorSpellCheck.cpp +++ b/editor/composer/nsEditorSpellCheck.cpp @@ -636,13 +636,6 @@ nsEditorSpellCheck::SetCurrentDictionary(const nsAString& aDictionary) return mSpellChecker->SetCurrentDictionary(aDictionary); } -NS_IMETHODIMP -nsEditorSpellCheck::CheckCurrentDictionary() -{ - mSpellChecker->CheckCurrentDictionary(); - return NS_OK; -} - NS_IMETHODIMP nsEditorSpellCheck::UninitSpellChecker() { diff --git a/editor/libeditor/nsEditor.cpp b/editor/libeditor/nsEditor.cpp index bbf97f05141..d4557baf545 100644 --- a/editor/libeditor/nsEditor.cpp +++ b/editor/libeditor/nsEditor.cpp @@ -24,7 +24,6 @@ #include "PlaceholderTxn.h" // for PlaceholderTxn #include "SplitNodeTxn.h" // for SplitNodeTxn #include "mozFlushType.h" // for mozFlushType::Flush_Frames -#include "mozISpellCheckingEngine.h" #include "mozInlineSpellChecker.h" // for mozInlineSpellChecker #include "mozilla/CheckedInt.h" // for CheckedInt #include "mozilla/IMEStateManager.h" // for IMEStateManager @@ -79,7 +78,6 @@ #include "nsIInlineSpellChecker.h" // for nsIInlineSpellChecker, etc #include "nsNameSpaceManager.h" // for kNameSpaceID_None, etc #include "nsINode.h" // for nsINode, etc -#include "nsIObserverService.h" // for nsIObserverService #include "nsIPlaintextEditor.h" // for nsIPlaintextEditor, etc #include "nsIPresShell.h" // for nsIPresShell #include "nsISelectionController.h" // for nsISelectionController, etc @@ -148,7 +146,6 @@ nsEditor::nsEditor() , mDispatchInputEvent(true) , mIsInEditAction(false) , mHidingCaret(false) -, mObservingDictionaryUpdates(false) { } @@ -204,7 +201,6 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsEditor) NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) NS_INTERFACE_MAP_ENTRY(nsIEditorIMESupport) NS_INTERFACE_MAP_ENTRY(nsIEditor) - NS_INTERFACE_MAP_ENTRY(nsIObserver) NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIEditor) NS_INTERFACE_MAP_END @@ -304,13 +300,6 @@ nsEditor::PostCreate() // update the UI with our state NotifyDocumentListeners(eDocumentCreated); NotifyDocumentListeners(eDocumentStateChanged); - - nsCOMPtr obs = mozilla::services::GetObserverService(); - if (obs) { - obs->AddObserver(this, - SPELLCHECK_DICTIONARY_REMOVE_NOTIFICATION, - false); - } } // update nsTextStateManager and caret if we have focus @@ -448,14 +437,6 @@ nsEditor::PreDestroy(bool aDestroyingFrames) IMEStateManager::OnEditorDestroying(this); - nsCOMPtr obs = mozilla::services::GetObserverService(); - if (obs) { - obs->RemoveObserver(this, - SPELLCHECK_DICTIONARY_UPDATE_NOTIFICATION); - obs->RemoveObserver(this, - SPELLCHECK_DICTIONARY_REMOVE_NOTIFICATION); - } - // Let spellchecker clean up its observers etc. It is important not to // actually free the spellchecker here, since the spellchecker could have // caused flush notifications, which could have gotten here if a textbox @@ -1314,35 +1295,6 @@ NS_IMETHODIMP nsEditor::GetInlineSpellChecker(bool autoCreate, return NS_OK; } -NS_IMETHODIMP nsEditor::Observe(nsISupports* aSubj, const char *aTopic, - const char16_t *aData) -{ - NS_ASSERTION(!strcmp(aTopic, - SPELLCHECK_DICTIONARY_UPDATE_NOTIFICATION) || - !strcmp(aTopic, - SPELLCHECK_DICTIONARY_REMOVE_NOTIFICATION), - "Unexpected observer topic"); - - // When mozInlineSpellChecker::CanEnableInlineSpellChecking changes - SyncRealTimeSpell(); - - // When nsIEditorSpellCheck::GetCurrentDictionary changes - if (mInlineSpellChecker) { - // Do the right thing in the spellchecker, if the dictionary is no longer - // available. This will not set a new dictionary. - nsCOMPtr editorSpellCheck; - mInlineSpellChecker->GetSpellChecker(getter_AddRefs(editorSpellCheck)); - if (editorSpellCheck) { - editorSpellCheck->CheckCurrentDictionary(); - } - - // update the inline spell checker to reflect the new current dictionary - mInlineSpellChecker->SpellCheckRange(nullptr); // causes recheck - } - - return NS_OK; -} - NS_IMETHODIMP nsEditor::SyncRealTimeSpell() { bool enable = GetDesiredSpellCheckState(); @@ -5206,29 +5158,6 @@ nsEditor::OnFocus(nsIDOMEventTarget* aFocusEventTarget) } } -void -nsEditor::StartWatchingDictionaryChanges() -{ - if (!mObservingDictionaryUpdates) { - nsCOMPtr obs = mozilla::services::GetObserverService(); - if (obs) { - obs->AddObserver(this, SPELLCHECK_DICTIONARY_UPDATE_NOTIFICATION, false); - } - mObservingDictionaryUpdates = true; - } -} - -void -nsEditor::StopWatchingDictionaryChanges() -{ - // Removing an observer that wasn't added doesn't cause any harm. - nsCOMPtr obs = mozilla::services::GetObserverService(); - if (obs) { - obs->RemoveObserver(this, SPELLCHECK_DICTIONARY_UPDATE_NOTIFICATION); - } - mObservingDictionaryUpdates = false; -} - NS_IMETHODIMP nsEditor::GetSuppressDispatchingInputEvent(bool *aSuppressed) { diff --git a/editor/libeditor/nsEditor.h b/editor/libeditor/nsEditor.h index 31d2416cd99..4873838fca3 100644 --- a/editor/libeditor/nsEditor.h +++ b/editor/libeditor/nsEditor.h @@ -140,7 +140,6 @@ inline bool operator!(const EditAction& aOp) class nsEditor : public nsIEditor, public nsIEditorIMESupport, public nsSupportsWeakReference, - public nsIObserver, public nsIPhonetic { public: @@ -188,9 +187,6 @@ public: /* ------------ nsIEditorIMESupport methods -------------- */ NS_DECL_NSIEDITORIMESUPPORT - /* ------------ nsIObserver methods -------------- */ - NS_DECL_NSIOBSERVER - // nsIPhonetic NS_DECL_NSIPHONETIC @@ -249,9 +245,6 @@ public: void SwitchTextDirectionTo(uint32_t aDirection); - void StartWatchingDictionaryChanges(); - void StopWatchingDictionaryChanges(); - protected: nsresult DetermineCurrentDirection(); void FireInputEvent(); @@ -894,7 +887,6 @@ protected: bool mDispatchInputEvent; bool mIsInEditAction; // true while the instance is handling an edit action bool mHidingCaret; // whether caret is hidden forcibly. - bool mObservingDictionaryUpdates; // whether the editor is observing dictionary changes. friend bool NSCanUnload(nsISupports* serviceMgr); friend class nsAutoTxnsConserveSelection; diff --git a/editor/libeditor/nsEditorEventListener.cpp b/editor/libeditor/nsEditorEventListener.cpp index 86e107404de..e3010bff30d 100644 --- a/editor/libeditor/nsEditorEventListener.cpp +++ b/editor/libeditor/nsEditorEventListener.cpp @@ -1114,8 +1114,6 @@ nsEditorEventListener::Focus(nsIDOMEvent* aEvent) } } - mEditor->StartWatchingDictionaryChanges(); - mEditor->OnFocus(target); nsCOMPtr ps = GetPresShell(); @@ -1132,8 +1130,6 @@ nsEditorEventListener::Blur(nsIDOMEvent* aEvent) { NS_ENSURE_TRUE(aEvent, NS_OK); - mEditor->StopWatchingDictionaryChanges(); - // check if something else is focused. If another element is focused, then // we should not change the selection. nsIFocusManager* fm = nsFocusManager::GetFocusManager(); diff --git a/editor/nsIEditorSpellCheck.idl b/editor/nsIEditorSpellCheck.idl index 5a8d1be95ea..adf4a0a0344 100644 --- a/editor/nsIEditorSpellCheck.idl +++ b/editor/nsIEditorSpellCheck.idl @@ -9,16 +9,10 @@ interface nsIEditor; interface nsITextServicesFilter; interface nsIEditorSpellCheckCallback; -[scriptable, uuid(dd32ef3b-a7d8-43d1-9617-5f2dddbe29eb)] +[scriptable, uuid(a171c25f-e4a8-4d08-adef-b797e6377bdc)] interface nsIEditorSpellCheck : nsISupports { - /** - * Call this on any change in installed dictionaries to ensure that the spell - * checker is not using a current dictionary which is no longer available. - */ - void checkCurrentDictionary(); - /** * Returns true if we can enable spellchecking. If there are no available * dictionaries, this will return false. diff --git a/editor/txtsvc/nsISpellChecker.h b/editor/txtsvc/nsISpellChecker.h index c63f5709127..cafc725bec9 100644 --- a/editor/txtsvc/nsISpellChecker.h +++ b/editor/txtsvc/nsISpellChecker.h @@ -114,12 +114,6 @@ public: * empty string, spellchecker will be disabled. */ NS_IMETHOD SetCurrentDictionary(const nsAString &aDictionary) = 0; - - /** - * Call this on any change in installed dictionaries to ensure that the spell - * checker is not using a current dictionary which is no longer available. - */ - NS_IMETHOD CheckCurrentDictionary() = 0; }; NS_DEFINE_STATIC_IID_ACCESSOR(nsISpellChecker, NS_ISPELLCHECKER_IID) diff --git a/extensions/spellcheck/hunspell/glue/mozHunspell.cpp b/extensions/spellcheck/hunspell/glue/mozHunspell.cpp index 3b66cac1324..ddf3a58b3b7 100644 --- a/extensions/spellcheck/hunspell/glue/mozHunspell.cpp +++ b/extensions/spellcheck/hunspell/glue/mozHunspell.cpp @@ -160,12 +160,6 @@ NS_IMETHODIMP mozHunspell::SetDictionary(const char16_t *aDictionary) mDecoder = nullptr; mEncoder = nullptr; - nsCOMPtr obs = mozilla::services::GetObserverService(); - if (obs) { - obs->NotifyObservers(nullptr, - SPELLCHECK_DICTIONARY_UPDATE_NOTIFICATION, - nullptr); - } return NS_OK; } @@ -226,13 +220,6 @@ NS_IMETHODIMP mozHunspell::SetDictionary(const char16_t *aDictionary) else mLanguage = Substring(mDictionary, 0, pos); - nsCOMPtr obs = mozilla::services::GetObserverService(); - if (obs) { - obs->NotifyObservers(nullptr, - SPELLCHECK_DICTIONARY_UPDATE_NOTIFICATION, - nullptr); - } - return NS_OK; } @@ -604,11 +591,19 @@ NS_IMETHODIMP mozHunspell::RemoveDirectory(nsIFile *aDir) { mDynamicDirectories.RemoveObject(aDir); LoadDictionaryList(true); + +#ifdef MOZ_THUNDERBIRD + /* + * This notification is needed for Thunderbird. Thunderbird derives the dictionary + * from the document's "lang" attribute. If a dictionary is removed, + * we need to change the "lang" attribute. + */ nsCOMPtr obs = mozilla::services::GetObserverService(); if (obs) { obs->NotifyObservers(nullptr, SPELLCHECK_DICTIONARY_REMOVE_NOTIFICATION, nullptr); } +#endif return NS_OK; } diff --git a/extensions/spellcheck/idl/mozISpellCheckingEngine.idl b/extensions/spellcheck/idl/mozISpellCheckingEngine.idl index c124bb8bca8..c5f7db4210a 100644 --- a/extensions/spellcheck/idl/mozISpellCheckingEngine.idl +++ b/extensions/spellcheck/idl/mozISpellCheckingEngine.idl @@ -102,8 +102,6 @@ interface mozISpellCheckingEngine : nsISupports { #define DICTIONARY_SEARCH_DIRECTORY "DictD" #define DICTIONARY_SEARCH_DIRECTORY_LIST "DictDL" -#define SPELLCHECK_DICTIONARY_UPDATE_NOTIFICATION \ - "spellcheck-dictionary-update" #define SPELLCHECK_DICTIONARY_REMOVE_NOTIFICATION \ "spellcheck-dictionary-remove" %} diff --git a/extensions/spellcheck/src/mozInlineSpellChecker.cpp b/extensions/spellcheck/src/mozInlineSpellChecker.cpp index 89c0546d326..a9fcb304105 100644 --- a/extensions/spellcheck/src/mozInlineSpellChecker.cpp +++ b/extensions/spellcheck/src/mozInlineSpellChecker.cpp @@ -2021,10 +2021,8 @@ nsresult mozInlineSpellChecker::CurrentDictionaryUpdated() currentDictionary.Truncate(); } - if (!mPreviousDictionary.Equals(currentDictionary)) { - nsresult rv = SpellCheckRange(nullptr); - NS_ENSURE_SUCCESS(rv, rv); - } + nsresult rv = SpellCheckRange(nullptr); + NS_ENSURE_SUCCESS(rv, rv); return NS_OK; } diff --git a/extensions/spellcheck/src/mozSpellChecker.cpp b/extensions/spellcheck/src/mozSpellChecker.cpp index adc34f2898a..c695efb863a 100644 --- a/extensions/spellcheck/src/mozSpellChecker.cpp +++ b/extensions/spellcheck/src/mozSpellChecker.cpp @@ -428,31 +428,6 @@ mozSpellChecker::SetCurrentDictionary(const nsAString &aDictionary) return NS_ERROR_NOT_AVAILABLE; } -NS_IMETHODIMP -mozSpellChecker::CheckCurrentDictionary() -{ - // If the current dictionary has been uninstalled, we need to stop using it. - // This happens when there is a current engine, but that engine has no - // current dictionary. - - if (!mSpellCheckingEngine) { - // We didn't have a current dictionary - return NS_OK; - } - - nsXPIDLString dictname; - mSpellCheckingEngine->GetDictionary(getter_Copies(dictname)); - - if (!dictname.IsEmpty()) { - // We still have a current dictionary - return NS_OK; - } - - // We had a current dictionary, but it has gone, so we cannot use it anymore. - mSpellCheckingEngine = nullptr; - return NS_OK; -} - nsresult mozSpellChecker::SetupDoc(int32_t *outBlockOffset) { diff --git a/extensions/spellcheck/src/mozSpellChecker.h b/extensions/spellcheck/src/mozSpellChecker.h index d60b5ac26d2..883dee38d76 100644 --- a/extensions/spellcheck/src/mozSpellChecker.h +++ b/extensions/spellcheck/src/mozSpellChecker.h @@ -48,7 +48,6 @@ public: NS_IMETHOD GetDictionaryList(nsTArray *aDictionaryList) override; NS_IMETHOD GetCurrentDictionary(nsAString &aDictionary) override; NS_IMETHOD SetCurrentDictionary(const nsAString &aDictionary) override; - NS_IMETHOD CheckCurrentDictionary() override; void DeleteRemoteEngine() { mEngine = nullptr;