mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-06 07:48:38 +09:00
Issue #2135 - Bug 1066965: Make contentEditable and spellchecking to work in Shadow DOM
This commit is contained in:
parent
b2c77e5eda
commit
010db07bf3
10 changed files with 60 additions and 30 deletions
|
|
@ -682,7 +682,7 @@ nsEditorSpellCheck::UpdateCurrentDictionary(nsIEditorSpellCheckCallback* aCallba
|
|||
RefPtr<DictionaryFetcher> fetcher =
|
||||
new DictionaryFetcher(this, aCallback, mDictionaryFetcherGroup);
|
||||
rootContent->GetLang(fetcher->mRootContentLang);
|
||||
nsCOMPtr<nsIDocument> doc = rootContent->GetUncomposedDoc();
|
||||
nsCOMPtr<nsIDocument> doc = rootContent->GetComposedDoc();
|
||||
NS_ENSURE_STATE(doc);
|
||||
doc->GetContentLanguage(fetcher->mRootDocContentLang);
|
||||
|
||||
|
|
|
|||
|
|
@ -1114,7 +1114,7 @@ EditorEventListener::Focus(WidgetEvent* aFocusEvent)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target = aFocusEvent->GetDOMEventTarget();
|
||||
nsCOMPtr<nsIDOMEventTarget> target = aFocusEvent->GetOriginalDOMEventTarget();
|
||||
nsCOMPtr<nsINode> node = do_QueryInterface(target);
|
||||
NS_ENSURE_TRUE(node, NS_ERROR_UNEXPECTED);
|
||||
|
||||
|
|
@ -1126,13 +1126,15 @@ EditorEventListener::Focus(WidgetEvent* aFocusEvent)
|
|||
}
|
||||
|
||||
if (node->IsNodeOfType(nsINode::eCONTENT)) {
|
||||
nsIContent* content =
|
||||
node->AsContent()->FindFirstNonChromeOnlyAccessContent();
|
||||
// XXX If the focus event target is a form control in contenteditable
|
||||
// element, perhaps, the parent HTML editor should do nothing by this
|
||||
// handler. However, FindSelectionRoot() returns the root element of the
|
||||
// contenteditable editor. So, the editableRoot value is invalid for
|
||||
// the plain text editor, and it will be set to the wrong limiter of
|
||||
// the selection. However, fortunately, actual bugs are not found yet.
|
||||
nsCOMPtr<nsIContent> editableRoot = editorBase->FindSelectionRoot(node);
|
||||
nsCOMPtr<nsIContent> editableRoot = editorBase->FindSelectionRoot(content);
|
||||
|
||||
// make sure that the element is really focused in case an earlier
|
||||
// listener in the chain changed the focus.
|
||||
|
|
|
|||
|
|
@ -8013,7 +8013,7 @@ HTMLEditRules::ConfirmSelectionInBody()
|
|||
|
||||
// check that selNode is inside body
|
||||
while (temp && !temp->IsHTMLElement(nsGkAtoms::body)) {
|
||||
temp = temp->GetParentNode();
|
||||
temp = temp->GetParentOrHostNode();
|
||||
}
|
||||
|
||||
// if we aren't in the body, force the issue
|
||||
|
|
@ -8033,7 +8033,7 @@ HTMLEditRules::ConfirmSelectionInBody()
|
|||
|
||||
// check that selNode is inside body
|
||||
while (temp && !temp->IsHTMLElement(nsGkAtoms::body)) {
|
||||
temp = temp->GetParentNode();
|
||||
temp = temp->GetParentOrHostNode();
|
||||
}
|
||||
|
||||
// if we aren't in the body, force the issue
|
||||
|
|
|
|||
|
|
@ -381,13 +381,14 @@ HTMLEditor::FindSelectionRoot(nsINode* aNode)
|
|||
aNode->IsNodeOfType(nsINode::eCONTENT),
|
||||
"aNode must be content or document node");
|
||||
|
||||
nsCOMPtr<nsIDocument> doc = aNode->GetUncomposedDoc();
|
||||
nsCOMPtr<nsIDocument> doc = aNode->GetComposedDoc();
|
||||
if (!doc) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIContent> content;
|
||||
if (doc->HasFlag(NODE_IS_EDITABLE) || !aNode->IsContent()) {
|
||||
if (aNode->IsInUncomposedDoc() &&
|
||||
doc->HasFlag(NODE_IS_EDITABLE) || !aNode->IsContent()) {
|
||||
content = doc->GetRootElement();
|
||||
return content.forget();
|
||||
}
|
||||
|
|
@ -5135,7 +5136,11 @@ HTMLEditor::IsAcceptableInputEvent(WidgetGUIEvent* aGUIEvent)
|
|||
return true;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target = aGUIEvent->GetDOMEventTarget();
|
||||
nsCOMPtr<nsIDOMEventTarget> target = aGUIEvent->GetOriginalDOMEventTarget();
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(target);
|
||||
if (content) {
|
||||
target = content->FindFirstNonChromeOnlyAccessContent();
|
||||
}
|
||||
NS_ENSURE_TRUE(target, false);
|
||||
|
||||
nsCOMPtr<nsIDocument> document = GetDocument();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue