diff --git a/content/xul/content/src/nsXULElement.cpp b/content/xul/content/src/nsXULElement.cpp index 7641579fc408..73dfcc15fc88 100644 --- a/content/xul/content/src/nsXULElement.cpp +++ b/content/xul/content/src/nsXULElement.cpp @@ -639,9 +639,6 @@ nsXULElement::QueryInterface(REFNSIID iid, void** result) else if (iid.Equals(kIJSScriptObjectIID)) { *result = NS_STATIC_CAST(nsIJSScriptObject*, this); } - else if (iid.Equals(NS_GET_IID(nsIStyleRule))) { - *result = NS_STATIC_CAST(nsIStyleRule*, this); - } else if (iid.Equals(NS_GET_IID(nsIChromeEventHandler))) { *result = NS_STATIC_CAST(nsIChromeEventHandler*, this); } @@ -3982,27 +3979,6 @@ nsXULElement::HasClass(nsIAtom* aClass) const NS_IMETHODIMP nsXULElement::GetContentStyleRules(nsISupportsArray* aRules) { - // For treecols, we support proportional widths using the WIDTH attribute. - if (NodeInfo()->Equals(kTreeColAtom)) { - // If the width attribute is set, then we should return ourselves as a style - // rule. - nsCOMPtr widthAtom = dont_AddRef(NS_NewAtom("width")); - nsAutoString width; - GetAttribute(kNameSpaceID_None, widthAtom, width); - - nsCOMPtr hiddenAtom = dont_AddRef(NS_NewAtom("hidden")); - nsAutoString hidden; - GetAttribute(kNameSpaceID_None, hiddenAtom, hidden); - - if (!width.IsEmpty() || !hidden.IsEmpty()) { - // XXX This should ultimately be factored out if we find that - // a bunch of XUL widgets are implementing attributes that need - // to be mapped into style. I'm hoping treecol will be the only - // one that needs to do this though. - // QI ourselves to be an nsIStyleRule. - aRules->AppendElement((nsIStyleRule*)this); - } - } return NS_OK; } @@ -4316,86 +4292,6 @@ nsXULElement::RemoveFocus(nsIPresContext* aPresContext) return NS_OK; } -// nsIStyleRule interface -NS_IMETHODIMP -nsXULElement::GetStyleSheet(nsIStyleSheet*& aSheet) const -{ - nsresult rv = NS_OK; - aSheet = nsnull; - if (mDocument) { - nsCOMPtr container = do_QueryInterface(mDocument); - if (container) { - nsCOMPtr htmlStyleSheet; - rv = container->GetAttributeStyleSheet(getter_AddRefs(htmlStyleSheet)); - if (NS_FAILED(rv)) - return rv; - nsCOMPtr styleSheet = do_QueryInterface(htmlStyleSheet); - aSheet = styleSheet; - NS_IF_ADDREF(aSheet); - } - } - return rv; -} - -NS_IMETHODIMP -nsXULElement::GetStrength(PRInt32& aStrength) const -{ - return NS_OK; -} - -NS_IMETHODIMP -nsXULElement::MapFontStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresContext) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsXULElement::MapStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresContext) -{ - if (NodeInfo()->Equals(kTreeColAtom)) { - // Should only get called if we had a width attribute set. Retrieve it. - nsAutoString widthVal; - nsAutoString hiddenVal; - GetAttribute(NS_ConvertASCIItoUCS2("width"), widthVal); - GetAttribute(NS_ConvertASCIItoUCS2("hidden"), hiddenVal); - if (!hiddenVal.IsEmpty()) - widthVal.AssignWithConversion("0*"); - - if (!widthVal.IsEmpty()) { - PRInt32 intVal; - float floatVal; - nsHTMLUnit unit = eHTMLUnit_Null; - if (ParseNumericValue(widthVal, intVal, floatVal, unit)) { - // Success. Update the width for the style context. - nsStylePosition* position = (nsStylePosition*) - aContext->GetMutableStyleData(eStyleStruct_Position); - switch (unit) { - case eHTMLUnit_Percent: - position->mWidth.mUnit = eStyleUnit_Percent; - position->mWidth.mValue.mFloat = floatVal; - break; - - case eHTMLUnit_Pixel: - float p2t; - aPresContext->GetScaledPixelsToTwips(&p2t); - position->mWidth.mUnit = eStyleUnit_Coord; - position->mWidth.mValue.mInt = NSIntPixelsToTwips(intVal, p2t); - break; - - case eHTMLUnit_Proportional: - position->mWidth.mUnit = eStyleUnit_Proportional; - position->mWidth.mValue.mInt = intVal; - break; - default: - break; - } - } - } - } - - return NS_OK; -} - void nsXULElement::SizeOf(nsISizeOfHandler *aSizeOfHandler, PRUint32 &aSize) { // XXX - implement this if you want the sizes of XUL style rules @@ -4403,35 +4299,6 @@ void nsXULElement::SizeOf(nsISizeOfHandler *aSizeOfHandler, PRUint32 &aSize) return; } -PRBool -nsXULElement::ParseNumericValue(const nsString& aString, - PRInt32& aIntValue, - float& aFloatValue, - nsHTMLUnit& aValueUnit) -{ - nsAutoString tmp(aString); - tmp.CompressWhitespace(PR_TRUE, PR_TRUE); - PRInt32 ec, val = tmp.ToInteger(&ec); - if (NS_OK == ec) { - if (val < 0) val = 0; - if (tmp.Last() == '%') {/* XXX not 100% compatible with ebina's code */ - if (val > 100) val = 100; - aFloatValue = (float(val)/100.0f); - aValueUnit = eHTMLUnit_Percent; - } - else if (tmp.Last() == '*') { - aIntValue = val; - aValueUnit = eHTMLUnit_Proportional; - } - else { - aIntValue = val; - aValueUnit = eHTMLUnit_Pixel; - } - return PR_TRUE; - } - return PR_FALSE; -} - nsresult nsXULElement::AddPopupListener(nsIAtom* aName) diff --git a/content/xul/content/src/nsXULElement.h b/content/xul/content/src/nsXULElement.h index 0a91ee7fc748..b1def0e3b699 100644 --- a/content/xul/content/src/nsXULElement.h +++ b/content/xul/content/src/nsXULElement.h @@ -52,7 +52,6 @@ #include "nsIRDFCompositeDataSource.h" #include "nsIRDFResource.h" #include "nsIScriptObjectOwner.h" -#include "nsIStyleRule.h" #include "nsIStyledContent.h" #include "nsIBindingManager.h" #include "nsIXBLBinding.h" @@ -319,7 +318,6 @@ class nsXULElement : public nsIStyledContent, public nsIDOMEventReceiver, public nsIScriptEventHandlerOwner, public nsIJSScriptObject, - public nsIStyleRule, public nsIChromeEventHandler { public: @@ -498,13 +496,6 @@ public: virtual PRBool Convert(JSContext *aContext, JSObject *aObj, jsval aID); virtual void Finalize(JSContext *aContext, JSObject *aObj); - // nsIStyleRule interface. The node implements this to deal with attributes that - // need to be mapped into style contexts (e.g., width in treecols). - NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const; - NS_IMETHOD GetStrength(PRInt32& aStrength) const; - NS_IMETHOD MapFontStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresContext); - NS_IMETHOD MapStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresContext); - virtual void SizeOf(nsISizeOfHandler *aSizeOfHandler, PRUint32 &aSize); // nsIChromeEventHandler @@ -525,12 +516,6 @@ protected: static nsresult ExecuteJSCode(nsIDOMElement* anElement, nsEvent* aEvent); - // Used with treecol width attributes - static PRBool ParseNumericValue(const nsString& aString, - PRInt32& aIntValue, - float& aFloatValue, - nsHTMLUnit& aValueUnit); - // Static helpers static nsresult GetElementsByTagName(nsIDOMNode* aNode, diff --git a/layout/xul/base/src/nsBox.cpp b/layout/xul/base/src/nsBox.cpp index 470bfc549d12..9198e5a17e03 100644 --- a/layout/xul/base/src/nsBox.cpp +++ b/layout/xul/base/src/nsBox.cpp @@ -281,6 +281,11 @@ nsBox::MarkStyleChange(nsBoxLayoutState& aState) // iterate through all children making them dirty MarkChildrenStyleChange(); + nsCOMPtr layout; + GetLayoutManager(getter_AddRefs(layout)); + if (layout) + layout->BecameDirty(this, aState); + nsIBox* parent = nsnull; GetParentBox(&parent); if (parent) diff --git a/layout/xul/base/src/nsObeliskLayout.cpp b/layout/xul/base/src/nsObeliskLayout.cpp index 1578b651b63e..af59b5f4ea41 100644 --- a/layout/xul/base/src/nsObeliskLayout.cpp +++ b/layout/xul/base/src/nsObeliskLayout.cpp @@ -281,6 +281,7 @@ nsObeliskLayout::BecameDirty(nsIBox* aBox, nsBoxLayoutState& aState) parent->DesecrateMonuments(aBox, aState); */ + UpdateMonuments(aBox, aState); if (mOtherMonumentList) mOtherMonumentList->MarkDirty(aState); diff --git a/rdf/content/src/nsXULElement.cpp b/rdf/content/src/nsXULElement.cpp index 7641579fc408..73dfcc15fc88 100644 --- a/rdf/content/src/nsXULElement.cpp +++ b/rdf/content/src/nsXULElement.cpp @@ -639,9 +639,6 @@ nsXULElement::QueryInterface(REFNSIID iid, void** result) else if (iid.Equals(kIJSScriptObjectIID)) { *result = NS_STATIC_CAST(nsIJSScriptObject*, this); } - else if (iid.Equals(NS_GET_IID(nsIStyleRule))) { - *result = NS_STATIC_CAST(nsIStyleRule*, this); - } else if (iid.Equals(NS_GET_IID(nsIChromeEventHandler))) { *result = NS_STATIC_CAST(nsIChromeEventHandler*, this); } @@ -3982,27 +3979,6 @@ nsXULElement::HasClass(nsIAtom* aClass) const NS_IMETHODIMP nsXULElement::GetContentStyleRules(nsISupportsArray* aRules) { - // For treecols, we support proportional widths using the WIDTH attribute. - if (NodeInfo()->Equals(kTreeColAtom)) { - // If the width attribute is set, then we should return ourselves as a style - // rule. - nsCOMPtr widthAtom = dont_AddRef(NS_NewAtom("width")); - nsAutoString width; - GetAttribute(kNameSpaceID_None, widthAtom, width); - - nsCOMPtr hiddenAtom = dont_AddRef(NS_NewAtom("hidden")); - nsAutoString hidden; - GetAttribute(kNameSpaceID_None, hiddenAtom, hidden); - - if (!width.IsEmpty() || !hidden.IsEmpty()) { - // XXX This should ultimately be factored out if we find that - // a bunch of XUL widgets are implementing attributes that need - // to be mapped into style. I'm hoping treecol will be the only - // one that needs to do this though. - // QI ourselves to be an nsIStyleRule. - aRules->AppendElement((nsIStyleRule*)this); - } - } return NS_OK; } @@ -4316,86 +4292,6 @@ nsXULElement::RemoveFocus(nsIPresContext* aPresContext) return NS_OK; } -// nsIStyleRule interface -NS_IMETHODIMP -nsXULElement::GetStyleSheet(nsIStyleSheet*& aSheet) const -{ - nsresult rv = NS_OK; - aSheet = nsnull; - if (mDocument) { - nsCOMPtr container = do_QueryInterface(mDocument); - if (container) { - nsCOMPtr htmlStyleSheet; - rv = container->GetAttributeStyleSheet(getter_AddRefs(htmlStyleSheet)); - if (NS_FAILED(rv)) - return rv; - nsCOMPtr styleSheet = do_QueryInterface(htmlStyleSheet); - aSheet = styleSheet; - NS_IF_ADDREF(aSheet); - } - } - return rv; -} - -NS_IMETHODIMP -nsXULElement::GetStrength(PRInt32& aStrength) const -{ - return NS_OK; -} - -NS_IMETHODIMP -nsXULElement::MapFontStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresContext) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsXULElement::MapStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresContext) -{ - if (NodeInfo()->Equals(kTreeColAtom)) { - // Should only get called if we had a width attribute set. Retrieve it. - nsAutoString widthVal; - nsAutoString hiddenVal; - GetAttribute(NS_ConvertASCIItoUCS2("width"), widthVal); - GetAttribute(NS_ConvertASCIItoUCS2("hidden"), hiddenVal); - if (!hiddenVal.IsEmpty()) - widthVal.AssignWithConversion("0*"); - - if (!widthVal.IsEmpty()) { - PRInt32 intVal; - float floatVal; - nsHTMLUnit unit = eHTMLUnit_Null; - if (ParseNumericValue(widthVal, intVal, floatVal, unit)) { - // Success. Update the width for the style context. - nsStylePosition* position = (nsStylePosition*) - aContext->GetMutableStyleData(eStyleStruct_Position); - switch (unit) { - case eHTMLUnit_Percent: - position->mWidth.mUnit = eStyleUnit_Percent; - position->mWidth.mValue.mFloat = floatVal; - break; - - case eHTMLUnit_Pixel: - float p2t; - aPresContext->GetScaledPixelsToTwips(&p2t); - position->mWidth.mUnit = eStyleUnit_Coord; - position->mWidth.mValue.mInt = NSIntPixelsToTwips(intVal, p2t); - break; - - case eHTMLUnit_Proportional: - position->mWidth.mUnit = eStyleUnit_Proportional; - position->mWidth.mValue.mInt = intVal; - break; - default: - break; - } - } - } - } - - return NS_OK; -} - void nsXULElement::SizeOf(nsISizeOfHandler *aSizeOfHandler, PRUint32 &aSize) { // XXX - implement this if you want the sizes of XUL style rules @@ -4403,35 +4299,6 @@ void nsXULElement::SizeOf(nsISizeOfHandler *aSizeOfHandler, PRUint32 &aSize) return; } -PRBool -nsXULElement::ParseNumericValue(const nsString& aString, - PRInt32& aIntValue, - float& aFloatValue, - nsHTMLUnit& aValueUnit) -{ - nsAutoString tmp(aString); - tmp.CompressWhitespace(PR_TRUE, PR_TRUE); - PRInt32 ec, val = tmp.ToInteger(&ec); - if (NS_OK == ec) { - if (val < 0) val = 0; - if (tmp.Last() == '%') {/* XXX not 100% compatible with ebina's code */ - if (val > 100) val = 100; - aFloatValue = (float(val)/100.0f); - aValueUnit = eHTMLUnit_Percent; - } - else if (tmp.Last() == '*') { - aIntValue = val; - aValueUnit = eHTMLUnit_Proportional; - } - else { - aIntValue = val; - aValueUnit = eHTMLUnit_Pixel; - } - return PR_TRUE; - } - return PR_FALSE; -} - nsresult nsXULElement::AddPopupListener(nsIAtom* aName) diff --git a/rdf/content/src/nsXULElement.h b/rdf/content/src/nsXULElement.h index 0a91ee7fc748..b1def0e3b699 100644 --- a/rdf/content/src/nsXULElement.h +++ b/rdf/content/src/nsXULElement.h @@ -52,7 +52,6 @@ #include "nsIRDFCompositeDataSource.h" #include "nsIRDFResource.h" #include "nsIScriptObjectOwner.h" -#include "nsIStyleRule.h" #include "nsIStyledContent.h" #include "nsIBindingManager.h" #include "nsIXBLBinding.h" @@ -319,7 +318,6 @@ class nsXULElement : public nsIStyledContent, public nsIDOMEventReceiver, public nsIScriptEventHandlerOwner, public nsIJSScriptObject, - public nsIStyleRule, public nsIChromeEventHandler { public: @@ -498,13 +496,6 @@ public: virtual PRBool Convert(JSContext *aContext, JSObject *aObj, jsval aID); virtual void Finalize(JSContext *aContext, JSObject *aObj); - // nsIStyleRule interface. The node implements this to deal with attributes that - // need to be mapped into style contexts (e.g., width in treecols). - NS_IMETHOD GetStyleSheet(nsIStyleSheet*& aSheet) const; - NS_IMETHOD GetStrength(PRInt32& aStrength) const; - NS_IMETHOD MapFontStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresContext); - NS_IMETHOD MapStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresContext); - virtual void SizeOf(nsISizeOfHandler *aSizeOfHandler, PRUint32 &aSize); // nsIChromeEventHandler @@ -525,12 +516,6 @@ protected: static nsresult ExecuteJSCode(nsIDOMElement* anElement, nsEvent* aEvent); - // Used with treecol width attributes - static PRBool ParseNumericValue(const nsString& aString, - PRInt32& aIntValue, - float& aFloatValue, - nsHTMLUnit& aValueUnit); - // Static helpers static nsresult GetElementsByTagName(nsIDOMNode* aNode, diff --git a/xpfe/global/resources/content/xul.css b/xpfe/global/resources/content/xul.css index cde39f66ff36..4fd17b91c31a 100644 --- a/xpfe/global/resources/content/xul.css +++ b/xpfe/global/resources/content/xul.css @@ -286,6 +286,15 @@ treeitem[open="true"] > treechildren { display: block; } +treecol[hidden="true"] { + display: block; + visibility: collapse; +} + +treecell[hidden="true"] { + display: block; + visibility: collapse; +} /********** Tab widget *********/