зеркало из https://github.com/mozilla/gecko-dev.git
changing way we access caret. use the selection controller whenever possible. because it will make the caret do the right thing even when we have multiple selections accessing same caret.
This commit is contained in:
Родитель
4798aea6be
Коммит
55912eddb8
|
@ -52,8 +52,9 @@ interface nsISelectionController : nsISupports
|
|||
const short NUM_SELECTION_REGIONS = 2;
|
||||
|
||||
const short SELECTION_OFF = 0;
|
||||
const short SELECTION_ON = 1;
|
||||
const short SELECTION_DISABLED = 2;
|
||||
const short SELECTION_HIDDEN =1;//>HIDDEN displays selection
|
||||
const short SELECTION_ON = 2;
|
||||
const short SELECTION_DISABLED = 3;
|
||||
|
||||
/**
|
||||
* SetDisplaySelection will set the display mode for the selection. OFF,ON,DISABLED
|
||||
|
@ -98,6 +99,14 @@ interface nsISelectionController : nsISupports
|
|||
*/
|
||||
void setCaretEnabled(in boolean enabled);
|
||||
|
||||
/**
|
||||
* Set the caret readonly or not. An readonly caret will
|
||||
* draw but not blink when made visible.
|
||||
* @param aReadOnly PR_TRUE to enable caret. PR_FALSE to disable.
|
||||
* @return always NS_OK
|
||||
*/
|
||||
void setCaretReadOnly(in boolean readOnly);
|
||||
|
||||
/**
|
||||
* Gets the current state of the caret.
|
||||
* @param aEnabled [OUT] set to the current caret state, as set by SetCaretEnabled
|
||||
|
@ -113,7 +122,7 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void characterMove(in boolean aForward, in boolean aExtend);
|
||||
void characterMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** WordMove will move the selection one word forward/backward in the document.
|
||||
* this will also have the effect of collapsing the selection if the aExtend = PR_FALSE
|
||||
|
@ -123,7 +132,7 @@ interface nsISelectionController : nsISupports
|
|||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
|
||||
void wordMove(in boolean aForward, in boolean aExtend);
|
||||
void wordMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** LineMove will move the selection one line forward/backward in the document.
|
||||
* this will also have the effect of collapsing the selection if the aExtend = PR_FALSE
|
||||
|
@ -132,7 +141,7 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void lineMove(in boolean aForward, in boolean aExtend);
|
||||
void lineMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** IntraLineMove will move the selection to the front of the line or end of the line
|
||||
* in the document.
|
||||
|
@ -142,7 +151,7 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void intraLineMove(in boolean aForward, in boolean aExtend);
|
||||
void intraLineMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** PageMove will move the selection one page forward/backward in the document.
|
||||
* this will also have the effect of collapsing the selection if the aExtend = PR_FALSE
|
||||
|
@ -151,12 +160,12 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void pageMove(in boolean aForward, in boolean aExtend);
|
||||
void pageMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** CompleteScroll will move page view to the top or bottom of the document
|
||||
* @param aForward forward or backward if PR_FALSE
|
||||
*/
|
||||
void completeScroll(in boolean aForward);
|
||||
void completeScroll(in boolean forward);
|
||||
|
||||
/** CompleteMove will move page view to the top or bottom of the document
|
||||
* this will also have the effect of collapsing the selection if the aExtend = PR_FALSE
|
||||
|
@ -165,23 +174,23 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void completeMove(in boolean aForward, in boolean aExtend);
|
||||
void completeMove(in boolean forward, in boolean extend);
|
||||
|
||||
|
||||
/** ScrollPage will scroll the page without affecting the selection.
|
||||
* @param aForward scroll forward or backwards in selection
|
||||
*/
|
||||
void scrollPage(in boolean aForward);
|
||||
void scrollPage(in boolean forward);
|
||||
|
||||
/** ScrolLine will scroll line up or down dependent on the boolean
|
||||
* @param aForward scroll forward or backwards in selection
|
||||
*/
|
||||
void scrollLine(in boolean aForward);
|
||||
void scrollLine(in boolean forward);
|
||||
|
||||
/** ScrolHorizontal will scroll left or right dependent on the boolean
|
||||
* @param aLeft if true will scroll left. if not will scroll right.
|
||||
*/
|
||||
void scrollHorizontal(in boolean aLeft);
|
||||
void scrollHorizontal(in boolean left);
|
||||
/** SelectAll will select the whole page
|
||||
*/
|
||||
void selectAll();
|
||||
|
|
|
@ -1831,7 +1831,7 @@ nsDocViewerFocusListener::Focus(nsIDOMEvent* aEvent)
|
|||
selCon->GetDisplaySelection( &selectionStatus);
|
||||
|
||||
//if selection was nsISelectionController::SELECTION_OFF, do nothing
|
||||
//otherwise re-enable it.
|
||||
//otherwise re-enable it.
|
||||
if(selectionStatus == nsISelectionController::SELECTION_DISABLED)
|
||||
{
|
||||
selCon->SetDisplaySelection(nsISelectionController::SELECTION_ON);
|
||||
|
@ -1839,12 +1839,12 @@ nsDocViewerFocusListener::Focus(nsIDOMEvent* aEvent)
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsDocViewerFocusListener::Blur(nsIDOMEvent* aEvent)
|
||||
{
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
if(!mDocViewer)
|
||||
if(!mDocViewer)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsresult result = mDocViewer->GetPresShell(*getter_AddRefs(shell));//deref once cause it take a ptr ref
|
||||
|
|
|
@ -111,6 +111,7 @@ class nsAutoScrollTimer;
|
|||
class nsDOMSelection : public nsIDOMSelection , public nsIScriptObjectOwner, public nsSupportsWeakReference
|
||||
{
|
||||
public:
|
||||
nsDOMSelection();
|
||||
nsDOMSelection(nsSelection *aList);
|
||||
virtual ~nsDOMSelection();
|
||||
|
||||
|
@ -523,15 +524,21 @@ nsresult NS_NewSelection(nsIFrameSelection **aFrameSelection)
|
|||
if (!rlist)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
*aFrameSelection = (nsIFrameSelection *)rlist;
|
||||
nsresult result = rlist->AddRef();
|
||||
if (!NS_SUCCEEDED(result))
|
||||
{
|
||||
delete rlist;
|
||||
}
|
||||
return result;
|
||||
rlist->AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult NS_NewDomSelection(nsIDOMSelection **aDomSelection);
|
||||
|
||||
nsresult NS_NewDomSelection(nsIDOMSelection **aDomSelection)
|
||||
{
|
||||
nsDOMSelection *rlist = new nsDOMSelection;
|
||||
if (!rlist)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
*aDomSelection = (nsIDOMSelection *)rlist;
|
||||
rlist->AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//Horrible statics but no choice
|
||||
nsIAtom *nsSelection::sTableAtom = 0;
|
||||
|
@ -781,12 +788,12 @@ nsSelection::nsSelection()
|
|||
if (mDomSelections[index])
|
||||
autoCopyService->Listen(mDomSelections[index]);
|
||||
}
|
||||
mDisplaySelection = nsISelectionController::SELECTION_ON;
|
||||
mDisplaySelection = nsISelectionController::SELECTION_OFF;
|
||||
}
|
||||
|
||||
|
||||
|
||||
nsSelection::~nsSelection()
|
||||
nsSelection::~nsSelection()
|
||||
{
|
||||
if (sInstanceCount <= 1)
|
||||
{
|
||||
|
@ -1608,10 +1615,8 @@ nsSelection::TakeFocus(nsIContent *aNewFocus, PRUint32 aContentOffset,
|
|||
nsCOMPtr<nsIContent> parent2;
|
||||
if (NS_FAILED(aNewFocus->GetParent(*getter_AddRefs(parent))) || !parent)
|
||||
return NS_ERROR_FAILURE;
|
||||
//if (NS_FAILED(parent->GetParent(*getter_AddRefs(parent2))) || !parent2)
|
||||
//return NS_ERROR_FAILURE;
|
||||
|
||||
//END HACKHACKHACK /checking for root frames/content
|
||||
|
||||
PRInt8 index = GetIndexFromSelectionType(nsISelectionController::SELECTION_NORMAL);
|
||||
domNode = do_QueryInterface(aNewFocus);
|
||||
//traverse through document and unselect crap here
|
||||
|
@ -1688,7 +1693,7 @@ nsSelection::SetMouseDownState(PRBool aState)
|
|||
mSelectingTableCells = PR_FALSE;
|
||||
mStartSelectedCell = nsnull;
|
||||
mEndSelectedCell = nsnull;
|
||||
NotifySelectionListeners(nsISelectionController::SELECTION_NORMAL);
|
||||
//NotifySelectionListeners(nsISelectionController::SELECTION_NORMAL);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -2625,6 +2630,18 @@ nsDOMSelection::nsDOMSelection(nsSelection *aList)
|
|||
}
|
||||
|
||||
|
||||
nsDOMSelection::nsDOMSelection()
|
||||
{
|
||||
mFixupState = PR_FALSE;
|
||||
mDirection = eDirNext;
|
||||
NS_NewISupportsArray(getter_AddRefs(mRangeArray));
|
||||
mScriptObject = nsnull;
|
||||
mAutoScrollTimer = nsnull;
|
||||
NS_NewISupportsArray(getter_AddRefs(mSelectionListeners));
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
|
||||
nsDOMSelection::~nsDOMSelection()
|
||||
{
|
||||
|
@ -2986,7 +3003,7 @@ nsDOMSelection::GetPrimaryFrameForAnchorNode(nsIFrame **aReturnFrame)
|
|||
PRInt32 frameOffset = 0;
|
||||
*aReturnFrame = 0;
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(FetchAnchorNode());
|
||||
if (content)
|
||||
if (content && mFrameSelection)
|
||||
return mFrameSelection->GetFrameForNodeOffset(content, FetchAnchorOffset(),aReturnFrame, &frameOffset);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
@ -3001,7 +3018,7 @@ nsDOMSelection::GetPrimaryFrameForFocusNode(nsIFrame **aReturnFrame)
|
|||
*aReturnFrame = 0;
|
||||
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(FetchFocusNode());
|
||||
if (content)
|
||||
if (content && mFrameSelection)
|
||||
return mFrameSelection->GetFrameForNodeOffset(content, FetchFocusOffset(),aReturnFrame, &frameOffset);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
@ -3017,6 +3034,8 @@ nsDOMSelection::selectFrames(nsIPresContext* aPresContext,
|
|||
nsIPresShell *aPresShell,
|
||||
PRBool aFlags)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIGeneratedContentIterator> genericiter = do_QueryInterface(aInnerIter);
|
||||
if (genericiter && aPresShell)
|
||||
|
@ -3065,6 +3084,8 @@ nsDOMSelection::selectFrames(nsIPresContext* aPresContext,
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::selectFrames(nsIPresContext* aPresContext, nsIDOMRange *aRange, PRBool aFlags)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
if (!aRange || !aPresContext)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
nsCOMPtr<nsIContentIterator> iter;
|
||||
|
@ -3314,6 +3335,8 @@ nsresult
|
|||
nsDOMSelection::StartAutoScrollTimer(nsIPresContext *aPresContext, nsIFrame *aFrame, nsPoint& aPoint, PRUint32 aDelay)
|
||||
{
|
||||
nsresult result;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (!mAutoScrollTimer)
|
||||
{
|
||||
|
@ -3572,6 +3595,8 @@ nsDOMSelection::GetEnumerator(nsIEnumerator **aIterator)
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::ClearSelection()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
nsCOMPtr<nsIPresContext> presContext;
|
||||
GetPresContext(getter_AddRefs(presContext));
|
||||
|
||||
|
@ -3608,7 +3633,8 @@ nsDOMSelection::AddRange(nsIDOMRange* aRange)
|
|||
GetPresContext(getter_AddRefs(presContext));
|
||||
selectFrames(presContext, aRange, PR_TRUE);
|
||||
//ScrollIntoView(); this should not happen automatically
|
||||
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -3632,6 +3658,8 @@ nsDOMSelection::RemoveRange(nsIDOMRange* aRange)
|
|||
ScrollIntoView();
|
||||
}
|
||||
}
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -3695,7 +3723,8 @@ nsDOMSelection::Collapse(nsIDOMNode* aParentNode, PRInt32 aOffset)
|
|||
selectFrames(presContext, range,PR_TRUE);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -4503,6 +4532,8 @@ nsDOMSelection::Extend(nsIDOMNode* aParentNode, PRInt32 aOffset)
|
|||
printf ("Sel. Extend set to null parent.\n");
|
||||
}
|
||||
#endif
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -4572,6 +4603,8 @@ nsDOMSelection::ContainsNode(nsIDOMNode* aNode, PRBool aRecursive, PRBool* aYes)
|
|||
nsresult
|
||||
nsDOMSelection::GetPresContext(nsIPresContext **aPresContext)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
nsIFocusTracker *tracker = mFrameSelection->GetTracker();
|
||||
|
||||
if (!tracker)
|
||||
|
@ -4584,6 +4617,8 @@ nsresult
|
|||
nsDOMSelection::GetPresShell(nsIPresShell **aPresShell)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
nsIFocusTracker *tracker = mFrameSelection->GetTracker();
|
||||
|
||||
|
@ -4614,6 +4649,8 @@ nsDOMSelection::GetRootScrollableView(nsIScrollableView **aScrollableView)
|
|||
// NOTE: This method returns a NON-AddRef'd pointer
|
||||
// to the scrollable view!
|
||||
//
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
|
@ -4648,6 +4685,8 @@ nsresult
|
|||
nsDOMSelection::GetFrameToRootViewOffset(nsIFrame *aFrame, nscoord *aX, nscoord *aY)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
if (!aFrame || !aX || !aY) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
@ -4705,6 +4744,8 @@ nsresult
|
|||
nsDOMSelection::GetPointFromOffset(nsIFrame *aFrame, PRInt32 aContentOffset, nsPoint *aPoint)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
if (!aFrame || !aPoint)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
|
@ -4800,6 +4841,8 @@ nsresult
|
|||
nsDOMSelection::GetSelectionRegionRect(SelectionRegion aRegion, nsRect *aRect)
|
||||
{
|
||||
nsresult result = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
if (!aRect)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
@ -4976,6 +5019,8 @@ nsDOMSelection::ScrollRectIntoView(nsRect& aRect,
|
|||
PRIntn aHPercent)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
nsIScrollableView *scrollingView = 0;
|
||||
|
||||
|
@ -5052,6 +5097,8 @@ NS_IMETHODIMP
|
|||
nsDOMSelection::ScrollIntoView(SelectionRegion aRegion)
|
||||
{
|
||||
nsresult result;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (mFrameSelection->GetBatching())
|
||||
return NS_OK;
|
||||
|
@ -5119,6 +5166,8 @@ nsDOMSelection::NotifySelectionListeners()
|
|||
{
|
||||
if (!mSelectionListeners)
|
||||
return NS_ERROR_FAILURE;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (mFrameSelection->GetBatching()){
|
||||
mFrameSelection->SetDirty();
|
||||
|
@ -5152,6 +5201,8 @@ nsDOMSelection::NotifySelectionListeners()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::StartBatchChanges()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->StartBatchChanges();
|
||||
}
|
||||
|
||||
|
@ -5160,6 +5211,8 @@ nsDOMSelection::StartBatchChanges()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::EndBatchChanges()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->EndBatchChanges();
|
||||
}
|
||||
|
||||
|
@ -5168,6 +5221,8 @@ nsDOMSelection::EndBatchChanges()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::DeleteFromDocument()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->DeleteFromDocument();
|
||||
}
|
||||
|
||||
|
|
|
@ -737,7 +737,9 @@ nsEventStateManager::PostHandleEvent(nsIPresContext* aPresContext,
|
|||
if ((ui->mUserFocus != NS_STYLE_USER_FOCUS_IGNORE) &&
|
||||
(ui->mUserFocus != NS_STYLE_USER_FOCUS_NONE)) {
|
||||
currFrame->GetContent(getter_AddRefs(newFocus));
|
||||
break;
|
||||
nsCOMPtr<nsIDOMElement> domElement(do_QueryInterface(newFocus));
|
||||
if (domElement)
|
||||
break;
|
||||
}
|
||||
currFrame->GetParent(&currFrame);
|
||||
}
|
||||
|
|
|
@ -1132,7 +1132,7 @@ nsHTMLInputElement::GetTextLength(PRInt32* aTextLength)
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->GetTextLength(aTextLength);
|
||||
|
||||
|
@ -1148,7 +1148,7 @@ nsHTMLInputElement::SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectio
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->SetSelectionRange(aSelectionStart, aSelectionEnd);
|
||||
|
||||
|
@ -1173,7 +1173,7 @@ nsHTMLInputElement::SetSelectionStart(PRInt32 aSelectionStart)
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->SetSelectionStart(aSelectionStart);
|
||||
|
||||
|
@ -1199,7 +1199,7 @@ nsHTMLInputElement::SetSelectionEnd(PRInt32 aSelectionEnd)
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->SetSelectionEnd(aSelectionEnd);
|
||||
|
||||
|
@ -1215,7 +1215,7 @@ nsHTMLInputElement::GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelect
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->GetSelectionRange(aSelectionStart, aSelectionEnd);
|
||||
|
||||
|
|
|
@ -161,8 +161,9 @@ NS_IMETHODIMP nsCaret::QueryInterface(const nsIID& aIID,
|
|||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
NS_IMETHODIMP nsCaret::SetCaretVisible(PRBool inMakeVisible)
|
||||
NS_IMETHODIMP nsCaret::SetCaretVisible(PRBool inMakeVisible, nsIDOMSelection *aDOMSel)
|
||||
{
|
||||
mDomSelectionWeak = getter_AddRefs( NS_GetWeakReference(aDOMSel) ); // weak reference to pres shell
|
||||
mVisible = inMakeVisible;
|
||||
nsresult err = NS_OK;
|
||||
if (mVisible)
|
||||
|
@ -175,8 +176,10 @@ NS_IMETHODIMP nsCaret::SetCaretVisible(PRBool inMakeVisible)
|
|||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
NS_IMETHODIMP nsCaret::SetCaretReadOnly(PRBool inMakeReadonly)
|
||||
NS_IMETHODIMP nsCaret::SetCaretReadOnly(PRBool inMakeReadonly, nsIDOMSelection *aDOMSel)
|
||||
{
|
||||
mDomSelectionWeak = getter_AddRefs( NS_GetWeakReference(aDOMSel) ); // weak reference to pres shell
|
||||
|
||||
mReadOnly = inMakeReadonly;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -187,6 +190,8 @@ NS_IMETHODIMP nsCaret::GetWindowRelativeCoordinates(nsRect& outCoordinates, PRBo
|
|||
{
|
||||
if (!mPresShell)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
mDomSelectionWeak = getter_AddRefs( NS_GetWeakReference(aDOMSel) ); // weak reference to pres shell
|
||||
|
||||
nsCOMPtr<nsIDOMSelection> domSelection = aDOMSel;
|
||||
nsresult err;
|
||||
|
@ -501,8 +506,6 @@ void nsCaret::GetViewForRendering(nsIFrame *caretFrame, EViewCoordinates coordTy
|
|||
|
||||
do {
|
||||
theView->GetPosition(&x, &y);
|
||||
viewOffset.x += x;
|
||||
viewOffset.y += y;
|
||||
|
||||
if (!returnView)
|
||||
{
|
||||
|
@ -516,6 +519,8 @@ void nsCaret::GetViewForRendering(nsIFrame *caretFrame, EViewCoordinates coordTy
|
|||
if (coordType == eViewCoordinates)
|
||||
break;
|
||||
}
|
||||
viewOffset.x += x;
|
||||
viewOffset.y += y;
|
||||
}
|
||||
|
||||
theView->GetParent(theView);
|
||||
|
|
|
@ -53,8 +53,8 @@ class nsCaret : public nsICaret,
|
|||
// nsICaret interface
|
||||
NS_IMETHOD Init(nsIPresShell *inPresShell);
|
||||
|
||||
NS_IMETHOD SetCaretVisible(PRBool inMakeVisible);
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool inMakeReadonly);
|
||||
NS_IMETHOD SetCaretVisible(PRBool inMakeVisible, nsIDOMSelection *aSel);
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool inMakeReadonly, nsIDOMSelection *aSel);
|
||||
NS_IMETHOD GetWindowRelativeCoordinates(nsRect& outCoordinates, PRBool& outIsCollapsed, nsIDOMSelection *aDOMSel);
|
||||
NS_IMETHOD ClearFrameRefs(nsIFrame* aFrame);
|
||||
|
||||
|
|
|
@ -1831,7 +1831,7 @@ nsDocViewerFocusListener::Focus(nsIDOMEvent* aEvent)
|
|||
selCon->GetDisplaySelection( &selectionStatus);
|
||||
|
||||
//if selection was nsISelectionController::SELECTION_OFF, do nothing
|
||||
//otherwise re-enable it.
|
||||
//otherwise re-enable it.
|
||||
if(selectionStatus == nsISelectionController::SELECTION_DISABLED)
|
||||
{
|
||||
selCon->SetDisplaySelection(nsISelectionController::SELECTION_ON);
|
||||
|
@ -1839,12 +1839,12 @@ nsDocViewerFocusListener::Focus(nsIDOMEvent* aEvent)
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsDocViewerFocusListener::Blur(nsIDOMEvent* aEvent)
|
||||
{
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
if(!mDocViewer)
|
||||
if(!mDocViewer)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsresult result = mDocViewer->GetPresShell(*getter_AddRefs(shell));//deref once cause it take a ptr ref
|
||||
|
|
|
@ -47,13 +47,13 @@ public:
|
|||
/** SetCaretVisible will set the visibility of the caret
|
||||
* @param inMakeVisible PR_TRUE to show the caret, PR_FALSE to hide it
|
||||
*/
|
||||
NS_IMETHOD SetCaretVisible(PRBool inMakeVisible) = 0;
|
||||
NS_IMETHOD SetCaretVisible(PRBool inMakeVisible, nsIDOMSelection *aDOMSel) = 0;
|
||||
|
||||
/** SetCaretReadOnly set the appearance of the caret
|
||||
* @param inMakeReadonly PR_TRUE to show the caret in a 'read only' state,
|
||||
* PR_FALSE to show the caret in normal, editing state
|
||||
*/
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool inMakeReadonly) = 0;
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool inMakeReadonly, nsIDOMSelection *aDOMSel) = 0;
|
||||
|
||||
/** GetWindowRelativeCoordinates
|
||||
* Get the position of the caret in (top-level) window coordinates.
|
||||
|
|
|
@ -651,10 +651,11 @@ public:
|
|||
NS_IMETHOD ScrollFrameIntoView(nsIFrame *aFrame);
|
||||
// caret handling
|
||||
NS_IMETHOD GetCaret(nsICaret **aOutCaret);
|
||||
NS_IMETHOD SetCaretEnabled(PRBool aaInEnable);
|
||||
NS_IMETHOD SetCaretEnabled(PRBool aInEnable);
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool aReadOnly);
|
||||
NS_IMETHOD GetCaretEnabled(PRBool *aOutEnabled);
|
||||
|
||||
NS_IMETHOD SetDisplayNonTextSelection(PRBool aaInEnable);
|
||||
NS_IMETHOD SetDisplayNonTextSelection(PRBool aInEnable);
|
||||
NS_IMETHOD GetDisplayNonTextSelection(PRBool *aOutEnable);
|
||||
|
||||
// nsISelectionController
|
||||
|
@ -1772,17 +1773,30 @@ NS_IMETHODIMP PresShell::SetCaretEnabled(PRBool aInEnable)
|
|||
if (mCaret && (mCaretEnabled != oldEnabled))
|
||||
{
|
||||
// Update the document's content and frame models.
|
||||
if (mDocument) mDocument->FlushPendingNotifications();
|
||||
if (mDocument)
|
||||
mDocument->FlushPendingNotifications();
|
||||
|
||||
if (mCaretEnabled)
|
||||
result = mCaret->SetCaretVisible(PR_TRUE);
|
||||
else
|
||||
result = mCaret->SetCaretVisible(PR_FALSE);
|
||||
nsCOMPtr<nsIDOMSelection> sel;
|
||||
if (NS_SUCCEEDED(GetSelection(nsISelectionController::SELECTION_NORMAL, getter_AddRefs(sel))) && sel)
|
||||
{
|
||||
result = mCaret->SetCaretVisible(mCaretEnabled, sel);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP PresShell::SetCaretReadOnly(PRBool aReadOnly)
|
||||
{
|
||||
nsCOMPtr<nsIDOMSelection> domSel;
|
||||
if (NS_SUCCEEDED(GetSelection(nsISelectionController::SELECTION_NORMAL, getter_AddRefs(domSel))) && domSel)
|
||||
{
|
||||
return mCaret->SetCaretReadOnly(aReadOnly, domSel);
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP PresShell::GetCaretEnabled(PRBool *aOutEnabled)
|
||||
{
|
||||
if (!aOutEnabled) { return NS_ERROR_INVALID_ARG; }
|
||||
|
|
|
@ -47,13 +47,13 @@ public:
|
|||
/** SetCaretVisible will set the visibility of the caret
|
||||
* @param inMakeVisible PR_TRUE to show the caret, PR_FALSE to hide it
|
||||
*/
|
||||
NS_IMETHOD SetCaretVisible(PRBool inMakeVisible) = 0;
|
||||
NS_IMETHOD SetCaretVisible(PRBool inMakeVisible, nsIDOMSelection *aDOMSel) = 0;
|
||||
|
||||
/** SetCaretReadOnly set the appearance of the caret
|
||||
* @param inMakeReadonly PR_TRUE to show the caret in a 'read only' state,
|
||||
* PR_FALSE to show the caret in normal, editing state
|
||||
*/
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool inMakeReadonly) = 0;
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool inMakeReadonly, nsIDOMSelection *aDOMSel) = 0;
|
||||
|
||||
/** GetWindowRelativeCoordinates
|
||||
* Get the position of the caret in (top-level) window coordinates.
|
||||
|
|
|
@ -52,8 +52,9 @@ interface nsISelectionController : nsISupports
|
|||
const short NUM_SELECTION_REGIONS = 2;
|
||||
|
||||
const short SELECTION_OFF = 0;
|
||||
const short SELECTION_ON = 1;
|
||||
const short SELECTION_DISABLED = 2;
|
||||
const short SELECTION_HIDDEN =1;//>HIDDEN displays selection
|
||||
const short SELECTION_ON = 2;
|
||||
const short SELECTION_DISABLED = 3;
|
||||
|
||||
/**
|
||||
* SetDisplaySelection will set the display mode for the selection. OFF,ON,DISABLED
|
||||
|
@ -98,6 +99,14 @@ interface nsISelectionController : nsISupports
|
|||
*/
|
||||
void setCaretEnabled(in boolean enabled);
|
||||
|
||||
/**
|
||||
* Set the caret readonly or not. An readonly caret will
|
||||
* draw but not blink when made visible.
|
||||
* @param aReadOnly PR_TRUE to enable caret. PR_FALSE to disable.
|
||||
* @return always NS_OK
|
||||
*/
|
||||
void setCaretReadOnly(in boolean readOnly);
|
||||
|
||||
/**
|
||||
* Gets the current state of the caret.
|
||||
* @param aEnabled [OUT] set to the current caret state, as set by SetCaretEnabled
|
||||
|
@ -113,7 +122,7 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void characterMove(in boolean aForward, in boolean aExtend);
|
||||
void characterMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** WordMove will move the selection one word forward/backward in the document.
|
||||
* this will also have the effect of collapsing the selection if the aExtend = PR_FALSE
|
||||
|
@ -123,7 +132,7 @@ interface nsISelectionController : nsISupports
|
|||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
|
||||
void wordMove(in boolean aForward, in boolean aExtend);
|
||||
void wordMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** LineMove will move the selection one line forward/backward in the document.
|
||||
* this will also have the effect of collapsing the selection if the aExtend = PR_FALSE
|
||||
|
@ -132,7 +141,7 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void lineMove(in boolean aForward, in boolean aExtend);
|
||||
void lineMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** IntraLineMove will move the selection to the front of the line or end of the line
|
||||
* in the document.
|
||||
|
@ -142,7 +151,7 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void intraLineMove(in boolean aForward, in boolean aExtend);
|
||||
void intraLineMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** PageMove will move the selection one page forward/backward in the document.
|
||||
* this will also have the effect of collapsing the selection if the aExtend = PR_FALSE
|
||||
|
@ -151,12 +160,12 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void pageMove(in boolean aForward, in boolean aExtend);
|
||||
void pageMove(in boolean forward, in boolean extend);
|
||||
|
||||
/** CompleteScroll will move page view to the top or bottom of the document
|
||||
* @param aForward forward or backward if PR_FALSE
|
||||
*/
|
||||
void completeScroll(in boolean aForward);
|
||||
void completeScroll(in boolean forward);
|
||||
|
||||
/** CompleteMove will move page view to the top or bottom of the document
|
||||
* this will also have the effect of collapsing the selection if the aExtend = PR_FALSE
|
||||
|
@ -165,23 +174,23 @@ interface nsISelectionController : nsISupports
|
|||
* @param aForward forward or backward if PR_FALSE
|
||||
* @param aExtend should it collapse the selection of extend it?
|
||||
*/
|
||||
void completeMove(in boolean aForward, in boolean aExtend);
|
||||
void completeMove(in boolean forward, in boolean extend);
|
||||
|
||||
|
||||
/** ScrollPage will scroll the page without affecting the selection.
|
||||
* @param aForward scroll forward or backwards in selection
|
||||
*/
|
||||
void scrollPage(in boolean aForward);
|
||||
void scrollPage(in boolean forward);
|
||||
|
||||
/** ScrolLine will scroll line up or down dependent on the boolean
|
||||
* @param aForward scroll forward or backwards in selection
|
||||
*/
|
||||
void scrollLine(in boolean aForward);
|
||||
void scrollLine(in boolean forward);
|
||||
|
||||
/** ScrolHorizontal will scroll left or right dependent on the boolean
|
||||
* @param aLeft if true will scroll left. if not will scroll right.
|
||||
*/
|
||||
void scrollHorizontal(in boolean aLeft);
|
||||
void scrollHorizontal(in boolean left);
|
||||
/** SelectAll will select the whole page
|
||||
*/
|
||||
void selectAll();
|
||||
|
|
|
@ -161,8 +161,9 @@ NS_IMETHODIMP nsCaret::QueryInterface(const nsIID& aIID,
|
|||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
NS_IMETHODIMP nsCaret::SetCaretVisible(PRBool inMakeVisible)
|
||||
NS_IMETHODIMP nsCaret::SetCaretVisible(PRBool inMakeVisible, nsIDOMSelection *aDOMSel)
|
||||
{
|
||||
mDomSelectionWeak = getter_AddRefs( NS_GetWeakReference(aDOMSel) ); // weak reference to pres shell
|
||||
mVisible = inMakeVisible;
|
||||
nsresult err = NS_OK;
|
||||
if (mVisible)
|
||||
|
@ -175,8 +176,10 @@ NS_IMETHODIMP nsCaret::SetCaretVisible(PRBool inMakeVisible)
|
|||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
NS_IMETHODIMP nsCaret::SetCaretReadOnly(PRBool inMakeReadonly)
|
||||
NS_IMETHODIMP nsCaret::SetCaretReadOnly(PRBool inMakeReadonly, nsIDOMSelection *aDOMSel)
|
||||
{
|
||||
mDomSelectionWeak = getter_AddRefs( NS_GetWeakReference(aDOMSel) ); // weak reference to pres shell
|
||||
|
||||
mReadOnly = inMakeReadonly;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -187,6 +190,8 @@ NS_IMETHODIMP nsCaret::GetWindowRelativeCoordinates(nsRect& outCoordinates, PRBo
|
|||
{
|
||||
if (!mPresShell)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
mDomSelectionWeak = getter_AddRefs( NS_GetWeakReference(aDOMSel) ); // weak reference to pres shell
|
||||
|
||||
nsCOMPtr<nsIDOMSelection> domSelection = aDOMSel;
|
||||
nsresult err;
|
||||
|
@ -501,8 +506,6 @@ void nsCaret::GetViewForRendering(nsIFrame *caretFrame, EViewCoordinates coordTy
|
|||
|
||||
do {
|
||||
theView->GetPosition(&x, &y);
|
||||
viewOffset.x += x;
|
||||
viewOffset.y += y;
|
||||
|
||||
if (!returnView)
|
||||
{
|
||||
|
@ -516,6 +519,8 @@ void nsCaret::GetViewForRendering(nsIFrame *caretFrame, EViewCoordinates coordTy
|
|||
if (coordType == eViewCoordinates)
|
||||
break;
|
||||
}
|
||||
viewOffset.x += x;
|
||||
viewOffset.y += y;
|
||||
}
|
||||
|
||||
theView->GetParent(theView);
|
||||
|
|
|
@ -53,8 +53,8 @@ class nsCaret : public nsICaret,
|
|||
// nsICaret interface
|
||||
NS_IMETHOD Init(nsIPresShell *inPresShell);
|
||||
|
||||
NS_IMETHOD SetCaretVisible(PRBool inMakeVisible);
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool inMakeReadonly);
|
||||
NS_IMETHOD SetCaretVisible(PRBool inMakeVisible, nsIDOMSelection *aSel);
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool inMakeReadonly, nsIDOMSelection *aSel);
|
||||
NS_IMETHOD GetWindowRelativeCoordinates(nsRect& outCoordinates, PRBool& outIsCollapsed, nsIDOMSelection *aDOMSel);
|
||||
NS_IMETHOD ClearFrameRefs(nsIFrame* aFrame);
|
||||
|
||||
|
|
|
@ -1831,7 +1831,7 @@ nsDocViewerFocusListener::Focus(nsIDOMEvent* aEvent)
|
|||
selCon->GetDisplaySelection( &selectionStatus);
|
||||
|
||||
//if selection was nsISelectionController::SELECTION_OFF, do nothing
|
||||
//otherwise re-enable it.
|
||||
//otherwise re-enable it.
|
||||
if(selectionStatus == nsISelectionController::SELECTION_DISABLED)
|
||||
{
|
||||
selCon->SetDisplaySelection(nsISelectionController::SELECTION_ON);
|
||||
|
@ -1839,12 +1839,12 @@ nsDocViewerFocusListener::Focus(nsIDOMEvent* aEvent)
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsDocViewerFocusListener::Blur(nsIDOMEvent* aEvent)
|
||||
{
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
if(!mDocViewer)
|
||||
if(!mDocViewer)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsresult result = mDocViewer->GetPresShell(*getter_AddRefs(shell));//deref once cause it take a ptr ref
|
||||
|
|
|
@ -111,6 +111,7 @@ class nsAutoScrollTimer;
|
|||
class nsDOMSelection : public nsIDOMSelection , public nsIScriptObjectOwner, public nsSupportsWeakReference
|
||||
{
|
||||
public:
|
||||
nsDOMSelection();
|
||||
nsDOMSelection(nsSelection *aList);
|
||||
virtual ~nsDOMSelection();
|
||||
|
||||
|
@ -523,15 +524,21 @@ nsresult NS_NewSelection(nsIFrameSelection **aFrameSelection)
|
|||
if (!rlist)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
*aFrameSelection = (nsIFrameSelection *)rlist;
|
||||
nsresult result = rlist->AddRef();
|
||||
if (!NS_SUCCEEDED(result))
|
||||
{
|
||||
delete rlist;
|
||||
}
|
||||
return result;
|
||||
rlist->AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult NS_NewDomSelection(nsIDOMSelection **aDomSelection);
|
||||
|
||||
nsresult NS_NewDomSelection(nsIDOMSelection **aDomSelection)
|
||||
{
|
||||
nsDOMSelection *rlist = new nsDOMSelection;
|
||||
if (!rlist)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
*aDomSelection = (nsIDOMSelection *)rlist;
|
||||
rlist->AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//Horrible statics but no choice
|
||||
nsIAtom *nsSelection::sTableAtom = 0;
|
||||
|
@ -781,12 +788,12 @@ nsSelection::nsSelection()
|
|||
if (mDomSelections[index])
|
||||
autoCopyService->Listen(mDomSelections[index]);
|
||||
}
|
||||
mDisplaySelection = nsISelectionController::SELECTION_ON;
|
||||
mDisplaySelection = nsISelectionController::SELECTION_OFF;
|
||||
}
|
||||
|
||||
|
||||
|
||||
nsSelection::~nsSelection()
|
||||
nsSelection::~nsSelection()
|
||||
{
|
||||
if (sInstanceCount <= 1)
|
||||
{
|
||||
|
@ -1608,10 +1615,8 @@ nsSelection::TakeFocus(nsIContent *aNewFocus, PRUint32 aContentOffset,
|
|||
nsCOMPtr<nsIContent> parent2;
|
||||
if (NS_FAILED(aNewFocus->GetParent(*getter_AddRefs(parent))) || !parent)
|
||||
return NS_ERROR_FAILURE;
|
||||
//if (NS_FAILED(parent->GetParent(*getter_AddRefs(parent2))) || !parent2)
|
||||
//return NS_ERROR_FAILURE;
|
||||
|
||||
//END HACKHACKHACK /checking for root frames/content
|
||||
|
||||
PRInt8 index = GetIndexFromSelectionType(nsISelectionController::SELECTION_NORMAL);
|
||||
domNode = do_QueryInterface(aNewFocus);
|
||||
//traverse through document and unselect crap here
|
||||
|
@ -1688,7 +1693,7 @@ nsSelection::SetMouseDownState(PRBool aState)
|
|||
mSelectingTableCells = PR_FALSE;
|
||||
mStartSelectedCell = nsnull;
|
||||
mEndSelectedCell = nsnull;
|
||||
NotifySelectionListeners(nsISelectionController::SELECTION_NORMAL);
|
||||
//NotifySelectionListeners(nsISelectionController::SELECTION_NORMAL);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -2625,6 +2630,18 @@ nsDOMSelection::nsDOMSelection(nsSelection *aList)
|
|||
}
|
||||
|
||||
|
||||
nsDOMSelection::nsDOMSelection()
|
||||
{
|
||||
mFixupState = PR_FALSE;
|
||||
mDirection = eDirNext;
|
||||
NS_NewISupportsArray(getter_AddRefs(mRangeArray));
|
||||
mScriptObject = nsnull;
|
||||
mAutoScrollTimer = nsnull;
|
||||
NS_NewISupportsArray(getter_AddRefs(mSelectionListeners));
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
|
||||
nsDOMSelection::~nsDOMSelection()
|
||||
{
|
||||
|
@ -2986,7 +3003,7 @@ nsDOMSelection::GetPrimaryFrameForAnchorNode(nsIFrame **aReturnFrame)
|
|||
PRInt32 frameOffset = 0;
|
||||
*aReturnFrame = 0;
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(FetchAnchorNode());
|
||||
if (content)
|
||||
if (content && mFrameSelection)
|
||||
return mFrameSelection->GetFrameForNodeOffset(content, FetchAnchorOffset(),aReturnFrame, &frameOffset);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
@ -3001,7 +3018,7 @@ nsDOMSelection::GetPrimaryFrameForFocusNode(nsIFrame **aReturnFrame)
|
|||
*aReturnFrame = 0;
|
||||
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(FetchFocusNode());
|
||||
if (content)
|
||||
if (content && mFrameSelection)
|
||||
return mFrameSelection->GetFrameForNodeOffset(content, FetchFocusOffset(),aReturnFrame, &frameOffset);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
@ -3017,6 +3034,8 @@ nsDOMSelection::selectFrames(nsIPresContext* aPresContext,
|
|||
nsIPresShell *aPresShell,
|
||||
PRBool aFlags)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIGeneratedContentIterator> genericiter = do_QueryInterface(aInnerIter);
|
||||
if (genericiter && aPresShell)
|
||||
|
@ -3065,6 +3084,8 @@ nsDOMSelection::selectFrames(nsIPresContext* aPresContext,
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::selectFrames(nsIPresContext* aPresContext, nsIDOMRange *aRange, PRBool aFlags)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
if (!aRange || !aPresContext)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
nsCOMPtr<nsIContentIterator> iter;
|
||||
|
@ -3314,6 +3335,8 @@ nsresult
|
|||
nsDOMSelection::StartAutoScrollTimer(nsIPresContext *aPresContext, nsIFrame *aFrame, nsPoint& aPoint, PRUint32 aDelay)
|
||||
{
|
||||
nsresult result;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (!mAutoScrollTimer)
|
||||
{
|
||||
|
@ -3572,6 +3595,8 @@ nsDOMSelection::GetEnumerator(nsIEnumerator **aIterator)
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::ClearSelection()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
nsCOMPtr<nsIPresContext> presContext;
|
||||
GetPresContext(getter_AddRefs(presContext));
|
||||
|
||||
|
@ -3608,7 +3633,8 @@ nsDOMSelection::AddRange(nsIDOMRange* aRange)
|
|||
GetPresContext(getter_AddRefs(presContext));
|
||||
selectFrames(presContext, aRange, PR_TRUE);
|
||||
//ScrollIntoView(); this should not happen automatically
|
||||
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -3632,6 +3658,8 @@ nsDOMSelection::RemoveRange(nsIDOMRange* aRange)
|
|||
ScrollIntoView();
|
||||
}
|
||||
}
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -3695,7 +3723,8 @@ nsDOMSelection::Collapse(nsIDOMNode* aParentNode, PRInt32 aOffset)
|
|||
selectFrames(presContext, range,PR_TRUE);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -4503,6 +4532,8 @@ nsDOMSelection::Extend(nsIDOMNode* aParentNode, PRInt32 aOffset)
|
|||
printf ("Sel. Extend set to null parent.\n");
|
||||
}
|
||||
#endif
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -4572,6 +4603,8 @@ nsDOMSelection::ContainsNode(nsIDOMNode* aNode, PRBool aRecursive, PRBool* aYes)
|
|||
nsresult
|
||||
nsDOMSelection::GetPresContext(nsIPresContext **aPresContext)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
nsIFocusTracker *tracker = mFrameSelection->GetTracker();
|
||||
|
||||
if (!tracker)
|
||||
|
@ -4584,6 +4617,8 @@ nsresult
|
|||
nsDOMSelection::GetPresShell(nsIPresShell **aPresShell)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
nsIFocusTracker *tracker = mFrameSelection->GetTracker();
|
||||
|
||||
|
@ -4614,6 +4649,8 @@ nsDOMSelection::GetRootScrollableView(nsIScrollableView **aScrollableView)
|
|||
// NOTE: This method returns a NON-AddRef'd pointer
|
||||
// to the scrollable view!
|
||||
//
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
|
@ -4648,6 +4685,8 @@ nsresult
|
|||
nsDOMSelection::GetFrameToRootViewOffset(nsIFrame *aFrame, nscoord *aX, nscoord *aY)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
if (!aFrame || !aX || !aY) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
@ -4705,6 +4744,8 @@ nsresult
|
|||
nsDOMSelection::GetPointFromOffset(nsIFrame *aFrame, PRInt32 aContentOffset, nsPoint *aPoint)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
if (!aFrame || !aPoint)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
|
@ -4800,6 +4841,8 @@ nsresult
|
|||
nsDOMSelection::GetSelectionRegionRect(SelectionRegion aRegion, nsRect *aRect)
|
||||
{
|
||||
nsresult result = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
if (!aRect)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
@ -4976,6 +5019,8 @@ nsDOMSelection::ScrollRectIntoView(nsRect& aRect,
|
|||
PRIntn aHPercent)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
nsIScrollableView *scrollingView = 0;
|
||||
|
||||
|
@ -5052,6 +5097,8 @@ NS_IMETHODIMP
|
|||
nsDOMSelection::ScrollIntoView(SelectionRegion aRegion)
|
||||
{
|
||||
nsresult result;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (mFrameSelection->GetBatching())
|
||||
return NS_OK;
|
||||
|
@ -5119,6 +5166,8 @@ nsDOMSelection::NotifySelectionListeners()
|
|||
{
|
||||
if (!mSelectionListeners)
|
||||
return NS_ERROR_FAILURE;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (mFrameSelection->GetBatching()){
|
||||
mFrameSelection->SetDirty();
|
||||
|
@ -5152,6 +5201,8 @@ nsDOMSelection::NotifySelectionListeners()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::StartBatchChanges()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->StartBatchChanges();
|
||||
}
|
||||
|
||||
|
@ -5160,6 +5211,8 @@ nsDOMSelection::StartBatchChanges()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::EndBatchChanges()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->EndBatchChanges();
|
||||
}
|
||||
|
||||
|
@ -5168,6 +5221,8 @@ nsDOMSelection::EndBatchChanges()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::DeleteFromDocument()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->DeleteFromDocument();
|
||||
}
|
||||
|
||||
|
|
|
@ -115,6 +115,10 @@
|
|||
{/* {905F80F1-8A7B-11d2-918C-0080C8E44DB5}*/ \
|
||||
0x905f80f1, 0x8a7b, 0x11d2, { 0x91, 0x8c, 0x0, 0x80, 0xc8, 0xe4, 0x4d, 0xb5 } }
|
||||
|
||||
#define NS_DOMSELECTION_CID \
|
||||
{/* {C87A37FC-8109-4ce2-A322-8CDEC925379F}*/ \
|
||||
0xc87a37fc, 0x8109, 0x4ce2, { 0xa3, 0x22, 0x8c, 0xde, 0xc9, 0x25, 0x37, 0x9f } }
|
||||
|
||||
#define NS_RANGE_CID \
|
||||
{/* {56AD2981-8A87-11d2-918C-0080C8E44DB5}*/ \
|
||||
0x56ad2981, 0x8a87, 0x11d2, { 0x91, 0x8c, 0x0, 0x80, 0xc8, 0xe4, 0x4d, 0xb5 } }
|
||||
|
|
|
@ -79,6 +79,8 @@ static NS_DEFINE_IID(kHTMLOptionElementCID, NS_HTMLOPTIONELEMENT_CID);
|
|||
|
||||
static NS_DEFINE_CID(kSelectionCID, NS_SELECTION_CID);
|
||||
static NS_DEFINE_IID(kFrameSelectionCID, NS_FRAMESELECTION_CID);
|
||||
static NS_DEFINE_IID(kDOMSelectionCID, NS_DOMSELECTION_CID);
|
||||
|
||||
static NS_DEFINE_IID(kRangeCID, NS_RANGE_CID);
|
||||
static NS_DEFINE_IID(kContentIteratorCID, NS_CONTENTITERATOR_CID);
|
||||
static NS_DEFINE_IID(kGeneratedContentIteratorCID, NS_GENERATEDCONTENTITERATOR_CID);
|
||||
|
@ -106,6 +108,7 @@ static NS_DEFINE_CID(kAutoCopyServiceCID, NS_AUTOCOPYSERVICE_CID);
|
|||
|
||||
|
||||
extern nsresult NS_NewSelection(nsIFrameSelection** aResult);
|
||||
extern nsresult NS_NewDomSelection(nsIDOMSelection** aResult);
|
||||
extern nsresult NS_NewRange(nsIDOMRange** aResult);
|
||||
extern nsresult NS_NewContentIterator(nsIContentIterator** aResult);
|
||||
extern nsresult NS_NewGenRegularIterator(nsIContentIterator** aResult);
|
||||
|
@ -238,6 +241,13 @@ nsLayoutFactory::CreateInstance(nsISupports *aOuter,
|
|||
return res;
|
||||
}
|
||||
}
|
||||
else if (mClassID.Equals(kDOMSelectionCID)) {
|
||||
res = NS_NewDomSelection((nsIDOMSelection**)&inst);
|
||||
if (NS_FAILED(res)) {
|
||||
LOG_NEW_FAILURE("NS_NewDomSelection", res);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
else if (mClassID.Equals(kRangeCID)) {
|
||||
res = NS_NewRange((nsIDOMRange **)&inst);
|
||||
if (NS_FAILED(res)) {
|
||||
|
|
|
@ -737,7 +737,9 @@ nsEventStateManager::PostHandleEvent(nsIPresContext* aPresContext,
|
|||
if ((ui->mUserFocus != NS_STYLE_USER_FOCUS_IGNORE) &&
|
||||
(ui->mUserFocus != NS_STYLE_USER_FOCUS_NONE)) {
|
||||
currFrame->GetContent(getter_AddRefs(newFocus));
|
||||
break;
|
||||
nsCOMPtr<nsIDOMElement> domElement(do_QueryInterface(newFocus));
|
||||
if (domElement)
|
||||
break;
|
||||
}
|
||||
currFrame->GetParent(&currFrame);
|
||||
}
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
#include "nsFileControlFrame.h"
|
||||
#include "nsFormFrame.h"
|
||||
|
||||
#ifdef DEBUG_MJUDGE
|
||||
#define DEBUG_NEWFRAME 1
|
||||
#ifdef DEBUG_mjudge
|
||||
#define DEBUG_NEWFRAME 1
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
class nsIEditor;
|
||||
class nsIDocShell;
|
||||
class nsISelectionController;
|
||||
|
||||
|
||||
#define NS_IGFXTEXTCONTROLFRAME_IID \
|
||||
{/* d3ea33ea-9e00-11d3-bccc-0060b0fc76bd*/ \
|
||||
|
@ -46,5 +48,28 @@ public:
|
|||
|
||||
NS_IMETHOD SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd) = 0;
|
||||
NS_IMETHOD GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd) = 0;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#define NS_IGFXTEXTCONTROLFRAME2_IID \
|
||||
{/* A744CFC9-2DA8-416d-A058-ADB1D4B3B534*/ \
|
||||
0xa744cfc9, 0x2da8, 0x416d, \
|
||||
{ 0xa0, 0x58, 0xad, 0xb1, 0xd4, 0xb3, 0xb5, 0x34 } }
|
||||
|
||||
class nsIGfxTextControlFrame2 : public nsISupports
|
||||
{
|
||||
public:
|
||||
static const nsIID& GetIID() { static nsIID iid = NS_IGFXTEXTCONTROLFRAME2_IID; return iid; }
|
||||
|
||||
NS_IMETHOD GetEditor(nsIEditor **aEditor) = 0;
|
||||
|
||||
NS_IMETHOD GetTextLength(PRInt32* aTextLength) = 0;
|
||||
|
||||
NS_IMETHOD SetSelectionStart(PRInt32 aSelectionStart) = 0;
|
||||
NS_IMETHOD SetSelectionEnd(PRInt32 aSelectionEnd) = 0;
|
||||
|
||||
NS_IMETHOD SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd) = 0;
|
||||
NS_IMETHOD GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd) = 0;
|
||||
|
||||
NS_IMETHOD GetSelectionController(nsISelectionController **aSelCon) = 0;
|
||||
};
|
||||
|
|
|
@ -6307,17 +6307,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
nsGUIEvent* aEvent,
|
||||
nsEventStatus* aEventStatus)
|
||||
{
|
||||
|
||||
nsresult result;
|
||||
if (aEvent->message == NS_MOUSE_MOVE) {
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_SUCCEEDED(rv)){
|
||||
nsCOMPtr<nsIFrameSelection> frameselection;
|
||||
if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
}
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(result) || !selCon)
|
||||
return result?result:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIFrameSelection> frameSelection = do_QueryInterface(selCon);
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (!frameSelection || NS_FAILED(frameSelection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
|
||||
if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN || aEvent->message == NS_MOUSE_MOVE ||
|
||||
|
@ -6330,7 +6330,6 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
CaptureMouse(aPresContext, PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult result;
|
||||
nsIFrame *resultFrame = nsnull;//this will be passed the handle event when we
|
||||
//can tell who to pass it to
|
||||
nsCOMPtr<nsILineIterator> it;
|
||||
|
|
|
@ -6307,17 +6307,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
nsGUIEvent* aEvent,
|
||||
nsEventStatus* aEventStatus)
|
||||
{
|
||||
|
||||
nsresult result;
|
||||
if (aEvent->message == NS_MOUSE_MOVE) {
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_SUCCEEDED(rv)){
|
||||
nsCOMPtr<nsIFrameSelection> frameselection;
|
||||
if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
}
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(result) || !selCon)
|
||||
return result?result:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIFrameSelection> frameSelection = do_QueryInterface(selCon);
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (!frameSelection || NS_FAILED(frameSelection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
|
||||
if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN || aEvent->message == NS_MOUSE_MOVE ||
|
||||
|
@ -6330,7 +6330,6 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
CaptureMouse(aPresContext, PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult result;
|
||||
nsIFrame *resultFrame = nsnull;//this will be passed the handle event when we
|
||||
//can tell who to pass it to
|
||||
nsCOMPtr<nsILineIterator> it;
|
||||
|
|
|
@ -6307,17 +6307,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
nsGUIEvent* aEvent,
|
||||
nsEventStatus* aEventStatus)
|
||||
{
|
||||
|
||||
nsresult result;
|
||||
if (aEvent->message == NS_MOUSE_MOVE) {
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_SUCCEEDED(rv)){
|
||||
nsCOMPtr<nsIFrameSelection> frameselection;
|
||||
if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
}
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(result) || !selCon)
|
||||
return result?result:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIFrameSelection> frameSelection = do_QueryInterface(selCon);
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (!frameSelection || NS_FAILED(frameSelection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
|
||||
if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN || aEvent->message == NS_MOUSE_MOVE ||
|
||||
|
@ -6330,7 +6330,6 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
CaptureMouse(aPresContext, PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult result;
|
||||
nsIFrame *resultFrame = nsnull;//this will be passed the handle event when we
|
||||
//can tell who to pass it to
|
||||
nsCOMPtr<nsILineIterator> it;
|
||||
|
|
|
@ -60,6 +60,8 @@
|
|||
#include "nsIDOMRange.h"
|
||||
#include "nsITableLayout.h" //selection neccesity
|
||||
#include "nsITableCellLayout.h"// "
|
||||
#include "nsIGfxTextControlFrame.h"
|
||||
|
||||
|
||||
|
||||
// Some Misc #defines
|
||||
|
@ -654,76 +656,71 @@ nsFrame::Paint(nsIPresContext* aPresContext,
|
|||
const nsRect& aDirtyRect,
|
||||
nsFramePaintLayer aWhichLayer)
|
||||
{
|
||||
//if (NS_FRAME_PAINT_LAYER_FOREGROUND == aWhichLayer) {
|
||||
/** GetDocument
|
||||
*/
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
result = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
result = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
PRBool displyNonTextSelection = PR_TRUE;
|
||||
result = shell->GetDisplayNonTextSelection(&displyNonTextSelection);
|
||||
if (NS_FAILED(result))
|
||||
PRBool displaySelection = PR_TRUE;
|
||||
result = shell->GetDisplayNonTextSelection(&displaySelection);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
if (!displaySelection)
|
||||
return NS_OK;
|
||||
if (mContent) {
|
||||
result = mContent->GetDocument(*getter_AddRefs(doc));
|
||||
}
|
||||
|
||||
//check frame selection state
|
||||
PRBool isSelected;
|
||||
nsFrameState frameState;
|
||||
GetFrameState(&frameState);
|
||||
isSelected = (frameState & NS_FRAME_SELECTED_CONTENT) == NS_FRAME_SELECTED_CONTENT;
|
||||
//if not selected then return
|
||||
if (!isSelected)
|
||||
return NS_OK; //nothing to do
|
||||
|
||||
//get the selection controller
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
PRInt16 selectionValue;
|
||||
selCon->GetDisplaySelection(&selectionValue);
|
||||
displaySelection = selectionValue > nsISelectionController::SELECTION_HIDDEN;
|
||||
//check display selection state.
|
||||
if (!displaySelection)
|
||||
return NS_OK; //if frame does not allow selection. do nothing
|
||||
|
||||
|
||||
nsCOMPtr<nsIContent> newContent;
|
||||
result = mContent->GetParent(*getter_AddRefs(newContent));
|
||||
|
||||
//check to see if we are anonymouse content
|
||||
PRInt32 offset;
|
||||
if (NS_SUCCEEDED(result) && newContent){
|
||||
result = newContent->IndexOf(mContent, offset);
|
||||
if (NS_FAILED(result))
|
||||
{
|
||||
return result;
|
||||
PRInt16 displaySelection = displyNonTextSelection;
|
||||
if (!displaySelection)
|
||||
return NS_OK;
|
||||
if (mContent) {
|
||||
result = mContent->GetDocument(*getter_AddRefs(doc));
|
||||
}
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(result) || !selCon)
|
||||
return result? result:NS_ERROR_FAILURE;
|
||||
SelectionDetails *details;
|
||||
if (NS_SUCCEEDED(result) && shell){
|
||||
|
||||
selCon->GetDisplaySelection(&displaySelection);
|
||||
nsFrameState frameState;
|
||||
PRBool isSelected;
|
||||
GetFrameState(&frameState);
|
||||
isSelected = (frameState & NS_FRAME_SELECTED_CONTENT) == NS_FRAME_SELECTED_CONTENT;
|
||||
// PRInt32 selectionStartOffset = 0;//frame coordinates
|
||||
// PRInt32 selectionEndOffset = 0;//frame coordinates
|
||||
|
||||
if (!displaySelection || !isSelected)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMSelection> selection;
|
||||
nsCOMPtr<nsIFrameSelection> frameSelection;
|
||||
|
||||
nsCOMPtr<nsIContent> newContent;
|
||||
result = mContent->GetParent(*getter_AddRefs(newContent));
|
||||
|
||||
SelectionDetails *details;
|
||||
PRInt32 offset;
|
||||
if (NS_SUCCEEDED(result) && newContent){
|
||||
result = newContent->IndexOf(mContent, offset);
|
||||
if (NS_FAILED(result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if (NS_SUCCEEDED(result) && selCon)
|
||||
{
|
||||
frameSelection = do_QueryInterface(selCon); //this MAY implement
|
||||
}
|
||||
|
||||
if (NS_SUCCEEDED(result) && shell){
|
||||
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
nsCOMPtr<nsIFrameSelection> frameselection;
|
||||
if (NS_SUCCEEDED(result) && selCon)
|
||||
{
|
||||
frameSelection = do_QueryInterface(selCon); //this MAY implement
|
||||
}
|
||||
if (!frameSelection)
|
||||
result = shell->GetFrameSelection(getter_AddRefs(frameSelection));
|
||||
if (NS_SUCCEEDED(result) && frameSelection){
|
||||
result = frameSelection->LookUpSelection(newContent, offset,
|
||||
1, &details, PR_FALSE);
|
||||
}
|
||||
if (!frameSelection)
|
||||
result = shell->GetFrameSelection(getter_AddRefs(frameSelection));
|
||||
if (NS_SUCCEEDED(result) && frameSelection){
|
||||
result = frameSelection->LookUpSelection(newContent, offset,
|
||||
1, &details, PR_FALSE);//look up to see what selection(s) are on this frame
|
||||
}
|
||||
//}
|
||||
}
|
||||
if (details)
|
||||
{
|
||||
nsRect rect;
|
||||
|
@ -741,8 +738,6 @@ nsFrame::Paint(nsIPresContext* aPresContext,
|
|||
details = deletingDetails;
|
||||
}
|
||||
delete details;
|
||||
//aRenderingContext.DrawLine(rect.x, rect.y, rect.XMost(), rect.YMost());
|
||||
//aRenderingContext.DrawLine(rect.x, rect.YMost(), rect.XMost(), rect.y);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -972,10 +967,18 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
|
|||
{
|
||||
if (!IsMouseCaptured(aPresContext))
|
||||
CaptureMouse(aPresContext, PR_TRUE);
|
||||
if (DisplaySelection(aPresContext) == nsISelectionController::SELECTION_OFF) {
|
||||
return NS_OK;
|
||||
|
||||
PRInt16 displayresult = nsISelectionController::SELECTION_OFF;
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_SUCCEEDED(rv) && selCon) {
|
||||
selCon->GetDisplaySelection(&displayresult);
|
||||
if (displayresult == nsISelectionController::SELECTION_OFF)
|
||||
return NS_OK;//nothing to do we cannot affect selection from here
|
||||
}
|
||||
|
||||
|
||||
nsMouseEvent *me = (nsMouseEvent *)aEvent;
|
||||
if (me->clickCount >1 )
|
||||
return HandleMultiplePress(aPresContext,aEvent,aEventStatus);
|
||||
|
@ -986,7 +989,7 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
|
|||
if (!IsSelectable(this))
|
||||
return NS_OK;
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_SUCCEEDED(rv) && shell) {
|
||||
PRInt32 startPos = 0;
|
||||
// PRUint32 contentOffset = 0;
|
||||
|
@ -1992,23 +1995,19 @@ nsFrame::GetSelectionController(nsIPresContext *aPresContext, nsISelectionContro
|
|||
nsIFrame *tmp = this;
|
||||
while ( NS_SUCCEEDED(tmp->GetParent(&tmp)) && tmp)
|
||||
{
|
||||
tmp->GetFrameState(&state);
|
||||
if (! (state & NS_FRAME_INDEPENDENT_SELECTION)) //we have found the nsGfx*
|
||||
nsIGfxTextControlFrame2 *tcf;
|
||||
if (NS_SUCCEEDED(tmp->QueryInterface(nsIGfxTextControlFrame2::GetIID(),(void**)&tcf)))
|
||||
{
|
||||
nsFrame* castParent = NS_STATIC_CAST(nsFrame *,tmp);
|
||||
return castParent->GetSelectionController(aPresContext, aSelCon);
|
||||
return tcf->GetSelectionController(aSelCon);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
if (NS_SUCCEEDED(aPresContext->GetShell(getter_AddRefs(shell))) && shell)
|
||||
{
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
if (NS_SUCCEEDED(aPresContext->GetShell(getter_AddRefs(shell))) && shell)
|
||||
{
|
||||
nsCOMPtr<nsISelectionController> selCon = do_QueryInterface(shell);
|
||||
NS_IF_ADDREF(*aSelCon = selCon);
|
||||
return NS_OK;
|
||||
}
|
||||
nsCOMPtr<nsISelectionController> selCon = do_QueryInterface(shell);
|
||||
NS_IF_ADDREF(*aSelCon = selCon);
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -111,6 +111,7 @@ class nsAutoScrollTimer;
|
|||
class nsDOMSelection : public nsIDOMSelection , public nsIScriptObjectOwner, public nsSupportsWeakReference
|
||||
{
|
||||
public:
|
||||
nsDOMSelection();
|
||||
nsDOMSelection(nsSelection *aList);
|
||||
virtual ~nsDOMSelection();
|
||||
|
||||
|
@ -523,15 +524,21 @@ nsresult NS_NewSelection(nsIFrameSelection **aFrameSelection)
|
|||
if (!rlist)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
*aFrameSelection = (nsIFrameSelection *)rlist;
|
||||
nsresult result = rlist->AddRef();
|
||||
if (!NS_SUCCEEDED(result))
|
||||
{
|
||||
delete rlist;
|
||||
}
|
||||
return result;
|
||||
rlist->AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult NS_NewDomSelection(nsIDOMSelection **aDomSelection);
|
||||
|
||||
nsresult NS_NewDomSelection(nsIDOMSelection **aDomSelection)
|
||||
{
|
||||
nsDOMSelection *rlist = new nsDOMSelection;
|
||||
if (!rlist)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
*aDomSelection = (nsIDOMSelection *)rlist;
|
||||
rlist->AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//Horrible statics but no choice
|
||||
nsIAtom *nsSelection::sTableAtom = 0;
|
||||
|
@ -781,12 +788,12 @@ nsSelection::nsSelection()
|
|||
if (mDomSelections[index])
|
||||
autoCopyService->Listen(mDomSelections[index]);
|
||||
}
|
||||
mDisplaySelection = nsISelectionController::SELECTION_ON;
|
||||
mDisplaySelection = nsISelectionController::SELECTION_OFF;
|
||||
}
|
||||
|
||||
|
||||
|
||||
nsSelection::~nsSelection()
|
||||
nsSelection::~nsSelection()
|
||||
{
|
||||
if (sInstanceCount <= 1)
|
||||
{
|
||||
|
@ -1608,10 +1615,8 @@ nsSelection::TakeFocus(nsIContent *aNewFocus, PRUint32 aContentOffset,
|
|||
nsCOMPtr<nsIContent> parent2;
|
||||
if (NS_FAILED(aNewFocus->GetParent(*getter_AddRefs(parent))) || !parent)
|
||||
return NS_ERROR_FAILURE;
|
||||
//if (NS_FAILED(parent->GetParent(*getter_AddRefs(parent2))) || !parent2)
|
||||
//return NS_ERROR_FAILURE;
|
||||
|
||||
//END HACKHACKHACK /checking for root frames/content
|
||||
|
||||
PRInt8 index = GetIndexFromSelectionType(nsISelectionController::SELECTION_NORMAL);
|
||||
domNode = do_QueryInterface(aNewFocus);
|
||||
//traverse through document and unselect crap here
|
||||
|
@ -1688,7 +1693,7 @@ nsSelection::SetMouseDownState(PRBool aState)
|
|||
mSelectingTableCells = PR_FALSE;
|
||||
mStartSelectedCell = nsnull;
|
||||
mEndSelectedCell = nsnull;
|
||||
NotifySelectionListeners(nsISelectionController::SELECTION_NORMAL);
|
||||
//NotifySelectionListeners(nsISelectionController::SELECTION_NORMAL);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -2625,6 +2630,18 @@ nsDOMSelection::nsDOMSelection(nsSelection *aList)
|
|||
}
|
||||
|
||||
|
||||
nsDOMSelection::nsDOMSelection()
|
||||
{
|
||||
mFixupState = PR_FALSE;
|
||||
mDirection = eDirNext;
|
||||
NS_NewISupportsArray(getter_AddRefs(mRangeArray));
|
||||
mScriptObject = nsnull;
|
||||
mAutoScrollTimer = nsnull;
|
||||
NS_NewISupportsArray(getter_AddRefs(mSelectionListeners));
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
|
||||
nsDOMSelection::~nsDOMSelection()
|
||||
{
|
||||
|
@ -2986,7 +3003,7 @@ nsDOMSelection::GetPrimaryFrameForAnchorNode(nsIFrame **aReturnFrame)
|
|||
PRInt32 frameOffset = 0;
|
||||
*aReturnFrame = 0;
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(FetchAnchorNode());
|
||||
if (content)
|
||||
if (content && mFrameSelection)
|
||||
return mFrameSelection->GetFrameForNodeOffset(content, FetchAnchorOffset(),aReturnFrame, &frameOffset);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
@ -3001,7 +3018,7 @@ nsDOMSelection::GetPrimaryFrameForFocusNode(nsIFrame **aReturnFrame)
|
|||
*aReturnFrame = 0;
|
||||
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(FetchFocusNode());
|
||||
if (content)
|
||||
if (content && mFrameSelection)
|
||||
return mFrameSelection->GetFrameForNodeOffset(content, FetchFocusOffset(),aReturnFrame, &frameOffset);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
@ -3017,6 +3034,8 @@ nsDOMSelection::selectFrames(nsIPresContext* aPresContext,
|
|||
nsIPresShell *aPresShell,
|
||||
PRBool aFlags)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIGeneratedContentIterator> genericiter = do_QueryInterface(aInnerIter);
|
||||
if (genericiter && aPresShell)
|
||||
|
@ -3065,6 +3084,8 @@ nsDOMSelection::selectFrames(nsIPresContext* aPresContext,
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::selectFrames(nsIPresContext* aPresContext, nsIDOMRange *aRange, PRBool aFlags)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
if (!aRange || !aPresContext)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
nsCOMPtr<nsIContentIterator> iter;
|
||||
|
@ -3314,6 +3335,8 @@ nsresult
|
|||
nsDOMSelection::StartAutoScrollTimer(nsIPresContext *aPresContext, nsIFrame *aFrame, nsPoint& aPoint, PRUint32 aDelay)
|
||||
{
|
||||
nsresult result;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (!mAutoScrollTimer)
|
||||
{
|
||||
|
@ -3572,6 +3595,8 @@ nsDOMSelection::GetEnumerator(nsIEnumerator **aIterator)
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::ClearSelection()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
nsCOMPtr<nsIPresContext> presContext;
|
||||
GetPresContext(getter_AddRefs(presContext));
|
||||
|
||||
|
@ -3608,7 +3633,8 @@ nsDOMSelection::AddRange(nsIDOMRange* aRange)
|
|||
GetPresContext(getter_AddRefs(presContext));
|
||||
selectFrames(presContext, aRange, PR_TRUE);
|
||||
//ScrollIntoView(); this should not happen automatically
|
||||
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -3632,6 +3658,8 @@ nsDOMSelection::RemoveRange(nsIDOMRange* aRange)
|
|||
ScrollIntoView();
|
||||
}
|
||||
}
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -3695,7 +3723,8 @@ nsDOMSelection::Collapse(nsIDOMNode* aParentNode, PRInt32 aOffset)
|
|||
selectFrames(presContext, range,PR_TRUE);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -4503,6 +4532,8 @@ nsDOMSelection::Extend(nsIDOMNode* aParentNode, PRInt32 aOffset)
|
|||
printf ("Sel. Extend set to null parent.\n");
|
||||
}
|
||||
#endif
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->NotifySelectionListeners(GetType());
|
||||
}
|
||||
|
||||
|
@ -4572,6 +4603,8 @@ nsDOMSelection::ContainsNode(nsIDOMNode* aNode, PRBool aRecursive, PRBool* aYes)
|
|||
nsresult
|
||||
nsDOMSelection::GetPresContext(nsIPresContext **aPresContext)
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
nsIFocusTracker *tracker = mFrameSelection->GetTracker();
|
||||
|
||||
if (!tracker)
|
||||
|
@ -4584,6 +4617,8 @@ nsresult
|
|||
nsDOMSelection::GetPresShell(nsIPresShell **aPresShell)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
nsIFocusTracker *tracker = mFrameSelection->GetTracker();
|
||||
|
||||
|
@ -4614,6 +4649,8 @@ nsDOMSelection::GetRootScrollableView(nsIScrollableView **aScrollableView)
|
|||
// NOTE: This method returns a NON-AddRef'd pointer
|
||||
// to the scrollable view!
|
||||
//
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
|
@ -4648,6 +4685,8 @@ nsresult
|
|||
nsDOMSelection::GetFrameToRootViewOffset(nsIFrame *aFrame, nscoord *aX, nscoord *aY)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
if (!aFrame || !aX || !aY) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
@ -4705,6 +4744,8 @@ nsresult
|
|||
nsDOMSelection::GetPointFromOffset(nsIFrame *aFrame, PRInt32 aContentOffset, nsPoint *aPoint)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
if (!aFrame || !aPoint)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
|
@ -4800,6 +4841,8 @@ nsresult
|
|||
nsDOMSelection::GetSelectionRegionRect(SelectionRegion aRegion, nsRect *aRect)
|
||||
{
|
||||
nsresult result = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_ERROR_FAILURE;//nothing to do
|
||||
|
||||
if (!aRect)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
@ -4976,6 +5019,8 @@ nsDOMSelection::ScrollRectIntoView(nsRect& aRect,
|
|||
PRIntn aHPercent)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
nsIScrollableView *scrollingView = 0;
|
||||
|
||||
|
@ -5052,6 +5097,8 @@ NS_IMETHODIMP
|
|||
nsDOMSelection::ScrollIntoView(SelectionRegion aRegion)
|
||||
{
|
||||
nsresult result;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (mFrameSelection->GetBatching())
|
||||
return NS_OK;
|
||||
|
@ -5119,6 +5166,8 @@ nsDOMSelection::NotifySelectionListeners()
|
|||
{
|
||||
if (!mSelectionListeners)
|
||||
return NS_ERROR_FAILURE;
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
|
||||
if (mFrameSelection->GetBatching()){
|
||||
mFrameSelection->SetDirty();
|
||||
|
@ -5152,6 +5201,8 @@ nsDOMSelection::NotifySelectionListeners()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::StartBatchChanges()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->StartBatchChanges();
|
||||
}
|
||||
|
||||
|
@ -5160,6 +5211,8 @@ nsDOMSelection::StartBatchChanges()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::EndBatchChanges()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->EndBatchChanges();
|
||||
}
|
||||
|
||||
|
@ -5168,6 +5221,8 @@ nsDOMSelection::EndBatchChanges()
|
|||
NS_IMETHODIMP
|
||||
nsDOMSelection::DeleteFromDocument()
|
||||
{
|
||||
if (!mFrameSelection)
|
||||
return NS_OK;//nothing to do
|
||||
return mFrameSelection->DeleteFromDocument();
|
||||
}
|
||||
|
||||
|
|
|
@ -1027,7 +1027,7 @@ DrawSelectionIterator::CurrentForeGroundColor()
|
|||
|
||||
PRBool
|
||||
DrawSelectionIterator::CurrentBackGroundColor(nscolor &aColor)
|
||||
{
|
||||
{
|
||||
//Find color based on mTypes[mCurrentIdx];
|
||||
if (!mTypes)
|
||||
{
|
||||
|
@ -1750,12 +1750,13 @@ nsTextFrame::PaintUnicodeText(nsIPresContext* aPresContext,
|
|||
if (NS_FAILED(rv) || !shell)
|
||||
return;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
selCon = do_QueryInterface(shell, &rv);
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(rv) || !selCon)
|
||||
return;
|
||||
|
||||
PRInt16 displaySelection;
|
||||
selCon->GetDisplaySelection(&displaySelection);
|
||||
PRInt16 selectionValue;
|
||||
selCon->GetDisplaySelection(&selectionValue);
|
||||
PRBool displaySelection = selectionValue > nsISelectionController::SELECTION_HIDDEN;
|
||||
|
||||
// Make enough space to transform
|
||||
nsAutoTextBuffer paintBuffer;
|
||||
|
@ -1838,7 +1839,7 @@ nsTextFrame::PaintUnicodeText(nsIPresContext* aPresContext,
|
|||
}
|
||||
//while we have substrings...
|
||||
PRBool drawn = PR_FALSE;
|
||||
DrawSelectionIterator iter(details,text,(PRUint32)textLength,aTextStyle, displaySelection);
|
||||
DrawSelectionIterator iter(details,text,(PRUint32)textLength,aTextStyle, selectionValue);
|
||||
if (!iter.IsDone() && iter.First())
|
||||
{
|
||||
nscoord currentX = dx;
|
||||
|
@ -2275,12 +2276,13 @@ nsTextFrame::PaintTextSlowly(nsIPresContext* aPresContext,
|
|||
if (NS_FAILED(rv) || !shell)
|
||||
return;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
selCon = do_QueryInterface(shell, &rv);
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(rv) || !selCon)
|
||||
return;
|
||||
|
||||
PRInt16 displaySelection;
|
||||
selCon->GetDisplaySelection(&displaySelection);
|
||||
PRInt16 selectionValue;
|
||||
selCon->GetDisplaySelection(&selectionValue);
|
||||
PRBool displaySelection = selectionValue > nsISelectionController::SELECTION_HIDDEN;
|
||||
|
||||
|
||||
// Make enough space to transform
|
||||
|
@ -2356,7 +2358,7 @@ nsTextFrame::PaintTextSlowly(nsIPresContext* aPresContext,
|
|||
sdptr = sdptr->mNext;
|
||||
}
|
||||
|
||||
DrawSelectionIterator iter(details,text,(PRUint32)textLength,aTextStyle, displaySelection);
|
||||
DrawSelectionIterator iter(details,text,(PRUint32)textLength,aTextStyle, selectionValue);
|
||||
if (!iter.IsDone() && iter.First())
|
||||
{
|
||||
nscoord currentX = dx;
|
||||
|
@ -2421,13 +2423,14 @@ nsTextFrame::PaintAsciiText(nsIPresContext* aPresContext,
|
|||
if (NS_FAILED(rv) || !shell)
|
||||
return;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
selCon = do_QueryInterface(shell, &rv);
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(rv) || !selCon)
|
||||
return;
|
||||
|
||||
PRInt16 displaySelection;
|
||||
PRInt16 selectionValue;
|
||||
PRBool isSelected;
|
||||
selCon->GetDisplaySelection(&displaySelection);
|
||||
selCon->GetDisplaySelection(&selectionValue);
|
||||
PRBool displaySelection = selectionValue > nsISelectionController::SELECTION_HIDDEN;
|
||||
|
||||
isSelected = (mState & NS_FRAME_SELECTED_CONTENT) == NS_FRAME_SELECTED_CONTENT;
|
||||
|
||||
|
@ -2562,7 +2565,7 @@ nsTextFrame::PaintAsciiText(nsIPresContext* aPresContext,
|
|||
sdptr->mEnd = ip[sdptr->mEnd] - mContentOffset;
|
||||
sdptr = sdptr->mNext;
|
||||
}
|
||||
DrawSelectionIterator iter(details,(PRUnichar *)text,(PRUint32)textLength,aTextStyle, displaySelection);//ITS OK TO CAST HERE THE RESULT WE USE WILLNOT DO BAD CONVERSION
|
||||
DrawSelectionIterator iter(details,(PRUnichar *)text,(PRUint32)textLength,aTextStyle, selectionValue);//ITS OK TO CAST HERE THE RESULT WE USE WILLNOT DO BAD CONVERSION
|
||||
if (!iter.IsDone() && iter.First())
|
||||
{
|
||||
nscoord currentX = dx;
|
||||
|
@ -3420,9 +3423,10 @@ nsTextFrame::HandleMultiplePress(nsIPresContext* aPresContext,
|
|||
nsMouseEvent *me = (nsMouseEvent *)aEvent;
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
nsCOMPtr<nsISelectionController> selCon = do_QueryInterface(shell);
|
||||
if (NS_FAILED(rv) || !shell || !selCon)
|
||||
return rv ?rv:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(rv) || !selCon)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
if (me->clickCount > 2)//triple clicking
|
||||
{
|
||||
nsCOMPtr<nsIPref> mPrefs;
|
||||
|
|
|
@ -6307,17 +6307,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
nsGUIEvent* aEvent,
|
||||
nsEventStatus* aEventStatus)
|
||||
{
|
||||
|
||||
nsresult result;
|
||||
if (aEvent->message == NS_MOUSE_MOVE) {
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_SUCCEEDED(rv)){
|
||||
nsCOMPtr<nsIFrameSelection> frameselection;
|
||||
if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
}
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(result) || !selCon)
|
||||
return result?result:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIFrameSelection> frameSelection = do_QueryInterface(selCon);
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (!frameSelection || NS_FAILED(frameSelection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
|
||||
if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN || aEvent->message == NS_MOUSE_MOVE ||
|
||||
|
@ -6330,7 +6330,6 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
CaptureMouse(aPresContext, PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult result;
|
||||
nsIFrame *resultFrame = nsnull;//this will be passed the handle event when we
|
||||
//can tell who to pass it to
|
||||
nsCOMPtr<nsILineIterator> it;
|
||||
|
|
|
@ -6307,17 +6307,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
nsGUIEvent* aEvent,
|
||||
nsEventStatus* aEventStatus)
|
||||
{
|
||||
|
||||
nsresult result;
|
||||
if (aEvent->message == NS_MOUSE_MOVE) {
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_SUCCEEDED(rv)){
|
||||
nsCOMPtr<nsIFrameSelection> frameselection;
|
||||
if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
}
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(result) || !selCon)
|
||||
return result?result:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIFrameSelection> frameSelection = do_QueryInterface(selCon);
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (!frameSelection || NS_FAILED(frameSelection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
|
||||
if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN || aEvent->message == NS_MOUSE_MOVE ||
|
||||
|
@ -6330,7 +6330,6 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
CaptureMouse(aPresContext, PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult result;
|
||||
nsIFrame *resultFrame = nsnull;//this will be passed the handle event when we
|
||||
//can tell who to pass it to
|
||||
nsCOMPtr<nsILineIterator> it;
|
||||
|
|
|
@ -6307,17 +6307,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
nsGUIEvent* aEvent,
|
||||
nsEventStatus* aEventStatus)
|
||||
{
|
||||
|
||||
nsresult result;
|
||||
if (aEvent->message == NS_MOUSE_MOVE) {
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_SUCCEEDED(rv)){
|
||||
nsCOMPtr<nsIFrameSelection> frameselection;
|
||||
if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
}
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(result) || !selCon)
|
||||
return result?result:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIFrameSelection> frameSelection = do_QueryInterface(selCon);
|
||||
PRBool mouseDown = PR_FALSE;
|
||||
if (!frameSelection || NS_FAILED(frameSelection->GetMouseDownState(&mouseDown)) || !mouseDown)
|
||||
return NS_OK;//do not handle
|
||||
}
|
||||
|
||||
if (aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN || aEvent->message == NS_MOUSE_MOVE ||
|
||||
|
@ -6330,7 +6330,6 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext,
|
|||
CaptureMouse(aPresContext, PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult result;
|
||||
nsIFrame *resultFrame = nsnull;//this will be passed the handle event when we
|
||||
//can tell who to pass it to
|
||||
nsCOMPtr<nsILineIterator> it;
|
||||
|
|
|
@ -60,6 +60,8 @@
|
|||
#include "nsIDOMRange.h"
|
||||
#include "nsITableLayout.h" //selection neccesity
|
||||
#include "nsITableCellLayout.h"// "
|
||||
#include "nsIGfxTextControlFrame.h"
|
||||
|
||||
|
||||
|
||||
// Some Misc #defines
|
||||
|
@ -654,76 +656,71 @@ nsFrame::Paint(nsIPresContext* aPresContext,
|
|||
const nsRect& aDirtyRect,
|
||||
nsFramePaintLayer aWhichLayer)
|
||||
{
|
||||
//if (NS_FRAME_PAINT_LAYER_FOREGROUND == aWhichLayer) {
|
||||
/** GetDocument
|
||||
*/
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
result = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
result = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
|
||||
PRBool displyNonTextSelection = PR_TRUE;
|
||||
result = shell->GetDisplayNonTextSelection(&displyNonTextSelection);
|
||||
if (NS_FAILED(result))
|
||||
PRBool displaySelection = PR_TRUE;
|
||||
result = shell->GetDisplayNonTextSelection(&displaySelection);
|
||||
if (NS_FAILED(result))
|
||||
return result;
|
||||
if (!displaySelection)
|
||||
return NS_OK;
|
||||
if (mContent) {
|
||||
result = mContent->GetDocument(*getter_AddRefs(doc));
|
||||
}
|
||||
|
||||
//check frame selection state
|
||||
PRBool isSelected;
|
||||
nsFrameState frameState;
|
||||
GetFrameState(&frameState);
|
||||
isSelected = (frameState & NS_FRAME_SELECTED_CONTENT) == NS_FRAME_SELECTED_CONTENT;
|
||||
//if not selected then return
|
||||
if (!isSelected)
|
||||
return NS_OK; //nothing to do
|
||||
|
||||
//get the selection controller
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
PRInt16 selectionValue;
|
||||
selCon->GetDisplaySelection(&selectionValue);
|
||||
displaySelection = selectionValue > nsISelectionController::SELECTION_HIDDEN;
|
||||
//check display selection state.
|
||||
if (!displaySelection)
|
||||
return NS_OK; //if frame does not allow selection. do nothing
|
||||
|
||||
|
||||
nsCOMPtr<nsIContent> newContent;
|
||||
result = mContent->GetParent(*getter_AddRefs(newContent));
|
||||
|
||||
//check to see if we are anonymouse content
|
||||
PRInt32 offset;
|
||||
if (NS_SUCCEEDED(result) && newContent){
|
||||
result = newContent->IndexOf(mContent, offset);
|
||||
if (NS_FAILED(result))
|
||||
{
|
||||
return result;
|
||||
PRInt16 displaySelection = displyNonTextSelection;
|
||||
if (!displaySelection)
|
||||
return NS_OK;
|
||||
if (mContent) {
|
||||
result = mContent->GetDocument(*getter_AddRefs(doc));
|
||||
}
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(result) || !selCon)
|
||||
return result? result:NS_ERROR_FAILURE;
|
||||
SelectionDetails *details;
|
||||
if (NS_SUCCEEDED(result) && shell){
|
||||
|
||||
selCon->GetDisplaySelection(&displaySelection);
|
||||
nsFrameState frameState;
|
||||
PRBool isSelected;
|
||||
GetFrameState(&frameState);
|
||||
isSelected = (frameState & NS_FRAME_SELECTED_CONTENT) == NS_FRAME_SELECTED_CONTENT;
|
||||
// PRInt32 selectionStartOffset = 0;//frame coordinates
|
||||
// PRInt32 selectionEndOffset = 0;//frame coordinates
|
||||
|
||||
if (!displaySelection || !isSelected)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMSelection> selection;
|
||||
nsCOMPtr<nsIFrameSelection> frameSelection;
|
||||
|
||||
nsCOMPtr<nsIContent> newContent;
|
||||
result = mContent->GetParent(*getter_AddRefs(newContent));
|
||||
|
||||
SelectionDetails *details;
|
||||
PRInt32 offset;
|
||||
if (NS_SUCCEEDED(result) && newContent){
|
||||
result = newContent->IndexOf(mContent, offset);
|
||||
if (NS_FAILED(result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if (NS_SUCCEEDED(result) && selCon)
|
||||
{
|
||||
frameSelection = do_QueryInterface(selCon); //this MAY implement
|
||||
}
|
||||
|
||||
if (NS_SUCCEEDED(result) && shell){
|
||||
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
result = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
nsCOMPtr<nsIFrameSelection> frameselection;
|
||||
if (NS_SUCCEEDED(result) && selCon)
|
||||
{
|
||||
frameSelection = do_QueryInterface(selCon); //this MAY implement
|
||||
}
|
||||
if (!frameSelection)
|
||||
result = shell->GetFrameSelection(getter_AddRefs(frameSelection));
|
||||
if (NS_SUCCEEDED(result) && frameSelection){
|
||||
result = frameSelection->LookUpSelection(newContent, offset,
|
||||
1, &details, PR_FALSE);
|
||||
}
|
||||
if (!frameSelection)
|
||||
result = shell->GetFrameSelection(getter_AddRefs(frameSelection));
|
||||
if (NS_SUCCEEDED(result) && frameSelection){
|
||||
result = frameSelection->LookUpSelection(newContent, offset,
|
||||
1, &details, PR_FALSE);//look up to see what selection(s) are on this frame
|
||||
}
|
||||
//}
|
||||
}
|
||||
if (details)
|
||||
{
|
||||
nsRect rect;
|
||||
|
@ -741,8 +738,6 @@ nsFrame::Paint(nsIPresContext* aPresContext,
|
|||
details = deletingDetails;
|
||||
}
|
||||
delete details;
|
||||
//aRenderingContext.DrawLine(rect.x, rect.y, rect.XMost(), rect.YMost());
|
||||
//aRenderingContext.DrawLine(rect.x, rect.YMost(), rect.XMost(), rect.y);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -972,10 +967,18 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
|
|||
{
|
||||
if (!IsMouseCaptured(aPresContext))
|
||||
CaptureMouse(aPresContext, PR_TRUE);
|
||||
if (DisplaySelection(aPresContext) == nsISelectionController::SELECTION_OFF) {
|
||||
return NS_OK;
|
||||
|
||||
PRInt16 displayresult = nsISelectionController::SELECTION_OFF;
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_SUCCEEDED(rv) && selCon) {
|
||||
selCon->GetDisplaySelection(&displayresult);
|
||||
if (displayresult == nsISelectionController::SELECTION_OFF)
|
||||
return NS_OK;//nothing to do we cannot affect selection from here
|
||||
}
|
||||
|
||||
|
||||
nsMouseEvent *me = (nsMouseEvent *)aEvent;
|
||||
if (me->clickCount >1 )
|
||||
return HandleMultiplePress(aPresContext,aEvent,aEventStatus);
|
||||
|
@ -986,7 +989,7 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
|
|||
if (!IsSelectable(this))
|
||||
return NS_OK;
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_SUCCEEDED(rv) && shell) {
|
||||
PRInt32 startPos = 0;
|
||||
// PRUint32 contentOffset = 0;
|
||||
|
@ -1992,23 +1995,19 @@ nsFrame::GetSelectionController(nsIPresContext *aPresContext, nsISelectionContro
|
|||
nsIFrame *tmp = this;
|
||||
while ( NS_SUCCEEDED(tmp->GetParent(&tmp)) && tmp)
|
||||
{
|
||||
tmp->GetFrameState(&state);
|
||||
if (! (state & NS_FRAME_INDEPENDENT_SELECTION)) //we have found the nsGfx*
|
||||
nsIGfxTextControlFrame2 *tcf;
|
||||
if (NS_SUCCEEDED(tmp->QueryInterface(nsIGfxTextControlFrame2::GetIID(),(void**)&tcf)))
|
||||
{
|
||||
nsFrame* castParent = NS_STATIC_CAST(nsFrame *,tmp);
|
||||
return castParent->GetSelectionController(aPresContext, aSelCon);
|
||||
return tcf->GetSelectionController(aSelCon);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
if (NS_SUCCEEDED(aPresContext->GetShell(getter_AddRefs(shell))) && shell)
|
||||
{
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
if (NS_SUCCEEDED(aPresContext->GetShell(getter_AddRefs(shell))) && shell)
|
||||
{
|
||||
nsCOMPtr<nsISelectionController> selCon = do_QueryInterface(shell);
|
||||
NS_IF_ADDREF(*aSelCon = selCon);
|
||||
return NS_OK;
|
||||
}
|
||||
nsCOMPtr<nsISelectionController> selCon = do_QueryInterface(shell);
|
||||
NS_IF_ADDREF(*aSelCon = selCon);
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -651,10 +651,11 @@ public:
|
|||
NS_IMETHOD ScrollFrameIntoView(nsIFrame *aFrame);
|
||||
// caret handling
|
||||
NS_IMETHOD GetCaret(nsICaret **aOutCaret);
|
||||
NS_IMETHOD SetCaretEnabled(PRBool aaInEnable);
|
||||
NS_IMETHOD SetCaretEnabled(PRBool aInEnable);
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool aReadOnly);
|
||||
NS_IMETHOD GetCaretEnabled(PRBool *aOutEnabled);
|
||||
|
||||
NS_IMETHOD SetDisplayNonTextSelection(PRBool aaInEnable);
|
||||
NS_IMETHOD SetDisplayNonTextSelection(PRBool aInEnable);
|
||||
NS_IMETHOD GetDisplayNonTextSelection(PRBool *aOutEnable);
|
||||
|
||||
// nsISelectionController
|
||||
|
@ -1772,17 +1773,30 @@ NS_IMETHODIMP PresShell::SetCaretEnabled(PRBool aInEnable)
|
|||
if (mCaret && (mCaretEnabled != oldEnabled))
|
||||
{
|
||||
// Update the document's content and frame models.
|
||||
if (mDocument) mDocument->FlushPendingNotifications();
|
||||
if (mDocument)
|
||||
mDocument->FlushPendingNotifications();
|
||||
|
||||
if (mCaretEnabled)
|
||||
result = mCaret->SetCaretVisible(PR_TRUE);
|
||||
else
|
||||
result = mCaret->SetCaretVisible(PR_FALSE);
|
||||
nsCOMPtr<nsIDOMSelection> sel;
|
||||
if (NS_SUCCEEDED(GetSelection(nsISelectionController::SELECTION_NORMAL, getter_AddRefs(sel))) && sel)
|
||||
{
|
||||
result = mCaret->SetCaretVisible(mCaretEnabled, sel);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP PresShell::SetCaretReadOnly(PRBool aReadOnly)
|
||||
{
|
||||
nsCOMPtr<nsIDOMSelection> domSel;
|
||||
if (NS_SUCCEEDED(GetSelection(nsISelectionController::SELECTION_NORMAL, getter_AddRefs(domSel))) && domSel)
|
||||
{
|
||||
return mCaret->SetCaretReadOnly(aReadOnly, domSel);
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP PresShell::GetCaretEnabled(PRBool *aOutEnabled)
|
||||
{
|
||||
if (!aOutEnabled) { return NS_ERROR_INVALID_ARG; }
|
||||
|
|
|
@ -1027,7 +1027,7 @@ DrawSelectionIterator::CurrentForeGroundColor()
|
|||
|
||||
PRBool
|
||||
DrawSelectionIterator::CurrentBackGroundColor(nscolor &aColor)
|
||||
{
|
||||
{
|
||||
//Find color based on mTypes[mCurrentIdx];
|
||||
if (!mTypes)
|
||||
{
|
||||
|
@ -1750,12 +1750,13 @@ nsTextFrame::PaintUnicodeText(nsIPresContext* aPresContext,
|
|||
if (NS_FAILED(rv) || !shell)
|
||||
return;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
selCon = do_QueryInterface(shell, &rv);
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(rv) || !selCon)
|
||||
return;
|
||||
|
||||
PRInt16 displaySelection;
|
||||
selCon->GetDisplaySelection(&displaySelection);
|
||||
PRInt16 selectionValue;
|
||||
selCon->GetDisplaySelection(&selectionValue);
|
||||
PRBool displaySelection = selectionValue > nsISelectionController::SELECTION_HIDDEN;
|
||||
|
||||
// Make enough space to transform
|
||||
nsAutoTextBuffer paintBuffer;
|
||||
|
@ -1838,7 +1839,7 @@ nsTextFrame::PaintUnicodeText(nsIPresContext* aPresContext,
|
|||
}
|
||||
//while we have substrings...
|
||||
PRBool drawn = PR_FALSE;
|
||||
DrawSelectionIterator iter(details,text,(PRUint32)textLength,aTextStyle, displaySelection);
|
||||
DrawSelectionIterator iter(details,text,(PRUint32)textLength,aTextStyle, selectionValue);
|
||||
if (!iter.IsDone() && iter.First())
|
||||
{
|
||||
nscoord currentX = dx;
|
||||
|
@ -2275,12 +2276,13 @@ nsTextFrame::PaintTextSlowly(nsIPresContext* aPresContext,
|
|||
if (NS_FAILED(rv) || !shell)
|
||||
return;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
selCon = do_QueryInterface(shell, &rv);
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(rv) || !selCon)
|
||||
return;
|
||||
|
||||
PRInt16 displaySelection;
|
||||
selCon->GetDisplaySelection(&displaySelection);
|
||||
PRInt16 selectionValue;
|
||||
selCon->GetDisplaySelection(&selectionValue);
|
||||
PRBool displaySelection = selectionValue > nsISelectionController::SELECTION_HIDDEN;
|
||||
|
||||
|
||||
// Make enough space to transform
|
||||
|
@ -2356,7 +2358,7 @@ nsTextFrame::PaintTextSlowly(nsIPresContext* aPresContext,
|
|||
sdptr = sdptr->mNext;
|
||||
}
|
||||
|
||||
DrawSelectionIterator iter(details,text,(PRUint32)textLength,aTextStyle, displaySelection);
|
||||
DrawSelectionIterator iter(details,text,(PRUint32)textLength,aTextStyle, selectionValue);
|
||||
if (!iter.IsDone() && iter.First())
|
||||
{
|
||||
nscoord currentX = dx;
|
||||
|
@ -2421,13 +2423,14 @@ nsTextFrame::PaintAsciiText(nsIPresContext* aPresContext,
|
|||
if (NS_FAILED(rv) || !shell)
|
||||
return;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
selCon = do_QueryInterface(shell, &rv);
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(rv) || !selCon)
|
||||
return;
|
||||
|
||||
PRInt16 displaySelection;
|
||||
PRInt16 selectionValue;
|
||||
PRBool isSelected;
|
||||
selCon->GetDisplaySelection(&displaySelection);
|
||||
selCon->GetDisplaySelection(&selectionValue);
|
||||
PRBool displaySelection = selectionValue > nsISelectionController::SELECTION_HIDDEN;
|
||||
|
||||
isSelected = (mState & NS_FRAME_SELECTED_CONTENT) == NS_FRAME_SELECTED_CONTENT;
|
||||
|
||||
|
@ -2562,7 +2565,7 @@ nsTextFrame::PaintAsciiText(nsIPresContext* aPresContext,
|
|||
sdptr->mEnd = ip[sdptr->mEnd] - mContentOffset;
|
||||
sdptr = sdptr->mNext;
|
||||
}
|
||||
DrawSelectionIterator iter(details,(PRUnichar *)text,(PRUint32)textLength,aTextStyle, displaySelection);//ITS OK TO CAST HERE THE RESULT WE USE WILLNOT DO BAD CONVERSION
|
||||
DrawSelectionIterator iter(details,(PRUnichar *)text,(PRUint32)textLength,aTextStyle, selectionValue);//ITS OK TO CAST HERE THE RESULT WE USE WILLNOT DO BAD CONVERSION
|
||||
if (!iter.IsDone() && iter.First())
|
||||
{
|
||||
nscoord currentX = dx;
|
||||
|
@ -3420,9 +3423,10 @@ nsTextFrame::HandleMultiplePress(nsIPresContext* aPresContext,
|
|||
nsMouseEvent *me = (nsMouseEvent *)aEvent;
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
nsCOMPtr<nsISelectionController> selCon = do_QueryInterface(shell);
|
||||
if (NS_FAILED(rv) || !shell || !selCon)
|
||||
return rv ?rv:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsISelectionController> selCon;
|
||||
rv = GetSelectionController(aPresContext, getter_AddRefs(selCon));
|
||||
if (NS_FAILED(rv) || !selCon)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
if (me->clickCount > 2)//triple clicking
|
||||
{
|
||||
nsCOMPtr<nsIPref> mPrefs;
|
||||
|
|
|
@ -1132,7 +1132,7 @@ nsHTMLInputElement::GetTextLength(PRInt32* aTextLength)
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->GetTextLength(aTextLength);
|
||||
|
||||
|
@ -1148,7 +1148,7 @@ nsHTMLInputElement::SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectio
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->SetSelectionRange(aSelectionStart, aSelectionEnd);
|
||||
|
||||
|
@ -1173,7 +1173,7 @@ nsHTMLInputElement::SetSelectionStart(PRInt32 aSelectionStart)
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->SetSelectionStart(aSelectionStart);
|
||||
|
||||
|
@ -1199,7 +1199,7 @@ nsHTMLInputElement::SetSelectionEnd(PRInt32 aSelectionEnd)
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->SetSelectionEnd(aSelectionEnd);
|
||||
|
||||
|
@ -1215,7 +1215,7 @@ nsHTMLInputElement::GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelect
|
|||
nsresult rv = nsGenericHTMLElement::GetPrimaryFrame(this, formControlFrame);
|
||||
if (NS_SUCCEEDED(rv) && formControlFrame)
|
||||
{
|
||||
nsCOMPtr<nsIGfxTextControlFrame> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
nsCOMPtr<nsIGfxTextControlFrame2> textControlFrame(do_QueryInterface(formControlFrame));
|
||||
if (textControlFrame)
|
||||
textControlFrame->GetSelectionRange(aSelectionStart, aSelectionEnd);
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
class nsIEditor;
|
||||
class nsIDocShell;
|
||||
class nsISelectionController;
|
||||
|
||||
|
||||
#define NS_IGFXTEXTCONTROLFRAME_IID \
|
||||
{/* d3ea33ea-9e00-11d3-bccc-0060b0fc76bd*/ \
|
||||
|
@ -46,5 +48,28 @@ public:
|
|||
|
||||
NS_IMETHOD SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd) = 0;
|
||||
NS_IMETHOD GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd) = 0;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#define NS_IGFXTEXTCONTROLFRAME2_IID \
|
||||
{/* A744CFC9-2DA8-416d-A058-ADB1D4B3B534*/ \
|
||||
0xa744cfc9, 0x2da8, 0x416d, \
|
||||
{ 0xa0, 0x58, 0xad, 0xb1, 0xd4, 0xb3, 0xb5, 0x34 } }
|
||||
|
||||
class nsIGfxTextControlFrame2 : public nsISupports
|
||||
{
|
||||
public:
|
||||
static const nsIID& GetIID() { static nsIID iid = NS_IGFXTEXTCONTROLFRAME2_IID; return iid; }
|
||||
|
||||
NS_IMETHOD GetEditor(nsIEditor **aEditor) = 0;
|
||||
|
||||
NS_IMETHOD GetTextLength(PRInt32* aTextLength) = 0;
|
||||
|
||||
NS_IMETHOD SetSelectionStart(PRInt32 aSelectionStart) = 0;
|
||||
NS_IMETHOD SetSelectionEnd(PRInt32 aSelectionEnd) = 0;
|
||||
|
||||
NS_IMETHOD SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd) = 0;
|
||||
NS_IMETHOD GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd) = 0;
|
||||
|
||||
NS_IMETHOD GetSelectionController(nsISelectionController **aSelCon) = 0;
|
||||
};
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
class nsIEditor;
|
||||
class nsIDocShell;
|
||||
class nsISelectionController;
|
||||
|
||||
|
||||
#define NS_IGFXTEXTCONTROLFRAME_IID \
|
||||
{/* d3ea33ea-9e00-11d3-bccc-0060b0fc76bd*/ \
|
||||
|
@ -46,5 +48,28 @@ public:
|
|||
|
||||
NS_IMETHOD SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd) = 0;
|
||||
NS_IMETHOD GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd) = 0;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#define NS_IGFXTEXTCONTROLFRAME2_IID \
|
||||
{/* A744CFC9-2DA8-416d-A058-ADB1D4B3B534*/ \
|
||||
0xa744cfc9, 0x2da8, 0x416d, \
|
||||
{ 0xa0, 0x58, 0xad, 0xb1, 0xd4, 0xb3, 0xb5, 0x34 } }
|
||||
|
||||
class nsIGfxTextControlFrame2 : public nsISupports
|
||||
{
|
||||
public:
|
||||
static const nsIID& GetIID() { static nsIID iid = NS_IGFXTEXTCONTROLFRAME2_IID; return iid; }
|
||||
|
||||
NS_IMETHOD GetEditor(nsIEditor **aEditor) = 0;
|
||||
|
||||
NS_IMETHOD GetTextLength(PRInt32* aTextLength) = 0;
|
||||
|
||||
NS_IMETHOD SetSelectionStart(PRInt32 aSelectionStart) = 0;
|
||||
NS_IMETHOD SetSelectionEnd(PRInt32 aSelectionEnd) = 0;
|
||||
|
||||
NS_IMETHOD SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd) = 0;
|
||||
NS_IMETHOD GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd) = 0;
|
||||
|
||||
NS_IMETHOD GetSelectionController(nsISelectionController **aSelCon) = 0;
|
||||
};
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
#include "nsFileControlFrame.h"
|
||||
#include "nsFormFrame.h"
|
||||
|
||||
#ifdef DEBUG_MJUDGE
|
||||
#define DEBUG_NEWFRAME 1
|
||||
#ifdef DEBUG_mjudge
|
||||
#define DEBUG_NEWFRAME 1
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -45,6 +45,11 @@
|
|||
#include "nsIElementFactory.h"
|
||||
#include "nsIHTMLContent.h"
|
||||
#include "nsFormFrame.h"
|
||||
#include "nsIEditorIMESupport.h"
|
||||
#include "nsIDOMHTMLTextAreaElement.h"
|
||||
#include "nsINameSpaceManager.h"
|
||||
#include "nsINodeInfo.h"
|
||||
|
||||
|
||||
|
||||
#include "nsIContent.h"
|
||||
|
@ -96,6 +101,7 @@ public:
|
|||
NS_IMETHOD RepaintSelection(PRInt16 type);
|
||||
NS_IMETHOD RepaintSelection(nsIPresContext* aPresContext, SelectionType aSelectionType);
|
||||
NS_IMETHOD SetCaretEnabled(PRBool enabled);
|
||||
NS_IMETHOD SetCaretReadOnly(PRBool aReadOnly);
|
||||
NS_IMETHOD GetCaretEnabled(PRBool *_retval);
|
||||
NS_IMETHOD CharacterMove(PRBool aForward, PRBool aExtend);
|
||||
NS_IMETHOD WordMove(PRBool aForward, PRBool aExtend);
|
||||
|
@ -213,14 +219,45 @@ NS_IMETHODIMP
|
|||
nsTextAreaSelectionImpl::SetCaretEnabled(PRBool enabled)
|
||||
{
|
||||
if (!mPresShellWeak) return NS_ERROR_NOT_INITIALIZED;
|
||||
nsCOMPtr<nsISelectionController> selCon = do_QueryReferent(mPresShellWeak);
|
||||
if (selCon)
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIPresShell> shell = do_QueryReferent(mPresShellWeak, &result);
|
||||
if (shell)
|
||||
{
|
||||
return selCon->SetCaretEnabled(enabled);//we can use presshells because there is only 1 caret
|
||||
nsCOMPtr<nsICaret> caret;
|
||||
if (NS_SUCCEEDED(result = shell->GetCaret(getter_AddRefs(caret))))
|
||||
{
|
||||
nsCOMPtr<nsIDOMSelection> domSel;
|
||||
if (NS_SUCCEEDED(result = mFrameSelection->GetSelection(nsISelectionController::SELECTION_NORMAL, getter_AddRefs(domSel))))
|
||||
{
|
||||
return caret->SetCaretVisible(enabled, domSel);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTextAreaSelectionImpl::SetCaretReadOnly(PRBool aReadOnly)
|
||||
{
|
||||
if (!mPresShellWeak) return NS_ERROR_NOT_INITIALIZED;
|
||||
nsresult result;
|
||||
nsCOMPtr<nsIPresShell> shell = do_QueryReferent(mPresShellWeak, &result);
|
||||
if (shell)
|
||||
{
|
||||
nsCOMPtr<nsICaret> caret;
|
||||
if (NS_SUCCEEDED(result = shell->GetCaret(getter_AddRefs(caret))))
|
||||
{
|
||||
nsCOMPtr<nsIDOMSelection> domSel;
|
||||
if (NS_SUCCEEDED(result = mFrameSelection->GetSelection(nsISelectionController::SELECTION_NORMAL, getter_AddRefs(domSel))))
|
||||
{
|
||||
return caret->SetCaretReadOnly(aReadOnly, domSel);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTextAreaSelectionImpl::GetCaretEnabled(PRBool *_retval)
|
||||
|
@ -436,6 +473,10 @@ nsGfxTextControlFrame2::QueryInterface(const nsIID& aIID, void** aInstancePtr)
|
|||
*aInstancePtr = (void*)(nsIAnonymousContentCreator*) this;
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(NS_GET_IID(nsIGfxTextControlFrame2))) {
|
||||
*aInstancePtr = (void*)(nsIGfxTextControlFrame2*) this;
|
||||
return NS_OK;
|
||||
}
|
||||
return nsHTMLContainerFrame::QueryInterface(aIID, aInstancePtr);
|
||||
}
|
||||
|
||||
|
@ -443,6 +484,7 @@ nsGfxTextControlFrame2::nsGfxTextControlFrame2()
|
|||
{
|
||||
mIsProcessing=PR_FALSE;
|
||||
mFormFrame = nsnull;
|
||||
mCachedState = nsnull;
|
||||
}
|
||||
|
||||
nsGfxTextControlFrame2::~nsGfxTextControlFrame2()
|
||||
|
@ -493,7 +535,7 @@ nsGfxTextControlFrame2::CreateFrameFor(nsIPresContext* aPresContext,
|
|||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
#define DIV_STRING "user-focus: none; overflow:scroll; border: 0px !important; padding: 0px; margin:0px"
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::CreateAnonymousContent(nsIPresContext* aPresContext,
|
||||
|
@ -502,18 +544,34 @@ nsGfxTextControlFrame2::CreateAnonymousContent(nsIPresContext* aPresContext,
|
|||
//create editor
|
||||
//create selection
|
||||
//init editor with div.
|
||||
//====
|
||||
|
||||
nsCAutoString progID = NS_ELEMENT_FACTORY_PROGID_PREFIX;
|
||||
progID += "http://www.w3.org/TR/REC-html40";
|
||||
nsresult rv;
|
||||
NS_WITH_SERVICE(nsIElementFactory, elementFactory, progID, &rv);
|
||||
if (!elementFactory)
|
||||
return NS_ERROR_FAILURE;
|
||||
//get the presshell
|
||||
mState |= NS_FRAME_INDEPENDENT_SELECTION;
|
||||
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
nsresult rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_FAILED(rv) || !shell)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
|
||||
//get the document
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
rv = shell->GetDocument(getter_AddRefs(doc));
|
||||
if (NS_FAILED(rv) || !doc)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIDOMDocument> domdoc = do_QueryInterface(doc, &rv);
|
||||
if (NS_FAILED(rv) || !domdoc)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIContent> content;
|
||||
elementFactory->CreateInstanceByTag(NS_ConvertToString("div"), getter_AddRefs(content));
|
||||
nsCOMPtr<nsIDOMElement> domElement;
|
||||
|
||||
|
||||
if (NS_FAILED(domdoc->CreateElement(NS_ConvertToString("div"),getter_AddRefs(domElement))) && domElement)
|
||||
content = do_QueryInterface(domElement);
|
||||
if (content)
|
||||
{
|
||||
content->SetAttribute(kNameSpaceID_None,nsHTMLAtoms::style, NS_ConvertToString(DIV_STRING), PR_FALSE);
|
||||
aChildList.AppendElement(content);
|
||||
|
||||
//make the editor
|
||||
|
@ -525,11 +583,6 @@ nsGfxTextControlFrame2::CreateAnonymousContent(nsIPresContext* aPresContext,
|
|||
if (!mEditor)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
//get the presshell
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_FAILED(rv) || !shell)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
//create selection
|
||||
nsCOMPtr<nsIFrameSelection> frameSel;
|
||||
rv = nsComponentManager::CreateInstance(kFrameSelectionCID, nsnull,
|
||||
|
@ -539,15 +592,7 @@ nsGfxTextControlFrame2::CreateAnonymousContent(nsIPresContext* aPresContext,
|
|||
nsTextAreaSelectionImpl * textSelImpl = new nsTextAreaSelectionImpl(frameSel,shell,content);
|
||||
mSelCon = do_QueryInterface((nsISupports *)(nsISelectionController *)textSelImpl);//this will addref it once
|
||||
mSelCon->SetDisplaySelection(nsISelectionController::SELECTION_ON);
|
||||
//get the document
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
rv = shell->GetDocument(getter_AddRefs(doc));
|
||||
if (NS_FAILED(rv) || !doc)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
nsCOMPtr<nsIDOMDocument> domdoc = do_QueryInterface(doc, &rv);
|
||||
if (NS_FAILED(rv) || !domdoc)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
//get the flags
|
||||
//get the flags
|
||||
PRUint32 editorFlags = 0;
|
||||
if (IsPlainTextControl())
|
||||
editorFlags |= nsIHTMLEditor::eEditorPlaintextMask;
|
||||
|
@ -687,6 +732,8 @@ NS_IMETHODIMP nsGfxTextControlFrame2::Reflow(nsIPresContext* aPresConte
|
|||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus)
|
||||
{
|
||||
mState |= NS_FRAME_HAS_DIRTY_CHILDREN;
|
||||
|
||||
// assuming 1 child
|
||||
nsIFrame* child = mFrames.FirstChild();
|
||||
//mFrames.FirstChild(aPresContext,nsnull,&child);
|
||||
|
@ -700,17 +747,11 @@ NS_IMETHODIMP nsGfxTextControlFrame2::Reflow(nsIPresContext* aPresConte
|
|||
|
||||
|
||||
if (kidReflowState.mComputedWidth != NS_INTRINSICSIZE)
|
||||
kidReflowState.mComputedWidth -= kidReflowState.mComputedBorderPadding.left + kidReflowState.mComputedBorderPadding.right;
|
||||
kidReflowState.mComputedWidth -= (kidReflowState.mComputedBorderPadding.left + kidReflowState.mComputedBorderPadding.right);
|
||||
|
||||
if (kidReflowState.mComputedHeight != NS_INTRINSICSIZE)
|
||||
kidReflowState.mComputedHeight -= kidReflowState.mComputedBorderPadding.top + kidReflowState.mComputedBorderPadding.bottom;
|
||||
kidReflowState.mComputedHeight -= (kidReflowState.mComputedBorderPadding.top + kidReflowState.mComputedBorderPadding.bottom);
|
||||
|
||||
if (aReflowState.reason == eReflowReason_Initial)
|
||||
{
|
||||
aDesiredSize.height = 10;
|
||||
return nsHTMLContainerFrame::Reflow(aPresContext,aDesiredSize,aReflowState,aStatus);
|
||||
}
|
||||
else
|
||||
if (aReflowState.reason == eReflowReason_Incremental)
|
||||
{
|
||||
if (aReflowState.reflowCommand) {
|
||||
|
@ -747,6 +788,8 @@ NS_IMETHODIMP nsGfxTextControlFrame2::Reflow(nsIPresContext* aPresConte
|
|||
FinishReflowChild(child, aPresContext, aDesiredSize, aReflowState.mComputedBorderPadding.left,
|
||||
aReflowState.mComputedBorderPadding.top, 0);
|
||||
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
|
||||
return rv;
|
||||
}
|
||||
//#endif
|
||||
|
@ -761,14 +804,14 @@ nsGfxTextControlFrame2::GetSkipSides() const
|
|||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetName(nsString* aResult)
|
||||
{
|
||||
nsresult result = NS_FORM_NOTOK;
|
||||
nsresult rv = NS_FORM_NOTOK;
|
||||
if (mContent) {
|
||||
nsIHTMLContent* formControl = nsnull;
|
||||
result = mContent->QueryInterface(NS_GET_IID(nsIHTMLContent),(void**)&formControl);
|
||||
if (NS_SUCCEEDED(result) && formControl) {
|
||||
rv = mContent->QueryInterface(NS_GET_IID(nsIHTMLContent),(void**)&formControl);
|
||||
if (NS_SUCCEEDED(rv) && formControl) {
|
||||
nsHTMLValue value;
|
||||
result = formControl->GetHTMLAttribute(nsHTMLAtoms::name, value);
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == result) {
|
||||
rv = formControl->GetHTMLAttribute(nsHTMLAtoms::name, value);
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == rv) {
|
||||
if (eHTMLUnit_String == value.GetUnit()) {
|
||||
value.GetStringValue(*aResult);
|
||||
}
|
||||
|
@ -776,22 +819,22 @@ nsGfxTextControlFrame2::GetName(nsString* aResult)
|
|||
NS_RELEASE(formControl);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetType(PRInt32* aType) const
|
||||
{
|
||||
nsresult result = NS_FORM_NOTOK;
|
||||
nsresult rv = NS_FORM_NOTOK;
|
||||
if (mContent) {
|
||||
nsIFormControl* formControl = nsnull;
|
||||
result = mContent->QueryInterface(NS_GET_IID(nsIFormControl), (void**)&formControl);
|
||||
if ((NS_OK == result) && formControl) {
|
||||
result = formControl->GetType(aType);
|
||||
rv = mContent->QueryInterface(NS_GET_IID(nsIFormControl), (void**)&formControl);
|
||||
if ((NS_OK == rv) && formControl) {
|
||||
rv = formControl->GetType(aType);
|
||||
NS_RELEASE(formControl);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
@ -912,6 +955,282 @@ NS_IMETHODIMP nsGfxTextControlFrame2::GetProperty(nsIAtom* aName, nsString& aVal
|
|||
}
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetEditor(nsIEditor **aEditor)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aEditor);
|
||||
*aEditor = mEditor;
|
||||
NS_IF_ADDREF(*aEditor);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetTextLength(PRInt32* aTextLength)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aTextLength);
|
||||
nsString *str = GetCachedString();
|
||||
if (str)
|
||||
{
|
||||
*aTextLength = str->Length();
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::SetSelectionStart(PRInt32 aSelectionStart)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::SetSelectionEnd(PRInt32 aSelectionEnd)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetSelectionController(nsISelectionController **aSelCon)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aSelCon);
|
||||
NS_IF_ADDREF(*aSelCon = mSelCon);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/////END INTERFACE IMPLEMENTATIONS
|
||||
|
||||
////NSIFRAME
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::AttributeChanged(nsIPresContext* aPresContext,
|
||||
nsIContent* aChild,
|
||||
PRInt32 aNameSpaceID,
|
||||
nsIAtom* aAttribute,
|
||||
PRInt32 aHint)
|
||||
{
|
||||
if (!mEditor || !mSelCon) {return NS_ERROR_NOT_INITIALIZED;}
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if (nsHTMLAtoms::value == aAttribute)
|
||||
{
|
||||
if (mEditor)
|
||||
{
|
||||
nsString value;
|
||||
GetText(&value, PR_TRUE); // get the initial value from the content attribute
|
||||
mEditor->EnableUndo(PR_FALSE); // wipe out undo info
|
||||
SetTextControlFrameState(value); // set new text value
|
||||
mEditor->EnableUndo(PR_TRUE); // fire up a new txn stack
|
||||
}
|
||||
if (aHint != NS_STYLE_HINT_REFLOW)
|
||||
nsFormFrame::StyleChangeReflow(aPresContext, this);
|
||||
}
|
||||
else if (nsHTMLAtoms::maxlength == aAttribute)
|
||||
{
|
||||
PRInt32 maxLength;
|
||||
nsresult rv = GetMaxLength(&maxLength);
|
||||
|
||||
nsCOMPtr<nsIHTMLEditor> htmlEditor = do_QueryInterface(mEditor);
|
||||
if (htmlEditor)
|
||||
{
|
||||
if (NS_CONTENT_ATTR_NOT_THERE != rv)
|
||||
{ // set the maxLength attribute
|
||||
htmlEditor->SetMaxTextLength(maxLength);
|
||||
// if maxLength>docLength, we need to truncate the doc content
|
||||
}
|
||||
else { // unset the maxLength attribute
|
||||
htmlEditor->SetMaxTextLength(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mEditor && nsHTMLAtoms::readonly == aAttribute)
|
||||
{
|
||||
nsresult rv = DoesAttributeExist(nsHTMLAtoms::readonly);
|
||||
PRUint32 flags;
|
||||
mEditor->GetFlags(&flags);
|
||||
if (NS_CONTENT_ATTR_NOT_THERE != rv)
|
||||
{ // set readonly
|
||||
flags |= nsIHTMLEditor::eEditorReadonlyMask;
|
||||
if (mSelCon)
|
||||
mSelCon->SetCaretEnabled(PR_FALSE);
|
||||
}
|
||||
else
|
||||
{ // unset readonly
|
||||
flags &= ~(nsIHTMLEditor::eEditorReadonlyMask);
|
||||
if (mSelCon)
|
||||
mSelCon->SetCaretEnabled(PR_TRUE);
|
||||
}
|
||||
mEditor->SetFlags(flags);
|
||||
}
|
||||
else if (mEditor && nsHTMLAtoms::disabled == aAttribute)
|
||||
{
|
||||
nsCOMPtr<nsIPresShell> shell;
|
||||
rv = aPresContext->GetShell(getter_AddRefs(shell));
|
||||
if (NS_FAILED(rv) || !shell)
|
||||
return rv?rv:NS_ERROR_FAILURE;
|
||||
|
||||
rv = DoesAttributeExist(nsHTMLAtoms::disabled);
|
||||
PRUint32 flags;
|
||||
mEditor->GetFlags(&flags);
|
||||
if (NS_CONTENT_ATTR_NOT_THERE != rv)
|
||||
{ // set readonly
|
||||
flags |= nsIHTMLEditor::eEditorDisabledMask;
|
||||
mSelCon->SetCaretEnabled(PR_FALSE);
|
||||
mSelCon->SetDisplaySelection(nsISelectionController::SELECTION_OFF);
|
||||
}
|
||||
else
|
||||
{ // unset readonly
|
||||
flags &= ~(nsIHTMLEditor::eEditorDisabledMask);
|
||||
mSelCon->SetCaretEnabled(PR_TRUE);
|
||||
mSelCon->SetDisplaySelection(nsISelectionController::SELECTION_ON);
|
||||
}
|
||||
mEditor->SetFlags(flags);
|
||||
}
|
||||
else if ((nsHTMLAtoms::size == aAttribute ||
|
||||
nsHTMLAtoms::rows == aAttribute) && aHint != NS_STYLE_HINT_REFLOW) {
|
||||
nsFormFrame::StyleChangeReflow(aPresContext, this);
|
||||
}
|
||||
// Allow the base class to handle common attributes supported
|
||||
// by all form elements...
|
||||
else {
|
||||
rv = nsHTMLContainerFrame::AttributeChanged(aPresContext, aChild, aNameSpaceID, aAttribute, aHint);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetText(nsString* aText, PRBool aInitialValue)
|
||||
{
|
||||
nsresult rv = NS_CONTENT_ATTR_NOT_THERE;
|
||||
PRInt32 type;
|
||||
GetType(&type);
|
||||
if ((NS_FORM_INPUT_TEXT == type) || (NS_FORM_INPUT_PASSWORD == type))
|
||||
{
|
||||
if (PR_TRUE==aInitialValue)
|
||||
{
|
||||
rv = nsFormControlHelper::GetInputElementValue(mContent, aText, aInitialValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mEditor)
|
||||
{
|
||||
nsCOMPtr<nsIEditorIMESupport> imeSupport = do_QueryInterface(mEditor);
|
||||
if(imeSupport)
|
||||
imeSupport->ForceCompositionEnd();
|
||||
nsString format; format.AssignWithConversion("text/plain");
|
||||
mEditor->OutputToString(*aText, format, 0);
|
||||
}
|
||||
// we've never built our editor, so the content attribute is the value
|
||||
else
|
||||
{
|
||||
rv = nsFormControlHelper::GetInputElementValue(mContent, aText, aInitialValue);
|
||||
}
|
||||
}
|
||||
RemoveNewlines(*aText);
|
||||
}
|
||||
else
|
||||
{
|
||||
nsIDOMHTMLTextAreaElement* textArea = nsnull;
|
||||
rv = mContent->QueryInterface(NS_GET_IID(nsIDOMHTMLTextAreaElement), (void**)&textArea);
|
||||
if ((NS_OK == rv) && textArea) {
|
||||
if (PR_TRUE == aInitialValue) {
|
||||
rv = textArea->GetDefaultValue(*aText);
|
||||
}
|
||||
else {
|
||||
if(mEditor) {
|
||||
nsCOMPtr<nsIEditorIMESupport> imeSupport = do_QueryInterface(mEditor);
|
||||
if(imeSupport)
|
||||
imeSupport->ForceCompositionEnd();
|
||||
}
|
||||
rv = textArea->GetValue(*aText);
|
||||
}
|
||||
NS_RELEASE(textArea);
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
///END NSIFRAME OVERLOADS
|
||||
/////BEGIN PROTECTED METHODS
|
||||
|
||||
void nsGfxTextControlFrame2::RemoveNewlines(nsString &aString)
|
||||
{
|
||||
// strip CR/LF and null
|
||||
static const char badChars[] = {10, 13, 0};
|
||||
aString.StripChars(badChars);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetMaxLength(PRInt32* aSize)
|
||||
{
|
||||
*aSize = -1;
|
||||
nsresult rv = NS_CONTENT_ATTR_NOT_THERE;
|
||||
nsIHTMLContent* content = nsnull;
|
||||
mContent->QueryInterface(kIHTMLContentIID, (void**) &content);
|
||||
if (nsnull != content) {
|
||||
nsHTMLValue value;
|
||||
rv = content->GetHTMLAttribute(nsHTMLAtoms::maxlength, value);
|
||||
if (eHTMLUnit_Integer == value.GetUnit()) {
|
||||
*aSize = value.GetIntValue();
|
||||
}
|
||||
NS_RELEASE(content);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::DoesAttributeExist(nsIAtom *aAtt)
|
||||
{
|
||||
nsresult rv = NS_CONTENT_ATTR_NOT_THERE;
|
||||
nsIHTMLContent* content = nsnull;
|
||||
mContent->QueryInterface(kIHTMLContentIID, (void**) &content);
|
||||
if (nsnull != content)
|
||||
{
|
||||
nsHTMLValue value;
|
||||
rv = content->GetHTMLAttribute(aAtt, value);
|
||||
NS_RELEASE(content);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
nsString *
|
||||
nsGfxTextControlFrame2::GetCachedString()
|
||||
{
|
||||
if (!mCachedState && mEditor)
|
||||
{
|
||||
mCachedState = new nsString;
|
||||
if (!mCachedState)
|
||||
return nsnull;
|
||||
GetTextControlFrameState(*mCachedState);
|
||||
}
|
||||
return mCachedState;
|
||||
}
|
||||
|
||||
void nsGfxTextControlFrame2::GetTextControlFrameState(nsString& aValue)
|
||||
{
|
||||
aValue.SetLength(0); // initialize out param
|
||||
|
@ -926,8 +1245,8 @@ void nsGfxTextControlFrame2::GetTextControlFrameState(nsString& aValue)
|
|||
}
|
||||
|
||||
nsFormControlHelper::nsHTMLTextWrap wrapProp;
|
||||
nsresult result = nsFormControlHelper::GetWrapPropertyEnum(mContent, wrapProp);
|
||||
if (NS_CONTENT_ATTR_NOT_THERE != result)
|
||||
nsresult rv = nsFormControlHelper::GetWrapPropertyEnum(mContent, wrapProp);
|
||||
if (NS_CONTENT_ATTR_NOT_THERE != rv)
|
||||
{
|
||||
if (wrapProp == nsFormControlHelper::eHTMLTextWrap_Hard)
|
||||
{
|
||||
|
@ -949,7 +1268,7 @@ nsGfxTextControlFrame2::SetTextControlFrameState(const nsString& aValue)
|
|||
{
|
||||
nsAutoString currentValue;
|
||||
nsAutoString format; format.AssignWithConversion("text/plain");
|
||||
nsresult result = mEditor->OutputToString(currentValue, format, 0);
|
||||
nsresult rv = mEditor->OutputToString(currentValue, format, 0);
|
||||
if (PR_TRUE==IsSingleLineTextControl()) {
|
||||
RemoveNewlines(currentValue);
|
||||
}
|
||||
|
@ -963,11 +1282,11 @@ nsGfxTextControlFrame2::SetTextControlFrameState(const nsString& aValue)
|
|||
nsFormControlHelper::PlatformToDOMLineBreaks(currentValue);
|
||||
|
||||
nsCOMPtr<nsIDOMDocument>domDoc;
|
||||
result = mEditor->GetDocument(getter_AddRefs(domDoc));
|
||||
if (NS_FAILED(result)) return;
|
||||
rv = mEditor->GetDocument(getter_AddRefs(domDoc));
|
||||
if (NS_FAILED(rv)) return;
|
||||
if (!domDoc) return;
|
||||
|
||||
result = mEditor->SelectAll();
|
||||
rv = mEditor->SelectAll();
|
||||
nsCOMPtr<nsIHTMLEditor> htmlEditor = do_QueryInterface(mEditor);
|
||||
if (!htmlEditor) return;
|
||||
|
||||
|
@ -992,7 +1311,7 @@ nsGfxTextControlFrame2::SetInitialChildList(nsIPresContext* aPresContext,
|
|||
nsIAtom* aListName,
|
||||
nsIFrame* aChildList)
|
||||
{
|
||||
nsIFrame *list = aChildList;
|
||||
/*nsIFrame *list = aChildList;
|
||||
nsFrameState frameState;
|
||||
while (list)
|
||||
{
|
||||
|
@ -1001,58 +1320,11 @@ nsGfxTextControlFrame2::SetInitialChildList(nsIPresContext* aPresContext,
|
|||
list->SetFrameState(frameState);
|
||||
list->GetNextSibling(&list);
|
||||
}
|
||||
nsresult result = nsHTMLContainerFrame::SetInitialChildList(aPresContext, aListName, aChildList);
|
||||
*/
|
||||
nsresult rv = nsHTMLContainerFrame::SetInitialChildList(aPresContext, aListName, aChildList);
|
||||
if (mEditor)
|
||||
mEditor->PostCreate();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetSelectionController(nsIPresContext *aPresContext, nsISelectionController **aSelCon)
|
||||
{
|
||||
if (!aSelCon)
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
NS_IF_ADDREF(*aSelCon = mSelCon);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsGfxTextControlFrame2::GetColRowSizeAttr(nsIFormControlFrame* aFrame,
|
||||
nsIAtom * aColSizeAttr,
|
||||
nsHTMLValue & aColSize,
|
||||
nsresult & aColStatus,
|
||||
nsIAtom * aRowSizeAttr,
|
||||
nsHTMLValue & aRowSize,
|
||||
nsresult & aRowStatus)
|
||||
{
|
||||
nsIContent* iContent = nsnull;
|
||||
aFrame->GetFormContent((nsIContent*&) iContent);
|
||||
if (!iContent) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
nsIHTMLContent* hContent = nsnull;
|
||||
nsresult result = iContent->QueryInterface(kIHTMLContentIID, (void**)&hContent);
|
||||
if ((NS_OK != result) || !hContent) {
|
||||
NS_RELEASE(iContent);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
aColStatus = NS_CONTENT_ATTR_NOT_THERE;
|
||||
if (nsnull != aColSizeAttr) {
|
||||
aColStatus = hContent->GetHTMLAttribute(aColSizeAttr, aColSize);
|
||||
}
|
||||
|
||||
aRowStatus= NS_CONTENT_ATTR_NOT_THERE;
|
||||
if (nsnull != aRowSizeAttr) {
|
||||
aRowStatus = hContent->GetHTMLAttribute(aRowSizeAttr, aRowSize);
|
||||
}
|
||||
|
||||
NS_RELEASE(hContent);
|
||||
NS_RELEASE(iContent);
|
||||
|
||||
return NS_OK;
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1061,12 +1333,12 @@ nsGfxTextControlFrame2::GetWidthInCharacters() const
|
|||
{
|
||||
// see if there's a COL attribute, if so it wins
|
||||
nsCOMPtr<nsIHTMLContent> content;
|
||||
nsresult result = mContent->QueryInterface(NS_GET_IID(nsIHTMLContent), getter_AddRefs(content));
|
||||
if (NS_SUCCEEDED(result) && content)
|
||||
nsresult rv = mContent->QueryInterface(NS_GET_IID(nsIHTMLContent), getter_AddRefs(content));
|
||||
if (NS_SUCCEEDED(rv) && content)
|
||||
{
|
||||
nsHTMLValue resultValue;
|
||||
result = content->GetHTMLAttribute(nsHTMLAtoms::cols, resultValue);
|
||||
if (NS_CONTENT_ATTR_NOT_THERE != result)
|
||||
rv = content->GetHTMLAttribute(nsHTMLAtoms::cols, resultValue);
|
||||
if (NS_CONTENT_ATTR_NOT_THERE != rv)
|
||||
{
|
||||
if (resultValue.GetUnit() == eHTMLUnit_Integer)
|
||||
{
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include "nsIAnonymousContentCreator.h"
|
||||
#include "nsIStatefulFrame.h"
|
||||
#include "nsIEditor.h"
|
||||
#include "nsHTMLValue.h"
|
||||
#include "nsIGfxTextControlFrame.h"
|
||||
|
||||
|
||||
class nsIPresState;
|
||||
|
@ -45,7 +45,8 @@ class nsISelectionController;
|
|||
|
||||
|
||||
class nsGfxTextControlFrame2 : public nsHTMLContainerFrame,
|
||||
public nsIAnonymousContentCreator, public nsIFormControlFrame
|
||||
public nsIAnonymousContentCreator, public nsIFormControlFrame,
|
||||
public nsIGfxTextControlFrame2
|
||||
{
|
||||
public:
|
||||
nsGfxTextControlFrame2();
|
||||
|
@ -74,10 +75,6 @@ public:
|
|||
NS_IMETHOD SetInitialChildList(nsIPresContext* aPresContext,
|
||||
nsIAtom* aListName,
|
||||
nsIFrame* aChildList);
|
||||
NS_IMETHOD GetSelectionController(nsIPresContext *aPresContext, nsISelectionController **aSelCon);
|
||||
|
||||
|
||||
|
||||
|
||||
//==== BEGIN NSIFORMCONTROLFRAME
|
||||
NS_IMETHOD GetType(PRInt32* aType) const; //*
|
||||
|
@ -108,9 +105,35 @@ public:
|
|||
|
||||
|
||||
//==== END NSIFORMCONTROLFRAME
|
||||
|
||||
//==== NSIGFXTEXTCONTROLFRAME2
|
||||
|
||||
NS_IMETHOD GetEditor(nsIEditor **aEditor);
|
||||
NS_IMETHOD GetTextLength(PRInt32* aTextLength);
|
||||
NS_IMETHOD SetSelectionStart(PRInt32 aSelectionStart);
|
||||
NS_IMETHOD SetSelectionEnd(PRInt32 aSelectionEnd);
|
||||
NS_IMETHOD SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd);
|
||||
NS_IMETHOD GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd);
|
||||
NS_IMETHOD GetSelectionController(nsISelectionController **aSelCon);
|
||||
|
||||
//==== END NSIGFXTEXTCONTROLFRAME2
|
||||
//==== OVERLOAD of nsIFrame
|
||||
/** handler for attribute changes to mContent */
|
||||
NS_IMETHOD AttributeChanged(nsIPresContext* aPresContext,
|
||||
nsIContent* aChild,
|
||||
PRInt32 aNameSpaceID,
|
||||
nsIAtom* aAttribute,
|
||||
PRInt32 aHint);
|
||||
|
||||
NS_IMETHOD GetText(nsString* aText, PRBool aInitialValue);
|
||||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
protected:
|
||||
nsString *GetCachedString();
|
||||
virtual PRIntn GetSkipSides() const;
|
||||
void RemoveNewlines(nsString &aString);
|
||||
NS_IMETHOD GetMaxLength(PRInt32* aSize);
|
||||
NS_IMETHOD DoesAttributeExist(nsIAtom *aAtt);
|
||||
|
||||
//helper methods
|
||||
virtual PRBool IsSingleLineTextControl() const;
|
||||
|
@ -121,30 +144,12 @@ protected:
|
|||
nsIContent * aContent,
|
||||
nsIFrame** aFrame);
|
||||
|
||||
nsresult GetColRowSizeAttr(nsIFormControlFrame* aFrame,
|
||||
nsIAtom * aColSizeAttr,
|
||||
nsHTMLValue & aColSize,
|
||||
nsresult & aColStatus,
|
||||
nsIAtom * aRowSizeAttr,
|
||||
nsHTMLValue & aRowSize,
|
||||
nsresult & aRowStatus);
|
||||
NS_IMETHOD GetType(PRInt32* aType) const;
|
||||
|
||||
nsresult GetColRowSizeAttr(nsIFormControlFrame* aFrame,
|
||||
nsIAtom * aColSizeAttr,
|
||||
nsHTMLValue & aColSize,
|
||||
nsresult & aColStatus,
|
||||
nsIAtom * aRowSizeAttr,
|
||||
nsHTMLValue & aRowSize,
|
||||
nsresult & aRowStatus);
|
||||
|
||||
PRInt32 GetWidthInCharacters() const;
|
||||
|
||||
>>>>>>> 1.6
|
||||
private:
|
||||
nsCOMPtr<nsIEditor> mEditor;
|
||||
nsCOMPtr<nsISelectionController> mSelCon;
|
||||
nsString mCachedState;
|
||||
nsString *mCachedState;
|
||||
PRBool mIsProcessing;
|
||||
nsFormFrame *mFormFrame;
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче