Bug 1123067 - part 1, Add the range even if it's inside a user-select:none region in case it's inside an editable node (it represents the caret). r=smaug

This commit is contained in:
Mats Palmgren 2015-02-03 23:54:31 +00:00
parent 27f5668308
commit ad6e4bdcbe

View File

@ -3518,6 +3518,16 @@ Selection::AddItem(nsRange* aItem, int32_t* aOutIndex)
if (mApplyUserSelectStyle) {
nsAutoTArray<nsRefPtr<nsRange>, 4> rangesToAdd;
aItem->ExcludeNonSelectableNodes(&rangesToAdd);
if (rangesToAdd.IsEmpty()) {
ErrorResult err;
nsINode* node = aItem->GetStartContainer(err);
if (node && node->IsContent() && node->AsContent()->GetEditingHost()) {
// A contenteditable node with user-select:none, for example.
// Allow it to have a collapsed selection (for the caret).
aItem->Collapse(GetDirection() == eDirPrevious);
rangesToAdd.AppendElement(aItem);
}
}
for (size_t i = 0; i < rangesToAdd.Length(); ++i) {
nsresult rv = AddItemInternal(rangesToAdd[i], aOutIndex);
NS_ENSURE_SUCCESS(rv, rv);