diff --git a/content/events/src/nsEventStateManager.cpp b/content/events/src/nsEventStateManager.cpp index 6bd916843892..e2cd7ecdf206 100644 --- a/content/events/src/nsEventStateManager.cpp +++ b/content/events/src/nsEventStateManager.cpp @@ -3927,15 +3927,9 @@ nsEventStateManager::GetContentState(nsIContent *aContent, PRInt32& aState) } } - nsIFocusManager* fm = nsFocusManager::GetFocusManager(); - if (fm) { - nsCOMPtr focusedElement; - fm->GetFocusedElement(getter_AddRefs(focusedElement)); - - nsCOMPtr focusedContent = do_QueryInterface(focusedElement); - if (aContent == focusedContent) { - aState |= NS_EVENT_STATE_FOCUS; - } + nsFocusManager* fm = nsFocusManager::GetFocusManager(); + if (fm && aContent == fm->GetFocusedContent()) { + aState |= NS_EVENT_STATE_FOCUS; } if (aContent == mDragOverContent) { aState |= NS_EVENT_STATE_DRAGOVER; diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp index 4d38008575c6..2a8b0ed2dd16 100644 --- a/dom/base/nsFocusManager.cpp +++ b/dom/base/nsFocusManager.cpp @@ -149,7 +149,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END static NS_DEFINE_CID(kLookAndFeelCID, NS_LOOKANDFEEL_CID); -nsIFocusManager* nsFocusManager::sInstance = nsnull; +nsFocusManager* nsFocusManager::sInstance = nsnull; nsFocusManager::nsFocusManager() { } diff --git a/dom/base/nsFocusManager.h b/dom/base/nsFocusManager.h index ef7afd94c916..e82bc2b18734 100644 --- a/dom/base/nsFocusManager.h +++ b/dom/base/nsFocusManager.h @@ -73,7 +73,14 @@ public: /** * Retrieve the single focus manager. */ - static nsIFocusManager* GetFocusManager() { return sInstance; } + static nsFocusManager* GetFocusManager() { return sInstance; } + + /** + * A faster version of nsIFocusManager::GetFocusedElement, returning a + * raw nsIContent pointer (instead of having AddRef-ed nsIDOMElement + * pointer filled in to an out-parameter). + */ + nsIContent* GetFocusedContent() { return mFocusedContent; } /** * Returns the content node that would be focused if aWindow was in an @@ -437,7 +444,7 @@ protected: nsTArray mDelayedBlurFocusEvents; // the single focus manager - static nsIFocusManager* sInstance; + static nsFocusManager* sInstance; }; nsresult