Bug 764203 - Only notify pivot change if it actually changed. r=davidb

This commit is contained in:
Eitan Isaacson 2012-06-18 16:07:56 -07:00
Родитель 52df1d4c92
Коммит 405fbb85d5
2 изменённых файлов: 27 добавлений и 24 удалений

Просмотреть файл

@ -118,7 +118,7 @@ nsAccessiblePivot::SetPosition(nsIAccessible* aPosition)
mPosition.swap(secondPosition);
PRInt32 oldStart = mStartOffset, oldEnd = mEndOffset;
mStartOffset = mEndOffset = -1;
NotifyPivotChanged(secondPosition, oldStart, oldEnd);
NotifyOfPivotChange(secondPosition, oldStart, oldEnd);
return NS_OK;
}
@ -172,7 +172,7 @@ nsAccessiblePivot::SetTextRange(nsIAccessibleText* aTextAccessible,
nsRefPtr<Accessible> oldPosition = mPosition.forget();
mPosition = newPosition.forget();
NotifyPivotChanged(oldPosition, oldStart, oldEnd);
NotifyOfPivotChange(oldPosition, oldStart, oldEnd);
return NS_OK;
}
@ -199,9 +199,8 @@ nsAccessiblePivot::MoveNext(nsIAccessibleTraversalRule* aRule,
SearchForward(anchor, aRule, (aArgc > 1) ? aIncludeStart : false, &rv);
NS_ENSURE_SUCCESS(rv, rv);
*aResult = accessible;
if (*aResult)
MovePivotInternal(accessible);
if (accessible)
*aResult = MovePivotInternal(accessible);
return NS_OK;
}
@ -227,9 +226,8 @@ nsAccessiblePivot::MovePrevious(nsIAccessibleTraversalRule* aRule,
SearchBackward(anchor, aRule, (aArgc > 1) ? aIncludeStart : false, &rv);
NS_ENSURE_SUCCESS(rv, rv);
*aResult = accessible;
if (*aResult)
MovePivotInternal(accessible);
if (accessible)
*aResult = MovePivotInternal(accessible);
return NS_OK;
}
@ -247,9 +245,8 @@ nsAccessiblePivot::MoveFirst(nsIAccessibleTraversalRule* aRule, bool* aResult)
Accessible* accessible = SearchForward(mRoot, aRule, true, &rv);
NS_ENSURE_SUCCESS(rv, rv);
*aResult = accessible;
if (*aResult)
MovePivotInternal(accessible);
if (accessible)
*aResult = MovePivotInternal(accessible);
return NS_OK;
}
@ -276,9 +273,8 @@ nsAccessiblePivot::MoveLast(nsIAccessibleTraversalRule* aRule, bool* aResult)
accessible = SearchBackward(lastAccessible, aRule, true, &rv);
NS_ENSURE_SUCCESS(rv, rv);
*aResult = accessible;
if (*aResult)
MovePivotInternal(accessible);
if (accessible)
*aResult = MovePivotInternal(accessible);
return NS_OK;
}
@ -343,7 +339,7 @@ nsAccessiblePivot::IsRootDescendant(Accessible* aAccessible)
return false;
}
void
bool
nsAccessiblePivot::MovePivotInternal(Accessible* aPosition)
{
nsRefPtr<Accessible> oldPosition = mPosition.forget();
@ -351,7 +347,7 @@ nsAccessiblePivot::MovePivotInternal(Accessible* aPosition)
PRInt32 oldStart = mStartOffset, oldEnd = mEndOffset;
mStartOffset = mEndOffset = -1;
NotifyPivotChanged(oldPosition, oldStart, oldEnd);
return NotifyOfPivotChange(oldPosition, oldStart, oldEnd);
}
Accessible*
@ -472,15 +468,21 @@ nsAccessiblePivot::SearchForward(Accessible* aAccessible,
return nsnull;
}
void
nsAccessiblePivot::NotifyPivotChanged(Accessible* aOldPosition,
PRInt32 aOldStart, PRInt32 aOldEnd)
bool
nsAccessiblePivot::NotifyOfPivotChange(Accessible* aOldPosition,
PRInt32 aOldStart, PRInt32 aOldEnd)
{
if (aOldPosition == mPosition &&
aOldStart == mStartOffset && aOldEnd == mEndOffset)
return false;
nsTObserverArray<nsCOMPtr<nsIAccessiblePivotObserver> >::ForwardIterator iter(mObservers);
while (iter.HasMore()) {
nsIAccessiblePivotObserver* obs = iter.GetNext();
obs->OnPivotChanged(this, aOldPosition, aOldStart, aOldEnd);
}
return true;
}
nsresult

Просмотреть файл

@ -44,10 +44,11 @@ private:
void operator = (const nsAccessiblePivot&) MOZ_DELETE;
/*
* Notify all observers on a pivot change.
* Notify all observers on a pivot change. Return true if it has changed and
* observers have been notified.
*/
void NotifyPivotChanged(Accessible* aOldAccessible,
PRInt32 aOldStart, PRInt32 aOldEnd);
bool NotifyOfPivotChange(Accessible* aOldAccessible,
PRInt32 aOldStart, PRInt32 aOldEnd);
/*
* Check to see that the given accessible is in the pivot's subtree.
@ -72,9 +73,9 @@ private:
nsresult* aResult);
/*
* Update the pivot, and notify observers.
* Update the pivot, and notify observers. Return true if it moved.
*/
void MovePivotInternal(Accessible* aPosition);
bool MovePivotInternal(Accessible* aPosition);
/*
* The root accessible.