Jacek Caban : mshtml: Added IHTMLTxtRange::expand("TextEdit") implementation.
Alexandre Julliard
julliard at winehq.org
Mon Oct 22 09:55:23 CDT 2007
Module: wine
Branch: master
Commit: 11d62d7fcbfbf0031957a0abb752406f02dedc23
URL: http://source.winehq.org/git/wine.git/?a=commit;h=11d62d7fcbfbf0031957a0abb752406f02dedc23
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Oct 19 15:14:35 2007 +0200
mshtml: Added IHTMLTxtRange::expand("TextEdit") implementation.
---
dlls/mshtml/tests/dom.c | 3 +++
dlls/mshtml/txtrange.c | 38 ++++++++++++++++++++++++++++++++++++--
2 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index d49e1f0..dd46b8a 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -43,6 +43,7 @@ static const char doc_str3[] =
static const WCHAR noneW[] = {'N','o','n','e',0};
static WCHAR characterW[] = {'c','h','a','r','a','c','t','e','r',0};
+static WCHAR texteditW[] = {'t','e','x','t','e','d','i','t',0};
static WCHAR wordW[] = {'w','o','r','d',0};
typedef enum {
@@ -873,6 +874,8 @@ static void test_txtrange(IHTMLDocument2 *doc)
test_range_moveend(range, characterW, 3, 3);
test_range_text(range, "wor");
test_range_parent(range, ET_BODY);
+ test_range_expand(range, texteditW, VARIANT_TRUE, "wordabc 123\r\nit's text");
+ test_range_expand(range, texteditW, VARIANT_TRUE, "wordabc 123\r\nit's text");
IHTMLTxtRange_Release(range);
}
diff --git a/dlls/mshtml/txtrange.c b/dlls/mshtml/txtrange.c
index 7156d9a..df37753 100644
--- a/dlls/mshtml/txtrange.c
+++ b/dlls/mshtml/txtrange.c
@@ -1073,12 +1073,12 @@ static HRESULT WINAPI HTMLTxtRange_expand(IHTMLTxtRange *iface, BSTR Unit, VARIA
if(unit == RU_UNKNOWN)
return E_INVALIDARG;
+ *Success = VARIANT_FALSE;
+
switch(unit) {
case RU_WORD: {
dompos_t end_pos, start_pos, new_pos;
- *Success = VARIANT_FALSE;
-
get_cur_pos(This, TRUE, &start_pos);
get_cur_pos(This, FALSE, &end_pos);
if(find_next_space(&end_pos, TRUE, &new_pos)) {
@@ -1097,6 +1097,40 @@ static HRESULT WINAPI HTMLTxtRange_expand(IHTMLTxtRange *iface, BSTR Unit, VARIA
break;
}
+
+ case RU_TEXTEDIT: {
+ nsIDOMDocument *nsdoc;
+ nsIDOMHTMLDocument *nshtmldoc;
+ nsIDOMHTMLElement *nsbody = NULL;
+ nsresult nsres;
+
+ nsres = nsIWebNavigation_GetDocument(This->doc->nscontainer->navigation, &nsdoc);
+ if(NS_FAILED(nsres) || !nsdoc) {
+ ERR("GetDocument failed: %08x\n", nsres);
+ break;
+ }
+
+ 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);
+ break;
+ }
+
+ nsres = nsIDOMRange_SelectNodeContents(This->nsrange, (nsIDOMNode*)nsbody);
+ nsIDOMHTMLElement_Release(nsbody);
+ if(NS_FAILED(nsres)) {
+ ERR("Collapse failed: %08x\n", nsres);
+ break;
+ }
+
+ *Success = VARIANT_TRUE;
+ break;
+ }
+
default:
FIXME("Unimplemented unit %s\n", debugstr_w(Unit));
}
More information about the wine-cvs
mailing list