diff --git a/mozilla/accessible/src/base/nsCaretAccessible.cpp b/mozilla/accessible/src/base/nsCaretAccessible.cpp index 6a4830df5b0..480972ceaea 100644 --- a/mozilla/accessible/src/base/nsCaretAccessible.cpp +++ b/mozilla/accessible/src/base/nsCaretAccessible.cpp @@ -210,15 +210,7 @@ NS_IMETHODIMP nsCaretAccessible::NotifySelectionChanged(nsIDOMDocument *aDoc, ns NS_ASSERTION(textAcc, "No nsIAccessibleText for caret move event!"); // No nsIAccessibleText for caret move event! NS_ENSURE_TRUE(textAcc, NS_ERROR_FAILURE); - PRInt32 caretOffset; - if (NS_SUCCEEDED(textAcc->GetCaretOffset(&caretOffset))) { - mRootAccessible->FireToolkitEvent(nsIAccessibleEvent::EVENT_ATK_TEXT_CARET_MOVE, accessible, &caretOffset); - } - if (!isCollapsed) { - mRootAccessible->FireToolkitEvent(nsIAccessibleEvent::EVENT_ATK_TEXT_SELECTION_CHANGE, accessible, nsnull); - } - - return NS_OK; + return mRootAccessible->FireDelayedToolkitEvent(nsIAccessibleEvent::EVENT_ATK_TEXT_CARET_MOVE, focusNode, nsnull, PR_FALSE); } /** Return the caret's bounds */ diff --git a/mozilla/accessible/src/base/nsDocAccessible.cpp b/mozilla/accessible/src/base/nsDocAccessible.cpp index f9b378148fa..d3a76c64339 100644 --- a/mozilla/accessible/src/base/nsDocAccessible.cpp +++ b/mozilla/accessible/src/base/nsDocAccessible.cpp @@ -1099,6 +1099,18 @@ NS_IMETHODIMP nsDocAccessible::FlushPendingEvents() docAccessible->FireDocLoadEvents(nsIAccessibleEvent::EVENT_DOCUMENT_LOAD_COMPLETE); } } + else if (eventType == nsIAccessibleEvent::EVENT_ATK_TEXT_CARET_MOVE) { + nsCOMPtr accessibleText = do_QueryInterface(accessible); + PRInt32 caretOffset; + if (accessibleText && NS_SUCCEEDED(accessibleText->GetCaretOffset(&caretOffset))) { + FireToolkitEvent(nsIAccessibleEvent::EVENT_ATK_TEXT_CARET_MOVE, accessible, &caretOffset); + PRInt32 selectionCount; + accessibleText->GetSelectionCount(&selectionCount); + if (selectionCount) { // There's a selection so fire selection change as well + FireToolkitEvent(nsIAccessibleEvent::EVENT_ATK_TEXT_SELECTION_CHANGE, accessible, nsnull); + } + } + } else { FireToolkitEvent(eventType, accessible, nsnull); } diff --git a/mozilla/accessible/src/base/nsDocAccessible.h b/mozilla/accessible/src/base/nsDocAccessible.h index dc4b2f15f80..d671a4965fc 100644 --- a/mozilla/accessible/src/base/nsDocAccessible.h +++ b/mozilla/accessible/src/base/nsDocAccessible.h @@ -100,6 +100,10 @@ class nsDocAccessible : public nsHyperTextAccessible, // nsPIAccessNode NS_IMETHOD_(nsIFrame *) GetFrame(void); + // Non-virtual + nsresult FireDelayedToolkitEvent(PRUint32 aEvent, nsIDOMNode *aDOMNode, + void *aData, PRBool aAllowDupes = PR_FALSE); + protected: virtual void GetBoundsRect(nsRect& aRect, nsIFrame** aRelativeFrame); virtual nsresult AddEventListeners(); @@ -112,9 +116,6 @@ class nsDocAccessible : public nsHyperTextAccessible, virtual void SetEditor(nsIEditor *aEditor); virtual already_AddRefed GetEditor() { nsIEditor *editor = mEditor; NS_IF_ADDREF(editor); return editor; } - nsresult FireDelayedToolkitEvent(PRUint32 aEvent, nsIDOMNode *aDOMNode, - void *aData, PRBool aAllowDupes = PR_FALSE); - nsInterfaceHashtable mAccessNodeCache; void *mWnd; nsCOMPtr mDocument; diff --git a/mozilla/accessible/src/html/nsHyperTextAccessible.cpp b/mozilla/accessible/src/html/nsHyperTextAccessible.cpp index be723c487e0..9a454278a94 100644 --- a/mozilla/accessible/src/html/nsHyperTextAccessible.cpp +++ b/mozilla/accessible/src/html/nsHyperTextAccessible.cpp @@ -1411,13 +1411,11 @@ NS_IMETHODIMP nsHyperTextAccessible::GetSelectionCount(PRInt32 *aSelectionCount) rv = domSel->GetIsCollapsed(&isSelectionCollapsed); NS_ENSURE_SUCCESS(rv, rv); - if (isSelectionCollapsed) + if (isSelectionCollapsed) { *aSelectionCount = 0; - - rv = domSel->GetRangeCount(aSelectionCount); - NS_ENSURE_SUCCESS(rv, rv); - - return NS_OK; + return NS_OK; + } + return domSel->GetRangeCount(aSelectionCount); } /*