diff --git a/mozilla/editor/base/nsInterfaceState.cpp b/mozilla/editor/base/nsInterfaceState.cpp index 972ad1a1018..f241d7ee8ef 100644 --- a/mozilla/editor/base/nsInterfaceState.cpp +++ b/mozilla/editor/base/nsInterfaceState.cpp @@ -29,6 +29,7 @@ #include "nsIDiskDocument.h" #include "nsIDOMElement.h" #include "nsIDOMSelection.h" +#include "nsIDOMAttr.h" #include "nsIEditor.h" #include "nsIHTMLEditor.h" @@ -129,11 +130,11 @@ nsInterfaceState::NotifySelectionChanged() // we don't really care if any of these fail. // update bold - rv = UpdateTextState("b", "Editor:Style:IsBold", "bold", mBoldState); + rv = UpdateTextState("b", "Editor:Bold", "bold", mBoldState); // update italic - rv = UpdateTextState("i", "Editor:Style:IsItalic", "italic", mItalicState); + rv = UpdateTextState("i", "Editor:Italic", "italic", mItalicState); // update underline - rv = UpdateTextState("u", "Editor:Style:IsUnderline", "underline", mUnderlineState); + rv = UpdateTextState("u", "Editor:Underline", "underline", mUnderlineState); // udpate the font face rv = UpdateFontFace("Editor:Font:Face", "font", mFontString); @@ -263,8 +264,11 @@ nsInterfaceState::UpdateDirtyState(PRBool aNowDirty) { if (mDirtyState != aNowDirty) { - nsresult rv = SetNodeAttribute("Editor:Document:Dirty", "dirty", aNowDirty ? "true" : "false"); + nsresult rv; // = SetNodeAttribute("Editor:Save", "disabled", aNowDirty ? "true" : "false"); + + rv = SetNodeAttribute("Editor:Save", "disabled", aNowDirty ? "false" : "true"); if (NS_FAILED(rv)) return rv; + mDirtyState = aNowDirty; } @@ -302,6 +306,36 @@ nsInterfaceState::SetNodeAttribute(const char* nodeID, const char* attributeName } +nsresult +nsInterfaceState::UnsetNodeAttribute(const char* nodeID, const char* attributeName) +{ + nsresult rv = NS_OK; + + if (!mWebShell) + return NS_ERROR_NOT_INITIALIZED; + + nsCOMPtr cv; + rv = mWebShell->GetContentViewer(getter_AddRefs(cv)); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr docViewer = do_QueryInterface(cv, &rv); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr chromeDoc; + rv = docViewer->GetDocument(*getter_AddRefs(chromeDoc)); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr xulDoc = do_QueryInterface(chromeDoc, &rv); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr elem; + rv = xulDoc->GetElementById( nodeID, getter_AddRefs(elem) ); + if (NS_FAILED(rv) || !elem) return rv; + + return elem->RemoveAttribute(attributeName); +} + + nsresult NS_NewInterfaceState(nsIHTMLEditor* aEditor, nsIWebShell* aWebShell, nsIDOMSelectionListener** aInstancePtrResult) { nsInterfaceState* newThang = new nsInterfaceState; diff --git a/mozilla/editor/base/nsInterfaceState.h b/mozilla/editor/base/nsInterfaceState.h index 7eae2cf3431..a7cdf28c302 100644 --- a/mozilla/editor/base/nsInterfaceState.h +++ b/mozilla/editor/base/nsInterfaceState.h @@ -56,6 +56,7 @@ protected: }; nsresult SetNodeAttribute(const char* nodeID, const char* attributeName, const nsString& newValue); + nsresult UnsetNodeAttribute(const char* nodeID, const char* attributeName); nsresult UpdateParagraphState(const char* observerName, const char* attributeName, nsString& ioParaFormat); nsresult UpdateListState(const char* observerName); diff --git a/mozilla/editor/composer/src/nsInterfaceState.cpp b/mozilla/editor/composer/src/nsInterfaceState.cpp index 972ad1a1018..f241d7ee8ef 100644 --- a/mozilla/editor/composer/src/nsInterfaceState.cpp +++ b/mozilla/editor/composer/src/nsInterfaceState.cpp @@ -29,6 +29,7 @@ #include "nsIDiskDocument.h" #include "nsIDOMElement.h" #include "nsIDOMSelection.h" +#include "nsIDOMAttr.h" #include "nsIEditor.h" #include "nsIHTMLEditor.h" @@ -129,11 +130,11 @@ nsInterfaceState::NotifySelectionChanged() // we don't really care if any of these fail. // update bold - rv = UpdateTextState("b", "Editor:Style:IsBold", "bold", mBoldState); + rv = UpdateTextState("b", "Editor:Bold", "bold", mBoldState); // update italic - rv = UpdateTextState("i", "Editor:Style:IsItalic", "italic", mItalicState); + rv = UpdateTextState("i", "Editor:Italic", "italic", mItalicState); // update underline - rv = UpdateTextState("u", "Editor:Style:IsUnderline", "underline", mUnderlineState); + rv = UpdateTextState("u", "Editor:Underline", "underline", mUnderlineState); // udpate the font face rv = UpdateFontFace("Editor:Font:Face", "font", mFontString); @@ -263,8 +264,11 @@ nsInterfaceState::UpdateDirtyState(PRBool aNowDirty) { if (mDirtyState != aNowDirty) { - nsresult rv = SetNodeAttribute("Editor:Document:Dirty", "dirty", aNowDirty ? "true" : "false"); + nsresult rv; // = SetNodeAttribute("Editor:Save", "disabled", aNowDirty ? "true" : "false"); + + rv = SetNodeAttribute("Editor:Save", "disabled", aNowDirty ? "false" : "true"); if (NS_FAILED(rv)) return rv; + mDirtyState = aNowDirty; } @@ -302,6 +306,36 @@ nsInterfaceState::SetNodeAttribute(const char* nodeID, const char* attributeName } +nsresult +nsInterfaceState::UnsetNodeAttribute(const char* nodeID, const char* attributeName) +{ + nsresult rv = NS_OK; + + if (!mWebShell) + return NS_ERROR_NOT_INITIALIZED; + + nsCOMPtr cv; + rv = mWebShell->GetContentViewer(getter_AddRefs(cv)); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr docViewer = do_QueryInterface(cv, &rv); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr chromeDoc; + rv = docViewer->GetDocument(*getter_AddRefs(chromeDoc)); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr xulDoc = do_QueryInterface(chromeDoc, &rv); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr elem; + rv = xulDoc->GetElementById( nodeID, getter_AddRefs(elem) ); + if (NS_FAILED(rv) || !elem) return rv; + + return elem->RemoveAttribute(attributeName); +} + + nsresult NS_NewInterfaceState(nsIHTMLEditor* aEditor, nsIWebShell* aWebShell, nsIDOMSelectionListener** aInstancePtrResult) { nsInterfaceState* newThang = new nsInterfaceState; diff --git a/mozilla/editor/composer/src/nsInterfaceState.h b/mozilla/editor/composer/src/nsInterfaceState.h index 7eae2cf3431..a7cdf28c302 100644 --- a/mozilla/editor/composer/src/nsInterfaceState.h +++ b/mozilla/editor/composer/src/nsInterfaceState.h @@ -56,6 +56,7 @@ protected: }; nsresult SetNodeAttribute(const char* nodeID, const char* attributeName, const nsString& newValue); + nsresult UnsetNodeAttribute(const char* nodeID, const char* attributeName); nsresult UpdateParagraphState(const char* observerName, const char* attributeName, nsString& ioParaFormat); nsresult UpdateListState(const char* observerName);