mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-05 08:09:15 +00:00
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:
parent
bfdb99d1d9
commit
e2d1d73278
@ -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)) {
|
||||
|
@ -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,
|
||||
|
@ -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))
|
||||
|
@ -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)) {
|
||||
|
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user