41075: forward delete can delete wrong char,
41149: incorrect format feedback when in lists


git-svn-id: svn://10.0.0.236/trunk@71346 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
jfrancis%netscape.com
2000-06-02 06:03:46 +00:00
parent e44968fb93
commit 695763bc3d
4 changed files with 126 additions and 6 deletions

View File

@@ -1042,11 +1042,10 @@ nsHTMLEditRules::WillDeleteSelection(nsIDOMSelection *aSelection,
// is next node a text node?
else if ( mEditor->IsTextNode(nextNode) )
{
// delete last character
// delete first character
nsCOMPtr<nsIDOMCharacterData>nodeAsText;
nodeAsText = do_QueryInterface(nextNode);
nodeAsText->GetLength((PRUint32*)&offset);
res = aSelection->Collapse(nextNode,offset);
res = aSelection->Collapse(nextNode,0);
// just return without setting handled to true.
// default code will take care of actual deletion
return res;
@@ -2415,6 +2414,58 @@ nsHTMLEditRules::GetTableContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *
return res;
}
///////////////////////////////////////////////////////////////////////////
// GetListContent: take a list element and get it's editable, non-list contents
//
nsresult
nsHTMLEditRules::GetListContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *outArrayOfNodes)
{
if (!aNode || !outArrayOfNodes) return NS_ERROR_NULL_POINTER;
// make a array
nsresult res = NS_NewISupportsArray(getter_AddRefs(*outArrayOfNodes));
if (NS_FAILED(res)) return res;
// make an iter
nsCOMPtr<nsIContentIterator> iter;
res = nsComponentManager::CreateInstance(kContentIteratorCID, nsnull,
NS_GET_IID(nsIContentIterator),
getter_AddRefs(iter));
if (NS_FAILED(res)) return res;
if (!iter) return NS_ERROR_FAILURE;
nsCOMPtr<nsIContent> content;
nsCOMPtr<nsIDOMNode> node;
nsCOMPtr<nsISupports> isupports;
// iterate node and build up array of non-list content
content = do_QueryInterface(aNode);
iter->Init(content);
while (NS_ENUMERATOR_FALSE == iter->IsDone())
{
res = iter->CurrentNode(getter_AddRefs(content));
if (NS_FAILED(res)) return res;
node = do_QueryInterface(content);
if (!node) return NS_ERROR_FAILURE;
if (nsHTMLEditUtils::IsList(node) || nsHTMLEditUtils::IsListItem(node))
{
nsCOMPtr <nsIDOMNode> child, tmp;
res = mEditor->GetFirstEditableChild(node, &child);
if (NS_FAILED(res)) return res;
while (child)
{
isupports = do_QueryInterface(child);
(*outArrayOfNodes)->AppendElement(isupports);
mEditor->GetNextHTMLSibling(child, &tmp);
child = tmp;
}
}
res = iter->Next();
if (NS_FAILED(res)) return res;
}
return res;
}
///////////////////////////////////////////////////////////////////////////
// IsFirstNode: Are we the first edittable node in our parent?
//
@@ -3038,6 +3089,14 @@ nsHTMLEditRules::GetParagraphFormatNodes(nsCOMPtr<nsISupportsArray> *outArrayOfN
if (NS_FAILED(res)) return res;
(*outArrayOfNodes)->AppendElements(arrayOfTableContent);
}
else if (nsHTMLEditUtils::IsList(testNode) || nsHTMLEditUtils::IsListItem(testNode))
{
(*outArrayOfNodes)->RemoveElementAt(i);
nsCOMPtr<nsISupportsArray> arrayOfTableContent;
res = GetListContent(testNode, &arrayOfTableContent);
if (NS_FAILED(res)) return res;
(*outArrayOfNodes)->AppendElements(arrayOfTableContent);
}
}
return res;
}