[PATCH 1/2] riched20: Implement ITextSelection::GetText. (try 3)

Huw Davies huw at codeweavers.com
Mon Jul 7 03:38:06 CDT 2014


On Fri, Jul 04, 2014 at 07:00:16PM +0800, Jactry Zeng wrote:
> 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-formatting.aspx
> 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?

Well first of all, if there are bugs with the underlying richedit,
these need fixing first.  Note, that every richedit consists of at
least one paragraph (and hence one final EOP).

I was suggesting adding to ME_GetTextW the ability to append a '\r' if it
were passed an appropriate flag, of course this wouldn't be the behaviour
used for its current callers.  There's already a diTextEnd item in the
display list to mark the end of the document, so there should be no
need to add a new end-of-story marker.  Most of the iterator functions
stop when this is reached, so you tend not to actually see it, but
that shouldn't be a problem.

Huw.



More information about the wine-devel mailing list