Hello Huw, 2014-07-03 17:34 GMT+08:00 Huw Davies huw@codeweavers.com:
- if (!*pbstr)
return E_OUTOFMEMORY;
- /* FIXME: a '\r' should be appended at the end of a story */
- ME_GetTextW(This->reOle->editor, *pbstr, nChars, start, nChars, 0);
Actually, perhaps you could fix the FIXME. GetTextW already has the
ability
to add \r\n, so extending this to add just \r shouldn't be too difficult.
Thanks for your review first!
A few weeks ago, I have made some tests about this problem. And it seem is an unimplement feature of Rich edit control and should not be fixed in ME_GetTextW or ITextSeletction::GetText simply:
1. end-of-story is different from end-of-paragraph
From document of ITextDocument::GetStoryCount: Rich edit controls have only
one story.[1] So ‘story’ may is an unit like 'paragraph' in Rich edit control. We may need add a MERF_ENDSTORY to implement it.[2]
2. What does the end-of-story looks like? When we run the wordpad with native riched20, we can use ‘ctrl + shitf + →’ to select the ‘space’ at the end of the Rich edit control. But we cannot set the cursor behind it.(a picture here[3]) And wine’s riched20 didn’t implement this ‘space’. This 'space' may is the end-of-story.
A crash will happen when we copy the ‘space’ from a native Rich edit control to a builtin one.(backtrace.txt[4])
BTW, there is a know bug of EM_SETSEL: cannot select the last character of Rich edit control.[5]
3.
From the last paragraph of this blog:
http://blogs.msdn.com/b/murrays/archive/2008/11/22/paragraphs-and-paragraph-... It is sure there is a final EOP in a Rich edit control.
There seems to be every indication that we should implement the final EOP of Rich edit control rather than just append a ‘\r’ in ITextSelection::GetText. So I just let a FIXME comment there. I am not sure if I am right. Do you have any suggestion?
Also, in the tests, you leak the BSTRs.
Thanks again.
Huw.