From 104506ddb51511ba70979e91fd24edeb4e55fd17 Mon Sep 17 00:00:00 2001 From: "dbaron%dbaron.org" Date: Sat, 22 Feb 2003 19:15:46 +0000 Subject: [PATCH] Fix dynamic change bugs by making HTMLColorRule immutable. b=99850 r+sr=bzbarsky git-svn-id: svn://10.0.0.236/trunk@138213 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/style/src/nsHTMLStyleSheet.cpp | 51 ++++++++++++------- mozilla/layout/style/nsHTMLStyleSheet.cpp | 51 ++++++++++++------- 2 files changed, 66 insertions(+), 36 deletions(-) diff --git a/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp b/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp index 6eb3c335af5..0550c538a06 100644 --- a/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp @@ -1154,13 +1154,18 @@ HTMLStyleSheetImpl::GetVisitedLinkColor(nscolor& aColor) NS_IMETHODIMP HTMLStyleSheetImpl::SetLinkColor(nscolor aColor) { - if (!mLinkRule) { - mLinkRule = new HTMLColorRule(this); - if (!mLinkRule) { - return NS_ERROR_OUT_OF_MEMORY; - } - NS_ADDREF(mLinkRule); + if (mLinkRule) { + if (mLinkRule->mColor == aColor) + return NS_OK; + mLinkRule->mSheet = nsnull; + NS_RELEASE(mLinkRule); } + + mLinkRule = new HTMLColorRule(this); + if (!mLinkRule) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(mLinkRule); + mLinkRule->mColor = aColor; return NS_OK; } @@ -1169,13 +1174,18 @@ HTMLStyleSheetImpl::SetLinkColor(nscolor aColor) NS_IMETHODIMP HTMLStyleSheetImpl::SetActiveLinkColor(nscolor aColor) { - if (!mActiveRule) { - mActiveRule = new HTMLColorRule(this); - if (!mActiveRule) { - return NS_ERROR_OUT_OF_MEMORY; - } - NS_ADDREF(mActiveRule); + if (mActiveRule) { + if (mActiveRule->mColor == aColor) + return NS_OK; + mActiveRule->mSheet = nsnull; + NS_RELEASE(mActiveRule); } + + mActiveRule = new HTMLColorRule(this); + if (!mActiveRule) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(mActiveRule); + mActiveRule->mColor = aColor; return NS_OK; } @@ -1183,13 +1193,18 @@ HTMLStyleSheetImpl::SetActiveLinkColor(nscolor aColor) NS_IMETHODIMP HTMLStyleSheetImpl::SetVisitedLinkColor(nscolor aColor) { - if (!mVisitedRule) { - mVisitedRule = new HTMLColorRule(this); - if (!mVisitedRule) { - return NS_ERROR_OUT_OF_MEMORY; - } - NS_ADDREF(mVisitedRule); + if (mVisitedRule) { + if (mVisitedRule->mColor == aColor) + return NS_OK; + mVisitedRule->mSheet = nsnull; + NS_RELEASE(mVisitedRule); } + + mVisitedRule = new HTMLColorRule(this); + if (!mVisitedRule) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(mVisitedRule); + mVisitedRule->mColor = aColor; return NS_OK; } diff --git a/mozilla/layout/style/nsHTMLStyleSheet.cpp b/mozilla/layout/style/nsHTMLStyleSheet.cpp index 6eb3c335af5..0550c538a06 100644 --- a/mozilla/layout/style/nsHTMLStyleSheet.cpp +++ b/mozilla/layout/style/nsHTMLStyleSheet.cpp @@ -1154,13 +1154,18 @@ HTMLStyleSheetImpl::GetVisitedLinkColor(nscolor& aColor) NS_IMETHODIMP HTMLStyleSheetImpl::SetLinkColor(nscolor aColor) { - if (!mLinkRule) { - mLinkRule = new HTMLColorRule(this); - if (!mLinkRule) { - return NS_ERROR_OUT_OF_MEMORY; - } - NS_ADDREF(mLinkRule); + if (mLinkRule) { + if (mLinkRule->mColor == aColor) + return NS_OK; + mLinkRule->mSheet = nsnull; + NS_RELEASE(mLinkRule); } + + mLinkRule = new HTMLColorRule(this); + if (!mLinkRule) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(mLinkRule); + mLinkRule->mColor = aColor; return NS_OK; } @@ -1169,13 +1174,18 @@ HTMLStyleSheetImpl::SetLinkColor(nscolor aColor) NS_IMETHODIMP HTMLStyleSheetImpl::SetActiveLinkColor(nscolor aColor) { - if (!mActiveRule) { - mActiveRule = new HTMLColorRule(this); - if (!mActiveRule) { - return NS_ERROR_OUT_OF_MEMORY; - } - NS_ADDREF(mActiveRule); + if (mActiveRule) { + if (mActiveRule->mColor == aColor) + return NS_OK; + mActiveRule->mSheet = nsnull; + NS_RELEASE(mActiveRule); } + + mActiveRule = new HTMLColorRule(this); + if (!mActiveRule) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(mActiveRule); + mActiveRule->mColor = aColor; return NS_OK; } @@ -1183,13 +1193,18 @@ HTMLStyleSheetImpl::SetActiveLinkColor(nscolor aColor) NS_IMETHODIMP HTMLStyleSheetImpl::SetVisitedLinkColor(nscolor aColor) { - if (!mVisitedRule) { - mVisitedRule = new HTMLColorRule(this); - if (!mVisitedRule) { - return NS_ERROR_OUT_OF_MEMORY; - } - NS_ADDREF(mVisitedRule); + if (mVisitedRule) { + if (mVisitedRule->mColor == aColor) + return NS_OK; + mVisitedRule->mSheet = nsnull; + NS_RELEASE(mVisitedRule); } + + mVisitedRule = new HTMLColorRule(this); + if (!mVisitedRule) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(mVisitedRule); + mVisitedRule->mColor = aColor; return NS_OK; }