Bug 1360154 - nsIPlaintextEditor might have to have hasText property for UpdateOverlayTextVisibility

* DocumentIsBody should return bool, not nsresult
* Add fast path to check whether valus is emtpy

Tag #1375
This commit is contained in:
Matt A. Tobin 2020-04-17 07:43:03 -04:00 committed by Roy Tam
commit a6f048fc42
7 changed files with 33 additions and 18 deletions

View file

@ -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()
{

View file

@ -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; }

View file

@ -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);
}

View file

@ -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

View file

@ -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:

View file

@ -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);

View file

@ -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;
};