mshtml: Set selection to default on IHTMLSelectionObject::createRange if there is no range selected.
This commit is contained in:
parent
7e92283678
commit
52b78f055e
@ -153,8 +153,36 @@ static HRESULT WINAPI HTMLSelectionObject_createRange(IHTMLSelectionObject *ifac
|
|||||||
nsresult nsres;
|
nsresult nsres;
|
||||||
|
|
||||||
nsISelection_GetRangeCount(This->nsselection, &nsrange_cnt);
|
nsISelection_GetRangeCount(This->nsselection, &nsrange_cnt);
|
||||||
if(nsrange_cnt != 1)
|
if(!nsrange_cnt) {
|
||||||
|
nsIDOMDocument *nsdoc;
|
||||||
|
nsIDOMHTMLDocument *nshtmldoc;
|
||||||
|
nsIDOMHTMLElement *nsbody = NULL;
|
||||||
|
|
||||||
|
TRACE("nsrange_cnt = 0\n");
|
||||||
|
|
||||||
|
nsres = nsIWebNavigation_GetDocument(This->doc->nscontainer->navigation, &nsdoc);
|
||||||
|
if(NS_FAILED(nsres) || !nsdoc) {
|
||||||
|
ERR("GetDocument failed: %08x\n", nsres);
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc);
|
||||||
|
nsIDOMDocument_Release(nsdoc);
|
||||||
|
|
||||||
|
nsres = nsIDOMHTMLDocument_GetBody(nshtmldoc, &nsbody);
|
||||||
|
nsIDOMHTMLDocument_Release(nshtmldoc);
|
||||||
|
if(NS_FAILED(nsres) || !nsbody) {
|
||||||
|
ERR("Could not get body: %08x\n", nsres);
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsres = nsISelection_Collapse(This->nsselection, (nsIDOMNode*)nsbody, 0);
|
||||||
|
nsIDOMHTMLElement_Release(nsbody);
|
||||||
|
if(NS_FAILED(nsres))
|
||||||
|
ERR("Collapse failed: %08x\n", nsres);
|
||||||
|
}else if(nsrange_cnt > 1) {
|
||||||
FIXME("range_cnt = %d\n", nsrange_cnt);
|
FIXME("range_cnt = %d\n", nsrange_cnt);
|
||||||
|
}
|
||||||
|
|
||||||
nsres = nsISelection_GetRangeAt(This->nsselection, 0, &nsrange);
|
nsres = nsISelection_GetRangeAt(This->nsselection, 0, &nsrange);
|
||||||
if(NS_FAILED(nsres))
|
if(NS_FAILED(nsres))
|
||||||
|
@ -539,6 +539,20 @@ static void _test_range_isequal(unsigned line, IHTMLTxtRange *range1, IHTMLTxtRa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define test_range_parent(r,t) _test_range_parent(__LINE__,r,t)
|
||||||
|
static void _test_range_parent(unsigned line, IHTMLTxtRange *range, elem_type_t type)
|
||||||
|
{
|
||||||
|
IHTMLElement *elem;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLTxtRange_parentElement(range, &elem);
|
||||||
|
ok_(__FILE__,line) (hres == S_OK, "parentElement failed: %08x\n", hres);
|
||||||
|
|
||||||
|
_test_elem_type(line, (IUnknown*)elem, type);
|
||||||
|
|
||||||
|
IHTMLElement_Release(elem);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_elem_collection(IHTMLElementCollection *col, const elem_type_t *elem_types, long exlen)
|
static void test_elem_collection(IHTMLElementCollection *col, const elem_type_t *elem_types, long exlen)
|
||||||
{
|
{
|
||||||
long len;
|
long len;
|
||||||
@ -695,6 +709,8 @@ static void test_txtrange(IHTMLDocument2 *doc)
|
|||||||
IHTMLElement *elem;
|
IHTMLElement *elem;
|
||||||
IHTMLBodyElement *body;
|
IHTMLBodyElement *body;
|
||||||
IHTMLTxtRange *body_range, *range, *range2;
|
IHTMLTxtRange *body_range, *range, *range2;
|
||||||
|
IHTMLSelectionObject *selection;
|
||||||
|
IDispatch *disp_range;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
hres = IHTMLDocument2_get_body(doc, &elem);
|
hres = IHTMLDocument2_get_body(doc, &elem);
|
||||||
@ -841,6 +857,24 @@ static void test_txtrange(IHTMLDocument2 *doc)
|
|||||||
|
|
||||||
IHTMLTxtRange_Release(range);
|
IHTMLTxtRange_Release(range);
|
||||||
IHTMLTxtRange_Release(body_range);
|
IHTMLTxtRange_Release(body_range);
|
||||||
|
|
||||||
|
hres = IHTMLDocument2_get_selection(doc, &selection);
|
||||||
|
ok(hres == S_OK, "IHTMLDocument2_get_selection failed: %08x\n", hres);
|
||||||
|
|
||||||
|
hres = IHTMLSelectionObject_createRange(selection, &disp_range);
|
||||||
|
ok(hres == S_OK, "IHTMLSelectionObject_createRange failed: %08x\n", hres);
|
||||||
|
IHTMLSelectionObject_Release(selection);
|
||||||
|
|
||||||
|
hres = IDispatch_QueryInterface(disp_range, &IID_IHTMLTxtRange, (void **)&range);
|
||||||
|
ok(hres == S_OK, "Could not get IID_IHTMLTxtRange interface: 0x%08x\n", hres);
|
||||||
|
IDispatch_Release(disp_range);
|
||||||
|
|
||||||
|
test_range_text(range, NULL);
|
||||||
|
test_range_moveend(range, characterW, 3, 3);
|
||||||
|
test_range_text(range, "wor");
|
||||||
|
test_range_parent(range, ET_BODY);
|
||||||
|
|
||||||
|
IHTMLTxtRange_Release(range);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_compatmode(IHTMLDocument2 *doc)
|
static void test_compatmode(IHTMLDocument2 *doc)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user