fixes for selection. up/down arrow behavior and also extending selection. all should be in peek offset ect. Also adding in a slight change to the hack (which should go away soon) that will stop the editor from scrolling when up/down left/right ect are clicked. when key events go in this code will be removed

This commit is contained in:
mjudge%netscape.com 1999-09-13 22:19:31 +00:00
parent bfdb99d1d9
commit e2d1d73278
5 changed files with 50 additions and 22 deletions

View File

@ -1943,6 +1943,18 @@ PresShell::HandleEvent(nsIView *aView,
aView->GetClientData(clientData);
frame = (nsIFrame *)clientData;
if (mSelection && aEvent->eventStructType == NS_KEY_EVENT)
{//KEY HANDLERS WILL GET RID OF THIS
mSelection->EnableFrameNotification(PR_FALSE);
if (mDisplayNonTextSelection && NS_SUCCEEDED(mSelection->HandleKeyEvent(aEvent)))
{
mSelection->EnableFrameNotification(PR_TRUE); //prevents secondary reset selection called since
return NS_OK;
}
mSelection->EnableFrameNotification(PR_TRUE); //prevents secondary reset selection called since
//we are a listener now.
}
if (nsnull != frame) {
PushCurrentEventFrame();
@ -1956,13 +1968,6 @@ PresShell::HandleEvent(nsIView *aView,
NS_RELEASE(container);
}
if (mSelection && aEvent->eventStructType == NS_KEY_EVENT)
{
mSelection->EnableFrameNotification(PR_FALSE);
mSelection->HandleKeyEvent(aEvent);
mSelection->EnableFrameNotification(PR_TRUE); //prevents secondary reset selection called since
//we are a listener now.
}
nsIEventStateManager *manager;
nsIContent* focusContent = nsnull;
if (NS_OK == mPresContext->GetEventStateManager(&manager)) {

View File

@ -729,9 +729,21 @@ nsRangeList::HandleKeyEvent(nsGUIEvent *aGuiEvent)
return NS_ERROR_NULL_POINTER;
STATUS_CHECK_RETURN_MACRO();
nsresult result = NS_OK;
nsresult result = NS_ERROR_FAILURE;
if (NS_KEY_DOWN == aGuiEvent->message) {
nsKeyEvent *keyEvent = (nsKeyEvent *)aGuiEvent; //this is ok. It really is a keyevent
switch (keyEvent->keyCode)
{
case nsIDOMUIEvent::VK_LEFT :
case nsIDOMUIEvent::VK_UP :
case nsIDOMUIEvent::VK_DOWN :
case nsIDOMUIEvent::VK_RIGHT :
case nsIDOMUIEvent::VK_HOME :
case nsIDOMUIEvent::VK_END :
break;
default:
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsIDOMNode> weakNodeUsed;
PRInt32 offsetused = 0;
nsSelectionAmount amount = eSelectCharacter;
@ -815,7 +827,7 @@ nsRangeList::HandleKeyEvent(nsGUIEvent *aGuiEvent)
InvalidateDesiredX();
mHint = HINTLEFT;//stick to this line
break;
default :return result;
default :return NS_ERROR_FAILURE;
}
if (NS_SUCCEEDED(result) && NS_SUCCEEDED(frame->PeekOffset(&pos)) && pos.mResultContent)
result = TakeFocus(pos.mResultContent, pos.mContentOffset, pos.mContentOffset, keyEvent->isShift, PR_FALSE);
@ -1623,7 +1635,7 @@ nsDOMSelection::GetPrimaryFrameForFocusNode(nsIFrame **aReturnFrame)
*aReturnFrame = 0;
nsCOMPtr<nsIContent> content = do_QueryInterface(FetchAnchorNode());
nsCOMPtr<nsIContent> content = do_QueryInterface(FetchFocusNode());
if (content)
return mRangeList->GetFrameForNodeOffset(content, FetchFocusOffset(),aReturnFrame);
return NS_ERROR_FAILURE;
@ -2391,7 +2403,7 @@ nsDOMSelection::Extend(nsIDOMNode* aParentNode, PRInt32 aOffset)
// First, find the range containing the old focus point:
if (!mRangeArray || !mAnchorFocusRange)
return NS_ERROR_NOT_INITIALIZED;
mRangeList->InvalidateDesiredX();
//mRangeList->InvalidateDesiredX();
nsCOMPtr<nsIDOMRange> difRange;
nsresult res;
res = nsComponentManager::CreateInstance(kRangeCID, nsnull,

View File

@ -1935,11 +1935,14 @@ nsTextFrame::GetChildFrameContainingOffset(PRInt32 inContentOffset,
nsIFrame *nextInFlow;
nextInFlow = GetNextInFlow();
if (nextInFlow)
{
return nextInFlow->GetChildFrameContainingOffset(inContentOffset, inHint, outFrameContentOffset, outChildFrame);
else
}
else if (contentOffset != mContentLength) //that condition was only for when there is a choice
return NS_ERROR_FAILURE;
}
else if (inContentOffset < mContentOffset) //could happen with floaters!
if (inContentOffset < mContentOffset) //could happen with floaters!
{
result = GetPrevInFlow(outChildFrame);
if (NS_SUCCEEDED(result))

View File

@ -1943,6 +1943,18 @@ PresShell::HandleEvent(nsIView *aView,
aView->GetClientData(clientData);
frame = (nsIFrame *)clientData;
if (mSelection && aEvent->eventStructType == NS_KEY_EVENT)
{//KEY HANDLERS WILL GET RID OF THIS
mSelection->EnableFrameNotification(PR_FALSE);
if (mDisplayNonTextSelection && NS_SUCCEEDED(mSelection->HandleKeyEvent(aEvent)))
{
mSelection->EnableFrameNotification(PR_TRUE); //prevents secondary reset selection called since
return NS_OK;
}
mSelection->EnableFrameNotification(PR_TRUE); //prevents secondary reset selection called since
//we are a listener now.
}
if (nsnull != frame) {
PushCurrentEventFrame();
@ -1956,13 +1968,6 @@ PresShell::HandleEvent(nsIView *aView,
NS_RELEASE(container);
}
if (mSelection && aEvent->eventStructType == NS_KEY_EVENT)
{
mSelection->EnableFrameNotification(PR_FALSE);
mSelection->HandleKeyEvent(aEvent);
mSelection->EnableFrameNotification(PR_TRUE); //prevents secondary reset selection called since
//we are a listener now.
}
nsIEventStateManager *manager;
nsIContent* focusContent = nsnull;
if (NS_OK == mPresContext->GetEventStateManager(&manager)) {

View File

@ -1935,11 +1935,14 @@ nsTextFrame::GetChildFrameContainingOffset(PRInt32 inContentOffset,
nsIFrame *nextInFlow;
nextInFlow = GetNextInFlow();
if (nextInFlow)
{
return nextInFlow->GetChildFrameContainingOffset(inContentOffset, inHint, outFrameContentOffset, outChildFrame);
else
}
else if (contentOffset != mContentLength) //that condition was only for when there is a choice
return NS_ERROR_FAILURE;
}
else if (inContentOffset < mContentOffset) //could happen with floaters!
if (inContentOffset < mContentOffset) //could happen with floaters!
{
result = GetPrevInFlow(outChildFrame);
if (NS_SUCCEEDED(result))