updates and fixes for CTRL left arrow and right arrow. also fixes for releasing the presshell correctly. the selection code was leaking it. updates for PREV and NEXT in nsFrameTraversal

git-svn-id: svn://10.0.0.236/trunk@22673 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
mjudge%netscape.com
1999-03-03 01:51:21 +00:00
parent 35f4281b4d
commit 4bb2e93aeb
10 changed files with 192 additions and 46 deletions

View File

@@ -171,6 +171,8 @@ nsFrameIterator::CurrentItem(nsISupports **aItem)
if (!aItem)
return NS_ERROR_NULL_POINTER;
*aItem = mCurrent;
if (mOffEdge)
return NS_COMFALSE;
return NS_OK;
}
@@ -254,7 +256,7 @@ nsLeafIterator::Next()
setCurrent(result);
if (!result)
setOffEdge(1);
return nsnull;
return NS_OK;
}
@@ -267,10 +269,39 @@ nsLeafIterator::Prev()
nsIFrame *result;
nsIFrame *parent = getCurrent();
if (!parent)
return NS_ERROR_FAILURE;
parent = getLast();
parent = getLast();
while(parent){
nsIFrame *grandParent;
if (NS_SUCCEEDED(parent->GetParent(&grandParent)) && grandParent &&
NS_SUCCEEDED(grandParent->FirstChild(nsnull,&result))){
nsFrameList list(result);
if (result = list.GetPrevSiblingFor(parent)){
parent = result;
while(NS_SUCCEEDED(parent->FirstChild(nsnull,&result)) && result){
parent = result;
while(NS_SUCCEEDED(parent->GetNextSibling(&result)) && result){
parent = result;
}
}
result = parent;
break;
}
else if (NS_FAILED(parent->GetParent(&result)) || !result){
result = nsnull;
break;
}
else
parent = result;
}
else{
setLast(parent);
result = nsnull;
break;
}
}
/* while(parent){
nsIFrame *grandParent;
if (NS_SUCCEEDED(parent->GetParent(&grandParent)) && grandParent){
nsIFrame * grandFchild;
@@ -297,8 +328,9 @@ nsLeafIterator::Prev()
}
}
}
*/
setCurrent(result);
if (!result)
setOffEdge(-1);
return nsnull;
return NS_OK;
}