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:
parent
3a44e6c92a
commit
ac193497c0
@ -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,
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user