From 83e98f1bfdade32cf5944426c9905bb0ee1879bf Mon Sep 17 00:00:00 2001 From: "martijn.martijn%gmail.com" Date: Tue, 25 Sep 2007 11:20:43 +0000 Subject: [PATCH] =?UTF-8?q?Bug=20345428=20=C2=96=20No=20spellcheck=20on=20?= =?UTF-8?q?focus=20out,=20second=20try,=20r=3DOlli.Pettay,=20r=3Dbrettw,?= =?UTF-8?q?=20a=3Ddsicore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.0.0.236/trunk@236651 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/extensions/spellcheck/src/Makefile.in | 1 + .../spellcheck/src/mozInlineSpellChecker.cpp | 36 +++++++++++++++++-- .../spellcheck/src/mozInlineSpellChecker.h | 8 ++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/mozilla/extensions/spellcheck/src/Makefile.in b/mozilla/extensions/spellcheck/src/Makefile.in index 7d9fbfd1588..0ec8c8c5da9 100644 --- a/mozilla/extensions/spellcheck/src/Makefile.in +++ b/mozilla/extensions/spellcheck/src/Makefile.in @@ -54,6 +54,7 @@ REQUIRES = xpcom \ string \ editor \ content \ + gfx \ layout \ dom \ necko \ diff --git a/mozilla/extensions/spellcheck/src/mozInlineSpellChecker.cpp b/mozilla/extensions/spellcheck/src/mozInlineSpellChecker.cpp index d2ccf213755..3dfbcd41bd1 100644 --- a/mozilla/extensions/spellcheck/src/mozInlineSpellChecker.cpp +++ b/mozilla/extensions/spellcheck/src/mozInlineSpellChecker.cpp @@ -96,6 +96,8 @@ #include "nsUnicharUtils.h" #include "nsIContent.h" #include "nsIEventStateManager.h" +#include "nsIEventListenerManager.h" +#include "nsGUIEvent.h" // Set to spew messages to the console about what is happening. //#define DEBUG_INLINESPELL @@ -504,6 +506,7 @@ public: NS_INTERFACE_MAP_BEGIN(mozInlineSpellChecker) NS_INTERFACE_MAP_ENTRY(nsIInlineSpellChecker) NS_INTERFACE_MAP_ENTRY(nsIEditActionListener) +NS_INTERFACE_MAP_ENTRY(nsIDOMFocusListener) NS_INTERFACE_MAP_ENTRY(nsIDOMMouseListener) NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMKeyListener) @@ -624,10 +627,19 @@ mozInlineSpellChecker::RegisterEventListeners() nsCOMPtr doc; nsresult rv = editor->GetDocument(getter_AddRefs(doc)); - NS_ENSURE_SUCCESS(rv, rv); + NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr piTarget = do_QueryInterface(doc, &rv); - NS_ENSURE_SUCCESS(rv, rv); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr elmP; + piTarget->GetListenerManager(PR_TRUE, getter_AddRefs(elmP)); + if (elmP) { + // Focus event doesn't bubble so adding the listener to capturing phase + elmP->AddEventListenerByIID(static_cast(this), + NS_GET_IID(nsIDOMFocusListener), + NS_EVENT_FLAG_CAPTURE); + } piTarget->AddEventListenerByIID(static_cast(this), NS_GET_IID(nsIDOMMouseListener)); @@ -654,6 +666,14 @@ mozInlineSpellChecker::UnregisterEventListeners() nsCOMPtr piTarget = do_QueryInterface(doc); NS_ENSURE_TRUE(piTarget, NS_ERROR_NULL_POINTER); + nsCOMPtr elmP; + piTarget->GetListenerManager(PR_TRUE, getter_AddRefs(elmP)); + if (elmP) { + elmP->RemoveEventListenerByIID(static_cast(this), + NS_GET_IID(nsIDOMFocusListener), + NS_EVENT_FLAG_CAPTURE); + } + piTarget->RemoveEventListenerByIID(static_cast(this), NS_GET_IID(nsIDOMMouseListener)); piTarget->RemoveEventListenerByIID(static_cast(this), @@ -1651,6 +1671,18 @@ NS_IMETHODIMP mozInlineSpellChecker::HandleEvent(nsIDOMEvent* aEvent) return NS_OK; } +NS_IMETHODIMP mozInlineSpellChecker::Focus(nsIDOMEvent* aEvent) +{ + return NS_OK; +} + +NS_IMETHODIMP mozInlineSpellChecker::Blur(nsIDOMEvent* aEvent) +{ + // force spellcheck on blur, for instance when tabbing out of a textbox + HandleNavigationEvent(aEvent, PR_TRUE); + return NS_OK; +} + NS_IMETHODIMP mozInlineSpellChecker::MouseClick(nsIDOMEvent *aMouseEvent) { nsCOMPtrmouseEvent = do_QueryInterface(aMouseEvent); diff --git a/mozilla/extensions/spellcheck/src/mozInlineSpellChecker.h b/mozilla/extensions/spellcheck/src/mozInlineSpellChecker.h index 1e4c2b00072..31e2e9d45d8 100644 --- a/mozilla/extensions/spellcheck/src/mozInlineSpellChecker.h +++ b/mozilla/extensions/spellcheck/src/mozInlineSpellChecker.h @@ -48,6 +48,7 @@ #include "nsIDOMTreeWalker.h" #include "nsWeakReference.h" #include "nsIEditor.h" +#include "nsIDOMFocusListener.h" #include "nsIDOMMouseListener.h" #include "nsIDOMKeyListener.h" #include "nsWeakReference.h" @@ -138,7 +139,7 @@ protected: nsIDOMRange** aRange); }; -class mozInlineSpellChecker : public nsIInlineSpellChecker, nsIEditActionListener, nsIDOMMouseListener, nsIDOMKeyListener, +class mozInlineSpellChecker : public nsIInlineSpellChecker, nsIEditActionListener, nsIDOMFocusListener, nsIDOMMouseListener, nsIDOMKeyListener, nsSupportsWeakReference { private: @@ -224,6 +225,11 @@ public: // returns true if it looks likely that we can enable real-time spell checking static PRBool CanEnableInlineSpellChecking(); + /*BEGIN implementations of focus event handler interface*/ + NS_IMETHOD Focus(nsIDOMEvent* aEvent); + NS_IMETHOD Blur(nsIDOMEvent* aEvent); + /*END implementations of focus event handler interface*/ + /*BEGIN implementations of mouseevent handler interface*/ NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent); NS_IMETHOD MouseDown(nsIDOMEvent* aMouseEvent);