Propagate |aNotify| parameter through XBL to attribute changes of XBL-inherited attributes. b=156547 sr=hyatt r=bryner

git-svn-id: svn://10.0.0.236/trunk@126511 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dbaron%fas.harvard.edu 2002-08-06 13:39:22 +00:00
parent 3a44e6c92a
commit ac193497c0
10 changed files with 37 additions and 24 deletions

View File

@ -3237,7 +3237,7 @@ nsGenericContainerElement::SetAttr(nsINodeInfo* aNodeInfo,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(this, getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(name, nameSpaceID, PR_FALSE);
binding->AttributeChanged(name, nameSpaceID, PR_FALSE, aNotify);
if (HasMutationListeners(this, NS_EVENT_BITS_MUTATION_ATTRMODIFIED)) {
nsCOMPtr<nsIDOMEventTarget> node(do_QueryInterface(NS_STATIC_CAST(nsIContent *, this)));
@ -3415,7 +3415,7 @@ nsGenericContainerElement::UnsetAttr(PRInt32 aNameSpaceID,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(this, getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(aName, aNameSpaceID, PR_TRUE);
binding->AttributeChanged(aName, aNameSpaceID, PR_TRUE, aNotify);
if (aNotify) {
mDocument->AttributeChanged(this, aNameSpaceID, aName, nsIDOMMutationEvent::REMOVAL,

View File

@ -1677,7 +1677,7 @@ nsGenericHTMLElement::SetAttr(PRInt32 aNameSpaceID,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(this, getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(aAttribute, aNameSpaceID, PR_FALSE);
binding->AttributeChanged(aAttribute, aNameSpaceID, PR_FALSE, aNotify);
if (nsGenericElement::HasMutationListeners(this, NS_EVENT_BITS_MUTATION_ATTRMODIFIED)) {
nsCOMPtr<nsIDOMEventTarget> node =
@ -1774,7 +1774,7 @@ nsGenericHTMLElement::SetAttr(nsINodeInfo* aNodeInfo,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(this, getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(localName, namespaceID, PR_FALSE);
binding->AttributeChanged(localName, namespaceID, PR_FALSE, aNotify);
if (nsGenericElement::HasMutationListeners(this, NS_EVENT_BITS_MUTATION_ATTRMODIFIED)) {
nsCOMPtr<nsIDOMEventTarget> node =
@ -1952,7 +1952,8 @@ nsGenericHTMLElement::SetHTMLAttribute(nsIAtom* aAttribute,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(this, getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(aAttribute, kNameSpaceID_None, PR_TRUE);
binding->AttributeChanged(aAttribute, kNameSpaceID_None, PR_TRUE,
aNotify);
if (haveListeners) {
nsCOMPtr<nsIDOMEventTarget> node(do_QueryInterface(NS_STATIC_CAST(nsIContent *, this)));
@ -2088,7 +2089,7 @@ nsGenericHTMLElement::UnsetAttr(PRInt32 aNameSpaceID, nsIAtom* aAttribute,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(this, getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(aAttribute, aNameSpaceID, PR_TRUE);
binding->AttributeChanged(aAttribute, aNameSpaceID, PR_TRUE, aNotify);
if (aNotify) {
mDocument->AttributeChanged(this, aNameSpaceID, aAttribute, nsIDOMMutationEvent::REMOVAL, impact);

View File

@ -635,7 +635,7 @@ nsSVGAttributes::SetAttr(nsINodeInfo* aNodeInfo,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(mContent, getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(name, nameSpaceID, PR_FALSE);
binding->AttributeChanged(name, nameSpaceID, PR_FALSE, aNotify);
if (nsGenericElement::HasMutationListeners(mContent, NS_EVENT_BITS_MUTATION_ATTRMODIFIED)) {
nsCOMPtr<nsIDOMEventTarget> node(do_QueryInterface(mContent));
@ -734,7 +734,7 @@ nsSVGAttributes::UnsetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(mContent, getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(aName, aNameSpaceID, PR_TRUE);
binding->AttributeChanged(aName, aNameSpaceID, PR_TRUE, aNotify);
if (aNotify) {
document->AttributeChanged(mContent, aNameSpaceID, aName,

View File

@ -91,7 +91,8 @@ public:
NS_IMETHOD GetBaseTag(PRInt32* aNameSpaceID, nsIAtom** aResult) = 0;
// Called when an attribute changes on a binding.
NS_IMETHOD AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID, PRBool aRemoveFlag) = 0;
NS_IMETHOD AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID,
PRBool aRemoveFlag, PRBool aNotify) = 0;
NS_IMETHOD ExecuteAttachedHandler()=0;
NS_IMETHOD ExecuteDetachedHandler()=0;

View File

@ -96,8 +96,9 @@ public:
NS_IMETHOD ConstructInterfaceTable(const nsAString& aImpls)=0;
NS_IMETHOD AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID, PRBool aRemoveFlag,
nsIContent* aChangedElement, nsIContent* aAnonymousContent)=0;
NS_IMETHOD AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID,
PRBool aRemoveFlag, nsIContent* aChangedElement,
nsIContent* aAnonymousContent, PRBool aNotify)=0;
NS_IMETHOD SetBasePrototype(nsIXBLPrototypeBinding* aBinding)=0;
NS_IMETHOD GetBasePrototype(nsIXBLPrototypeBinding** aResult)=0;

View File

@ -1017,16 +1017,20 @@ nsXBLBinding::GetBaseTag(PRInt32* aNameSpaceID, nsIAtom** aResult)
}
NS_IMETHODIMP
nsXBLBinding::AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID, PRBool aRemoveFlag)
nsXBLBinding::AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID,
PRBool aRemoveFlag, PRBool aNotify)
{
// XXX Change if we ever allow multiple bindings in a chain to contribute anonymous content
if (!mContent) {
if (mNextBinding)
return mNextBinding->AttributeChanged(aAttribute, aNameSpaceID, aRemoveFlag);
return mNextBinding->AttributeChanged(aAttribute, aNameSpaceID,
aRemoveFlag, aNotify);
return NS_OK;
}
return mPrototypeBinding->AttributeChanged(aAttribute, aNameSpaceID, aRemoveFlag, mBoundElement, mContent);
return mPrototypeBinding->AttributeChanged(aAttribute, aNameSpaceID,
aRemoveFlag, mBoundElement,
mContent, aNotify);
}
NS_IMETHODIMP

View File

@ -85,7 +85,8 @@ class nsXBLBinding: public nsIXBLBinding
NS_IMETHOD GetBaseTag(PRInt32* aNameSpaceID, nsIAtom** aResult);
NS_IMETHOD AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID, PRBool aRemoveFlag);
NS_IMETHOD AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID,
PRBool aRemoveFlag, PRBool aNotify);
NS_IMETHOD ExecuteAttachedHandler();
NS_IMETHOD ExecuteDetachedHandler();

View File

@ -550,8 +550,12 @@ nsXBLPrototypeBinding::InstallImplementation(nsIContent* aBoundElement)
}
NS_IMETHODIMP
nsXBLPrototypeBinding::AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID, PRBool aRemoveFlag,
nsIContent* aChangedElement, nsIContent* aAnonymousContent)
nsXBLPrototypeBinding::AttributeChanged(nsIAtom* aAttribute,
PRInt32 aNameSpaceID,
PRBool aRemoveFlag,
nsIContent* aChangedElement,
nsIContent* aAnonymousContent,
PRBool aNotify)
{
if (!mAttributeTable)
return NS_OK;
@ -579,7 +583,7 @@ nsXBLPrototypeBinding::AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceI
xblAttr->GetDstAttribute(getter_AddRefs(dstAttr));
if (aRemoveFlag)
realElement->UnsetAttr(aNameSpaceID, dstAttr, PR_TRUE);
realElement->UnsetAttr(aNameSpaceID, dstAttr, aNotify);
else {
PRBool attrPresent = PR_TRUE;
nsAutoString value;
@ -601,7 +605,7 @@ nsXBLPrototypeBinding::AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceI
}
if (attrPresent)
realElement->SetAttr(aNameSpaceID, dstAttr, value, PR_TRUE);
realElement->SetAttr(aNameSpaceID, dstAttr, value, aNotify);
}
// See if we're the <html> tag in XUL, and see if value is being
@ -614,7 +618,7 @@ nsXBLPrototypeBinding::AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceI
PRInt32 childCount;
realElement->ChildCount(childCount);
for (PRInt32 i = 0; i < childCount; i++)
realElement->RemoveChildAt(0, PR_TRUE);
realElement->RemoveChildAt(0, aNotify);
if (!aRemoveFlag) {
// Construct a new text node and insert it.

View File

@ -94,8 +94,9 @@ class nsXBLPrototypeBinding: public nsIXBLPrototypeBinding, public nsSupportsWea
NS_IMETHOD SetImplementation(nsXBLProtoImpl* aImpl) { mImplementation = aImpl; return NS_OK; };
NS_IMETHOD InstallImplementation(nsIContent* aBoundElement);
NS_IMETHOD AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID, PRBool aRemoveFlag,
nsIContent* aChangedElement, nsIContent* aAnonymousContent);
NS_IMETHOD AttributeChanged(nsIAtom* aAttribute, PRInt32 aNameSpaceID,
PRBool aRemoveFlag, nsIContent* aChangedElement,
nsIContent* aAnonymousContent, PRBool aNotify);
NS_IMETHOD SetBasePrototype(nsIXBLPrototypeBinding* aBinding);
NS_IMETHOD GetBasePrototype(nsIXBLPrototypeBinding** aResult);

View File

@ -2692,7 +2692,7 @@ nsXULElement::SetAttr(nsINodeInfo* aNodeInfo,
bindingManager->GetBinding(NS_STATIC_CAST(nsIStyledContent*, this), getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(attrName, attrns, PR_FALSE);
binding->AttributeChanged(attrName, attrns, PR_FALSE, aNotify);
if (HasMutationListeners(NS_STATIC_CAST(nsIStyledContent*, this), NS_EVENT_BITS_MUTATION_ATTRMODIFIED)) {
nsCOMPtr<nsIDOMEventTarget> node(do_QueryInterface(NS_STATIC_CAST(nsIStyledContent*, this)));
@ -2993,7 +2993,7 @@ nsXULElement::UnsetAttr(PRInt32 aNameSpaceID,
nsCOMPtr<nsIXBLBinding> binding;
bindingManager->GetBinding(NS_STATIC_CAST(nsIStyledContent*, this), getter_AddRefs(binding));
if (binding)
binding->AttributeChanged(aName, aNameSpaceID, PR_TRUE);
binding->AttributeChanged(aName, aNameSpaceID, PR_TRUE, aNotify);
if (aNotify) {
mDocument->AttributeChanged(this, aNameSpaceID, aName,