diff options
-rw-r--r-- | dom/html/nsTextEditorState.cpp | 17 | ||||
-rw-r--r-- | dom/html/nsTextEditorState.h | 5 | ||||
-rw-r--r-- | editor/libeditor/HTMLEditor.cpp | 10 | ||||
-rw-r--r-- | editor/libeditor/TextEditRules.cpp | 9 | ||||
-rw-r--r-- | editor/libeditor/TextEditRules.h | 2 | ||||
-rw-r--r-- | editor/libeditor/TextEditor.cpp | 6 | ||||
-rw-r--r-- | editor/libeditor/nsIEditRules.h | 2 |
7 files changed, 33 insertions, 18 deletions
diff --git a/dom/html/nsTextEditorState.cpp b/dom/html/nsTextEditorState.cpp index 25be6016c..812a8d0b6 100644 --- a/dom/html/nsTextEditorState.cpp +++ b/dom/html/nsTextEditorState.cpp @@ -2214,6 +2214,23 @@ nsTextEditorState::SetValue(const nsAString& aValue, uint32_t aFlags) return true; } +bool +nsTextEditorState::HasNonEmptyValue() +{ + if (mEditor && mBoundFrame && mEditorInitialized && + !mIsCommittingComposition) { + bool empty; + nsresult rv = mEditor->GetDocumentIsEmpty(&empty); + if (NS_SUCCEEDED(rv)) { + return !empty; + } + } + + nsAutoString value; + GetValue(value, true); + return !value.IsEmpty(); +} + void nsTextEditorState::InitializeKeyboardEventListeners() { diff --git a/dom/html/nsTextEditorState.h b/dom/html/nsTextEditorState.h index caf5e8eed..77d12e81a 100644 --- a/dom/html/nsTextEditorState.h +++ b/dom/html/nsTextEditorState.h @@ -157,6 +157,11 @@ public: }; MOZ_MUST_USE bool SetValue(const nsAString& aValue, uint32_t aFlags); void GetValue(nsAString& aValue, bool aIgnoreWrap) const; + bool HasNonEmptyValue(); + // The following methods are for textarea element to use whether default + // value or not. + // XXX We might have to add assertion when it is into editable, + // or reconsider fixing bug 597525 to remove these. void EmptyValue() { if (mValue) mValue->Truncate(); } bool IsEmpty() const { return mValue ? mValue->IsEmpty() : true; } diff --git a/editor/libeditor/HTMLEditor.cpp b/editor/libeditor/HTMLEditor.cpp index 04a710cde..c2f0bdc6d 100644 --- a/editor/libeditor/HTMLEditor.cpp +++ b/editor/libeditor/HTMLEditor.cpp @@ -3530,15 +3530,11 @@ HTMLEditor::SelectEntireDocument(Selection* aSelection) // Protect the edit rules object from dying nsCOMPtr<nsIEditRules> rules(mRules); - // get editor root node - nsCOMPtr<nsIDOMElement> rootElement = do_QueryInterface(GetRoot()); - // is doc empty? - bool bDocIsEmpty; - nsresult rv = rules->DocumentIsEmpty(&bDocIsEmpty); - NS_ENSURE_SUCCESS(rv, rv); + if (rules->DocumentIsEmpty()) { + // get editor root node + Element* rootElement = GetRoot(); - if (bDocIsEmpty) { // if its empty dont select entire doc - that would select the bogus node return aSelection->Collapse(rootElement, 0); } diff --git a/editor/libeditor/TextEditRules.cpp b/editor/libeditor/TextEditRules.cpp index 8f8f34e8b..35d4a2f3d 100644 --- a/editor/libeditor/TextEditRules.cpp +++ b/editor/libeditor/TextEditRules.cpp @@ -329,13 +329,10 @@ TextEditRules::DidDoAction(Selection* aSelection, } } -NS_IMETHODIMP -TextEditRules::DocumentIsEmpty(bool* aDocumentIsEmpty) +NS_IMETHODIMP_(bool) +TextEditRules::DocumentIsEmpty() { - NS_ENSURE_TRUE(aDocumentIsEmpty, NS_ERROR_NULL_POINTER); - - *aDocumentIsEmpty = (mBogusNode != nullptr); - return NS_OK; + return (mBogusNode != nullptr); } void diff --git a/editor/libeditor/TextEditRules.h b/editor/libeditor/TextEditRules.h index 6d4915f15..208e14d23 100644 --- a/editor/libeditor/TextEditRules.h +++ b/editor/libeditor/TextEditRules.h @@ -66,7 +66,7 @@ public: bool* aCancel, bool* aHandled) override; NS_IMETHOD DidDoAction(Selection* aSelection, RulesInfo* aInfo, nsresult aResult) override; - NS_IMETHOD DocumentIsEmpty(bool* aDocumentIsEmpty) override; + NS_IMETHOD_(bool) DocumentIsEmpty() override; NS_IMETHOD DocumentModified() override; protected: diff --git a/editor/libeditor/TextEditor.cpp b/editor/libeditor/TextEditor.cpp index 9d07c198b..c3cfa4a72 100644 --- a/editor/libeditor/TextEditor.cpp +++ b/editor/libeditor/TextEditor.cpp @@ -913,7 +913,8 @@ TextEditor::GetDocumentIsEmpty(bool* aDocumentIsEmpty) // Protect the edit rules object from dying nsCOMPtr<nsIEditRules> rules(mRules); - return rules->DocumentIsEmpty(aDocumentIsEmpty); + *aDocumentIsEmpty = rules->DocumentIsEmpty(); + return NS_OK; } NS_IMETHODIMP @@ -1580,8 +1581,7 @@ TextEditor::SelectEntireDocument(Selection* aSelection) nsCOMPtr<nsIEditRules> rules(mRules); // is doc empty? - bool bDocIsEmpty; - if (NS_SUCCEEDED(rules->DocumentIsEmpty(&bDocIsEmpty)) && bDocIsEmpty) { + if (rules->DocumentIsEmpty()) { // get root node nsCOMPtr<nsIDOMElement> rootElement = do_QueryInterface(GetRoot()); NS_ENSURE_TRUE(rootElement, NS_ERROR_FAILURE); diff --git a/editor/libeditor/nsIEditRules.h b/editor/libeditor/nsIEditRules.h index b186895ae..a493145cc 100644 --- a/editor/libeditor/nsIEditRules.h +++ b/editor/libeditor/nsIEditRules.h @@ -59,7 +59,7 @@ public: bool* aHandled) = 0; NS_IMETHOD DidDoAction(mozilla::dom::Selection* aSelection, mozilla::RulesInfo* aInfo, nsresult aResult) = 0; - NS_IMETHOD DocumentIsEmpty(bool* aDocumentIsEmpty) = 0; + NS_IMETHOD_(bool) DocumentIsEmpty() = 0; NS_IMETHOD DocumentModified() = 0; }; |