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]
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.