diff --git a/mozilla/layout/generic/nsBlockFrame.cpp b/mozilla/layout/generic/nsBlockFrame.cpp index 855486d5c02..af51300ac52 100644 --- a/mozilla/layout/generic/nsBlockFrame.cpp +++ b/mozilla/layout/generic/nsBlockFrame.cpp @@ -6146,8 +6146,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext, nsCOMPtr shell; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv)){ + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){ + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (frameselection) + { PRBool mouseDown = PR_FALSE; if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown) return NS_OK;//do not handle diff --git a/mozilla/layout/generic/nsBlockReflowState.cpp b/mozilla/layout/generic/nsBlockReflowState.cpp index 855486d5c02..af51300ac52 100644 --- a/mozilla/layout/generic/nsBlockReflowState.cpp +++ b/mozilla/layout/generic/nsBlockReflowState.cpp @@ -6146,8 +6146,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext, nsCOMPtr shell; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv)){ + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){ + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (frameselection) + { PRBool mouseDown = PR_FALSE; if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown) return NS_OK;//do not handle diff --git a/mozilla/layout/generic/nsBlockReflowState.h b/mozilla/layout/generic/nsBlockReflowState.h index 855486d5c02..af51300ac52 100644 --- a/mozilla/layout/generic/nsBlockReflowState.h +++ b/mozilla/layout/generic/nsBlockReflowState.h @@ -6146,8 +6146,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext, nsCOMPtr shell; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv)){ + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){ + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (frameselection) + { PRBool mouseDown = PR_FALSE; if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown) return NS_OK;//do not handle diff --git a/mozilla/layout/generic/nsFrame.cpp b/mozilla/layout/generic/nsFrame.cpp index 5835917e98e..e9009c48b19 100644 --- a/mozilla/layout/generic/nsFrame.cpp +++ b/mozilla/layout/generic/nsFrame.cpp @@ -708,7 +708,16 @@ nsFrame::Paint(nsIPresContext* aPresContext, } if (NS_SUCCEEDED(result) && shell){ - result = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + + nsCOMPtr selCon; + result = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + nsCOMPtr 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); @@ -777,7 +786,15 @@ nsFrame::HandleEvent(nsIPresContext* aPresContext, { if (NS_SUCCEEDED(rv)){ nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){ + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + rv = shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (NS_SUCCEEDED(rv) && frameselection){ PRBool mouseDown = PR_FALSE; if (NS_SUCCEEDED(frameselection->GetMouseDownState(&mouseDown)) && mouseDown) HandleDrag(aPresContext, aEvent, aEventStatus); @@ -787,14 +804,42 @@ nsFrame::HandleEvent(nsIPresContext* aPresContext, case NS_MOUSE_LEFT_BUTTON_DOWN: { nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection) + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) { - frameselection->SetMouseDownState( PR_TRUE);//not important if it fails here + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + rv = shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (NS_SUCCEEDED(rv) && frameselection) + { + frameselection->SetMouseDownState( PR_TRUE );//not important if it fails here } HandlePress(aPresContext, aEvent, aEventStatus); }break; case NS_MOUSE_LEFT_BUTTON_UP: - HandleRelease(aPresContext, aEvent, aEventStatus); + { + nsFrameState state; + GetFrameState(&state); + if (state & NS_FRAME_INDEPENDENT_SELECTION) + { + nsCOMPtr frameselection; + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + return NS_ERROR_FAILURE; + if (NS_SUCCEEDED(rv) && frameselection) + { + frameselection->SetMouseDownState( PR_FALSE );//redandant in normal cases but we MUST tell this selection by hand here + } + } + HandleRelease(aPresContext, aEvent, aEventStatus); + } break; default: break; @@ -953,7 +998,15 @@ nsFrame::HandlePress(nsIPresContext* aPresContext, startPos, contentOffsetEnd, beginContent))) { nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection) + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + rv = shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (NS_SUCCEEDED(rv) && frameselection) { frameselection->SetMouseDownState(PR_TRUE);//not important if it fails here @@ -1081,8 +1134,14 @@ NS_IMETHODIMP nsFrame::HandleDrag(nsIPresContext* aPresContext, return result; nsCOMPtr frameselection; - - result = presShell->GetFrameSelection(getter_AddRefs(frameselection)); + nsCOMPtr selCon; + result = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(result) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + result = presShell->GetFrameSelection(getter_AddRefs(frameselection)); if (NS_SUCCEEDED(result) && frameselection) { @@ -1124,8 +1183,14 @@ NS_IMETHODIMP nsFrame::HandleRelease(nsIPresContext* aPresContext, if (NS_SUCCEEDED(result)) { nsCOMPtr frameselection; - - result = presShell->GetFrameSelection(getter_AddRefs(frameselection)); + nsCOMPtr selCon; + result = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(result) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + result = presShell->GetFrameSelection(getter_AddRefs(frameselection)); if (NS_SUCCEEDED(result) && frameselection) frameselection->StopAutoScrollTimer(); diff --git a/mozilla/layout/generic/nsTextFrame.cpp b/mozilla/layout/generic/nsTextFrame.cpp index 670247e6f7b..d212826b34a 100644 --- a/mozilla/layout/generic/nsTextFrame.cpp +++ b/mozilla/layout/generic/nsTextFrame.cpp @@ -1804,7 +1804,14 @@ nsTextFrame::PaintUnicodeText(nsIPresContext* aPresContext, nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv) && shell){ - rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameSelection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameSelection) + rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); if (NS_SUCCEEDED(rv) && frameSelection){ nsCOMPtr content; PRInt32 offset; @@ -2317,7 +2324,14 @@ nsTextFrame::PaintTextSlowly(nsIPresContext* aPresContext, nsCOMPtr frameSelection; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv) && shell){ - rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameSelection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameSelection) + rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); if (NS_SUCCEEDED(rv) && frameSelection){ nsCOMPtr content; PRInt32 offset; @@ -2516,7 +2530,14 @@ nsTextFrame::PaintAsciiText(nsIPresContext* aPresContext, nsCOMPtr frameSelection; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv) && shell){ - rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameSelection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameSelection) + rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); if (NS_SUCCEEDED(rv) && frameSelection){ nsCOMPtr content; PRInt32 offset; @@ -2919,7 +2940,14 @@ nsTextFrame::SetSelected(nsIPresContext* aPresContext, nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv) && shell){ - rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameSelection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameSelection) + rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); if (NS_SUCCEEDED(rv) && frameSelection){ nsCOMPtr content; PRInt32 offset; diff --git a/mozilla/layout/html/base/src/nsBlockFrame.cpp b/mozilla/layout/html/base/src/nsBlockFrame.cpp index 855486d5c02..af51300ac52 100644 --- a/mozilla/layout/html/base/src/nsBlockFrame.cpp +++ b/mozilla/layout/html/base/src/nsBlockFrame.cpp @@ -6146,8 +6146,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext, nsCOMPtr shell; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv)){ + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){ + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (frameselection) + { PRBool mouseDown = PR_FALSE; if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown) return NS_OK;//do not handle diff --git a/mozilla/layout/html/base/src/nsBlockReflowState.cpp b/mozilla/layout/html/base/src/nsBlockReflowState.cpp index 855486d5c02..af51300ac52 100644 --- a/mozilla/layout/html/base/src/nsBlockReflowState.cpp +++ b/mozilla/layout/html/base/src/nsBlockReflowState.cpp @@ -6146,8 +6146,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext, nsCOMPtr shell; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv)){ + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){ + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (frameselection) + { PRBool mouseDown = PR_FALSE; if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown) return NS_OK;//do not handle diff --git a/mozilla/layout/html/base/src/nsBlockReflowState.h b/mozilla/layout/html/base/src/nsBlockReflowState.h index 855486d5c02..af51300ac52 100644 --- a/mozilla/layout/html/base/src/nsBlockReflowState.h +++ b/mozilla/layout/html/base/src/nsBlockReflowState.h @@ -6146,8 +6146,17 @@ nsBlockFrame::HandleEvent(nsIPresContext* aPresContext, nsCOMPtr shell; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv)){ + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){ + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (frameselection) + { PRBool mouseDown = PR_FALSE; if (NS_FAILED(frameselection->GetMouseDownState(&mouseDown)) || !mouseDown) return NS_OK;//do not handle diff --git a/mozilla/layout/html/base/src/nsFrame.cpp b/mozilla/layout/html/base/src/nsFrame.cpp index 5835917e98e..e9009c48b19 100644 --- a/mozilla/layout/html/base/src/nsFrame.cpp +++ b/mozilla/layout/html/base/src/nsFrame.cpp @@ -708,7 +708,16 @@ nsFrame::Paint(nsIPresContext* aPresContext, } if (NS_SUCCEEDED(result) && shell){ - result = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + + nsCOMPtr selCon; + result = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + nsCOMPtr 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); @@ -777,7 +786,15 @@ nsFrame::HandleEvent(nsIPresContext* aPresContext, { if (NS_SUCCEEDED(rv)){ nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection){ + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + rv = shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (NS_SUCCEEDED(rv) && frameselection){ PRBool mouseDown = PR_FALSE; if (NS_SUCCEEDED(frameselection->GetMouseDownState(&mouseDown)) && mouseDown) HandleDrag(aPresContext, aEvent, aEventStatus); @@ -787,14 +804,42 @@ nsFrame::HandleEvent(nsIPresContext* aPresContext, case NS_MOUSE_LEFT_BUTTON_DOWN: { nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection) + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) { - frameselection->SetMouseDownState( PR_TRUE);//not important if it fails here + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + rv = shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (NS_SUCCEEDED(rv) && frameselection) + { + frameselection->SetMouseDownState( PR_TRUE );//not important if it fails here } HandlePress(aPresContext, aEvent, aEventStatus); }break; case NS_MOUSE_LEFT_BUTTON_UP: - HandleRelease(aPresContext, aEvent, aEventStatus); + { + nsFrameState state; + GetFrameState(&state); + if (state & NS_FRAME_INDEPENDENT_SELECTION) + { + nsCOMPtr frameselection; + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + return NS_ERROR_FAILURE; + if (NS_SUCCEEDED(rv) && frameselection) + { + frameselection->SetMouseDownState( PR_FALSE );//redandant in normal cases but we MUST tell this selection by hand here + } + } + HandleRelease(aPresContext, aEvent, aEventStatus); + } break; default: break; @@ -953,7 +998,15 @@ nsFrame::HandlePress(nsIPresContext* aPresContext, startPos, contentOffsetEnd, beginContent))) { nsCOMPtr frameselection; - if (NS_SUCCEEDED(shell->GetFrameSelection(getter_AddRefs(frameselection))) && frameselection) + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + rv = shell->GetFrameSelection(getter_AddRefs(frameselection)); + if (NS_SUCCEEDED(rv) && frameselection) { frameselection->SetMouseDownState(PR_TRUE);//not important if it fails here @@ -1081,8 +1134,14 @@ NS_IMETHODIMP nsFrame::HandleDrag(nsIPresContext* aPresContext, return result; nsCOMPtr frameselection; - - result = presShell->GetFrameSelection(getter_AddRefs(frameselection)); + nsCOMPtr selCon; + result = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(result) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + result = presShell->GetFrameSelection(getter_AddRefs(frameselection)); if (NS_SUCCEEDED(result) && frameselection) { @@ -1124,8 +1183,14 @@ NS_IMETHODIMP nsFrame::HandleRelease(nsIPresContext* aPresContext, if (NS_SUCCEEDED(result)) { nsCOMPtr frameselection; - - result = presShell->GetFrameSelection(getter_AddRefs(frameselection)); + nsCOMPtr selCon; + result = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(result) && selCon) + { + frameselection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameselection) + result = presShell->GetFrameSelection(getter_AddRefs(frameselection)); if (NS_SUCCEEDED(result) && frameselection) frameselection->StopAutoScrollTimer(); diff --git a/mozilla/layout/html/base/src/nsTextFrame.cpp b/mozilla/layout/html/base/src/nsTextFrame.cpp index 670247e6f7b..d212826b34a 100644 --- a/mozilla/layout/html/base/src/nsTextFrame.cpp +++ b/mozilla/layout/html/base/src/nsTextFrame.cpp @@ -1804,7 +1804,14 @@ nsTextFrame::PaintUnicodeText(nsIPresContext* aPresContext, nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv) && shell){ - rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameSelection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameSelection) + rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); if (NS_SUCCEEDED(rv) && frameSelection){ nsCOMPtr content; PRInt32 offset; @@ -2317,7 +2324,14 @@ nsTextFrame::PaintTextSlowly(nsIPresContext* aPresContext, nsCOMPtr frameSelection; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv) && shell){ - rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameSelection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameSelection) + rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); if (NS_SUCCEEDED(rv) && frameSelection){ nsCOMPtr content; PRInt32 offset; @@ -2516,7 +2530,14 @@ nsTextFrame::PaintAsciiText(nsIPresContext* aPresContext, nsCOMPtr frameSelection; nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv) && shell){ - rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameSelection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameSelection) + rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); if (NS_SUCCEEDED(rv) && frameSelection){ nsCOMPtr content; PRInt32 offset; @@ -2919,7 +2940,14 @@ nsTextFrame::SetSelected(nsIPresContext* aPresContext, nsresult rv = aPresContext->GetShell(getter_AddRefs(shell)); if (NS_SUCCEEDED(rv) && shell){ - rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); + nsCOMPtr selCon; + rv = GetSelectionController(aPresContext, getter_AddRefs(selCon)); + if (NS_SUCCEEDED(rv) && selCon) + { + frameSelection = do_QueryInterface(selCon); //this MAY implement + } + if (!frameSelection) + rv = shell->GetFrameSelection(getter_AddRefs(frameSelection)); if (NS_SUCCEEDED(rv) && frameSelection){ nsCOMPtr content; PRInt32 offset;