https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2bf764722bd13783e9c85…
commit 2bf764722bd13783e9c85ad572e62c75329badc8
Author: Amine Khaldi <amine.khaldi(a)reactos.org>
AuthorDate: Sat Jan 20 13:09:57 2018 +0100
Commit: Amine Khaldi <amine.khaldi(a)reactos.org>
CommitDate: Sat Jan 20 13:09:57 2018 +0100
[RICHED20] Sync with Wine 3.0. CORE-14225
---
dll/win32/riched20/caret.c | 4 +
dll/win32/riched20/editor.c | 80 ++++-----
dll/win32/riched20/editor.h | 2 +-
dll/win32/riched20/ocr_reverse.cur | Bin 33134 -> 33134 bytes
dll/win32/riched20/paint.c | 2 +-
dll/win32/riched20/richole.c | 330 +++++--------------------------------
dll/win32/riched20/run.c | 9 +-
dll/win32/riched20/table.c | 2 +-
media/doc/README.WINE | 2 +-
9 files changed, 86 insertions(+), 345 deletions(-)
diff --git a/dll/win32/riched20/caret.c b/dll/win32/riched20/caret.c
index 26af743518..8a99394dcb 100644
--- a/dll/win32/riched20/caret.c
+++ b/dll/win32/riched20/caret.c
@@ -551,6 +551,10 @@ void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor,
ME_DisplayItem *tp, *end_run, *run, *prev;
int eol_len = 0;
+ /* Check if new line is allowed for this control */
+ if (!(editor->styleFlags & ES_MULTILINE))
+ break;
+
/* Find number of CR and LF in end of paragraph run */
if (*pos =='\r')
{
diff --git a/dll/win32/riched20/editor.c b/dll/win32/riched20/editor.c
index 645d06cedc..20ffb0cdc1 100644
--- a/dll/win32/riched20/editor.c
+++ b/dll/win32/riched20/editor.c
@@ -176,7 +176,7 @@
+ ES_DISABLENOSCROLL (scrollbar is always visible)
- ES_EX_NOCALLOLEINIT
+ ES_LEFT
- - ES_MULTILINE (currently single line controls aren't supported)
+ + ES_MULTILINE
- ES_NOIME
- ES_READONLY (I'm not sure if beeping is the proper behaviour)
+ ES_RIGHT
@@ -2291,6 +2291,14 @@ static BOOL paste_special(ME_TextEditor *editor, UINT cf,
REPASTESPECIAL *ps, BO
struct paste_format *format;
IDataObject *data;
+ /* Protect read-only edit control from modification */
+ if (editor->styleFlags & ES_READONLY)
+ {
+ if (!check_only)
+ MessageBeep(MB_ICONERROR);
+ return FALSE;
+ }
+
init_paste_formats();
if (ps && ps->dwAspect != DVASPECT_CONTENT)
@@ -2348,6 +2356,30 @@ static BOOL ME_Copy(ME_TextEditor *editor, const ME_Cursor *start,
int nChars)
return SUCCEEDED(hr);
}
+static BOOL copy_or_cut(ME_TextEditor *editor, BOOL cut)
+{
+ BOOL result;
+ int offs, num_chars;
+ int start_cursor = ME_GetSelectionOfs(editor, &offs, &num_chars);
+ ME_Cursor *sel_start = &editor->pCursors[start_cursor];
+
+ if (cut && (editor->styleFlags & ES_READONLY))
+ {
+ MessageBeep(MB_ICONERROR);
+ return FALSE;
+ }
+
+ num_chars -= offs;
+ result = ME_Copy(editor, sel_start, num_chars);
+ if (result && cut)
+ {
+ ME_InternalDeleteText(editor, sel_start, num_chars, FALSE);
+ ME_CommitUndo(editor);
+ ME_UpdateRepaint(editor, TRUE);
+ }
+ return result;
+}
+
/* helper to send a msg filter notification */
static BOOL
ME_FilterEvent(ME_TextEditor *editor, UINT msg, WPARAM* wParam, LPARAM* lParam)
@@ -2642,22 +2674,7 @@ ME_KeyDown(ME_TextEditor *editor, WORD nKey)
case 'C':
case 'X':
if (ctrl_is_down)
- {
- BOOL result;
- int nOfs, nChars;
- int nStartCur = ME_GetSelectionOfs(editor, &nOfs, &nChars);
- ME_Cursor *selStart = &editor->pCursors[nStartCur];
-
- nChars -= nOfs;
- result = ME_Copy(editor, selStart, nChars);
- if (result && nKey == 'X')
- {
- ME_InternalDeleteText(editor, selStart, nChars, FALSE);
- ME_CommitUndo(editor);
- ME_UpdateRepaint(editor, TRUE);
- }
- return result;
- }
+ return copy_or_cut(editor, nKey == 'X');
break;
case 'Z':
if (ctrl_is_down)
@@ -3401,21 +3418,7 @@ static void ME_SetText(ME_TextEditor *editor, void *text, BOOL
unicode)
int textLen;
LPWSTR wszText = ME_ToUnicode(codepage, text, &textLen);
-
- if (textLen > 0)
- {
- int len = -1;
-
- /* uses default style! */
- if (!(editor->styleFlags & ES_MULTILINE))
- {
- WCHAR *p = wszText;
-
- while (*p != '\0' && *p != '\r' && *p !=
'\n') p++;
- len = p - wszText;
- }
- ME_InsertTextFromCursor(editor, 0, wszText, len,
editor->pBuffer->pDefaultStyle);
- }
+ ME_InsertTextFromCursor(editor, 0, wszText, textLen,
editor->pBuffer->pDefaultStyle);
ME_EndToUnicode(codepage, wszText);
}
@@ -4065,19 +4068,8 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM
wParam,
return 0;
case WM_CUT:
case WM_COPY:
- {
- int nFrom, nTo, nStartCur = ME_GetSelectionOfs(editor, &nFrom, &nTo);
- int nChars = nTo - nFrom;
- ME_Cursor *selStart = &editor->pCursors[nStartCur];
-
- if (ME_Copy(editor, selStart, nChars) && msg == WM_CUT)
- {
- ME_InternalDeleteText(editor, selStart, nChars, FALSE);
- ME_CommitUndo(editor);
- ME_UpdateRepaint(editor, TRUE);
- }
+ copy_or_cut(editor, msg == WM_CUT);
return 0;
- }
case WM_GETTEXTLENGTH:
{
GETTEXTLENGTHEX how;
diff --git a/dll/win32/riched20/editor.h b/dll/win32/riched20/editor.h
index 9599a3eef6..8da0ed94d7 100644
--- a/dll/win32/riched20/editor.h
+++ b/dll/win32/riched20/editor.h
@@ -283,7 +283,7 @@ int ME_GetParaBorderWidth(const ME_Context *c, int flags)
DECLSPEC_HIDDEN;
/* richole.c */
LRESULT CreateIRichEditOle(IUnknown *outer_unk, ME_TextEditor *editor, LPVOID *ppvObj)
DECLSPEC_HIDDEN;
-void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run* run, ME_Paragraph *para, BOOL
selected) DECLSPEC_HIDDEN;
+void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run* run, BOOL selected)
DECLSPEC_HIDDEN;
void ME_GetOLEObjectSize(const ME_Context *c, ME_Run *run, SIZE *pSize) DECLSPEC_HIDDEN;
void ME_CopyReObject(REOBJECT* dst, const REOBJECT* src) DECLSPEC_HIDDEN;
void ME_DeleteReObject(REOBJECT* reo) DECLSPEC_HIDDEN;
diff --git a/dll/win32/riched20/ocr_reverse.cur b/dll/win32/riched20/ocr_reverse.cur
index f6b5ca20f5..6392093f62 100644
Binary files a/dll/win32/riched20/ocr_reverse.cur and b/dll/win32/riched20/ocr_reverse.cur
differ
diff --git a/dll/win32/riched20/paint.c b/dll/win32/riched20/paint.c
index 41b38969c0..b4b6697165 100644
--- a/dll/win32/riched20/paint.c
+++ b/dll/win32/riched20/paint.c
@@ -481,7 +481,7 @@ static void ME_DrawRun(ME_Context *c, int x, int y, ME_DisplayItem
*rundi, ME_Pa
}
if (run->nFlags & MERF_GRAPHICS)
- ME_DrawOLE(c, x, y, run, para, (runofs >= nSelFrom) && (runofs <
nSelTo));
+ ME_DrawOLE(c, x, y, run, (runofs >= nSelFrom) && (runofs < nSelTo));
else
{
ME_DrawTextWithStyle(c, run, x, y, nSelFrom - runofs, nSelTo - runofs,
diff --git a/dll/win32/riched20/richole.c b/dll/win32/riched20/richole.c
index 2507b77344..b04b6b10a3 100644
--- a/dll/win32/riched20/richole.c
+++ b/dll/win32/riched20/richole.c
@@ -936,14 +936,6 @@ static HRESULT WINAPI
IRichEditOleImpl_inner_fnQueryInterface(IUnknown *iface, R
IUnknown_AddRef((IUnknown *)*ppvObj);
return S_OK;
}
-
- if (IsEqualGUID(riid, &IID_ITextServices))
- {
- static int once;
- if (!once++) FIXME("%p: unhandled interface IID_ITextServices\n",
This);
- return E_NOINTERFACE;
- }
-
FIXME("%p: unhandled interface %s\n", This, debugstr_guid(riid));
return E_NOINTERFACE;
@@ -1979,23 +1971,6 @@ static HRESULT WINAPI ITextRange_fnSetIndex(ITextRange *me, LONG
unit, LONG inde
return E_NOTIMPL;
}
-static void cp2range(ME_TextEditor *editor, LONG *cp1, LONG *cp2)
-{
- int len = ME_GetTextLength(editor) + 1;
- *cp1 = max(*cp1, 0);
- *cp2 = max(*cp2, 0);
- *cp1 = min(*cp1, len);
- *cp2 = min(*cp2, len);
- if (*cp1 > *cp2)
- {
- int tmp = *cp1;
- *cp1 = *cp2;
- *cp2 = tmp;
- }
- if (*cp1 == len)
- *cp1 = *cp2 = len - 1;
-}
-
static HRESULT WINAPI ITextRange_fnSetRange(ITextRange *me, LONG anchor, LONG active)
{
ITextRangeImpl *This = impl_from_ITextRange(me);
@@ -2005,13 +1980,7 @@ static HRESULT WINAPI ITextRange_fnSetRange(ITextRange *me, LONG
anchor, LONG ac
if (!This->child.reole)
return CO_E_RELEASED;
- cp2range(This->child.reole->editor, &anchor, &active);
- if (anchor == This->start && active == This->end)
- return S_FALSE;
-
- This->start = anchor;
- This->end = active;
- return S_OK;
+ return E_NOTIMPL;
}
static HRESULT textrange_inrange(LONG start, LONG end, ITextRange *range, LONG *ret)
@@ -2624,10 +2593,6 @@ static HRESULT WINAPI TextFont_SetDuplicate(ITextFont *iface,
ITextFont *pFont)
{
ITextFontImpl *This = impl_from_ITextFont(iface);
FIXME("(%p)->(%p): stub\n", This, pFont);
-
- if (This->range && !get_range_reole(This->range))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -2635,10 +2600,6 @@ static HRESULT WINAPI TextFont_CanChange(ITextFont *iface, LONG
*ret)
{
ITextFontImpl *This = impl_from_ITextFont(iface);
FIXME("(%p)->(%p): stub\n", This, ret);
-
- if (This->range && !get_range_reole(This->range))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -2646,10 +2607,6 @@ static HRESULT WINAPI TextFont_IsEqual(ITextFont *iface, ITextFont
*font, LONG *
{
ITextFontImpl *This = impl_from_ITextFont(iface);
FIXME("(%p)->(%p %p): stub\n", This, font, ret);
-
- if (This->range && !get_range_reole(This->range))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -2823,10 +2780,6 @@ static HRESULT WINAPI TextFont_GetStyle(ITextFont *iface, LONG
*value)
{
ITextFontImpl *This = impl_from_ITextFont(iface);
FIXME("(%p)->(%p): stub\n", This, value);
-
- if (This->range && !get_range_reole(This->range))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -2834,10 +2787,6 @@ static HRESULT WINAPI TextFont_SetStyle(ITextFont *iface, LONG
value)
{
ITextFontImpl *This = impl_from_ITextFont(iface);
FIXME("(%p)->(%d): stub\n", This, value);
-
- if (This->range && !get_range_reole(This->range))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3344,16 +3293,6 @@ static ULONG WINAPI TextPara_Release(ITextPara *iface)
return ref;
}
-static IRichEditOleImpl *para_get_reole(ITextParaImpl *This)
-{
- if (This->range)
- {
- ITextRangeImpl *rng = impl_from_ITextRange(This->range);
- return rng->child.reole;
- }
- return NULL;
-}
-
static HRESULT WINAPI TextPara_GetTypeInfoCount(ITextPara *iface, UINT *pctinfo)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
@@ -3421,10 +3360,6 @@ static HRESULT WINAPI TextPara_GetDuplicate(ITextPara *iface,
ITextPara **ret)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, ret);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3432,10 +3367,6 @@ static HRESULT WINAPI TextPara_SetDuplicate(ITextPara *iface,
ITextPara *para)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, para);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3443,10 +3374,6 @@ static HRESULT WINAPI TextPara_CanChange(ITextPara *iface, LONG
*ret)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, ret);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3454,10 +3381,6 @@ static HRESULT WINAPI TextPara_IsEqual(ITextPara *iface, ITextPara
*para, LONG *
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p %p)\n", This, para, ret);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3465,10 +3388,6 @@ static HRESULT WINAPI TextPara_Reset(ITextPara *iface, LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3476,10 +3395,6 @@ static HRESULT WINAPI TextPara_GetStyle(ITextPara *iface, LONG
*value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3487,23 +3402,13 @@ static HRESULT WINAPI TextPara_SetStyle(ITextPara *iface, LONG
value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
static HRESULT WINAPI TextPara_GetAlignment(ITextPara *iface, LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
- static int once;
-
- if (!once++) FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
+ FIXME("(%p)->(%p)\n", This, value);
return E_NOTIMPL;
}
@@ -3511,10 +3416,6 @@ static HRESULT WINAPI TextPara_SetAlignment(ITextPara *iface, LONG
value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3522,10 +3423,6 @@ static HRESULT WINAPI TextPara_GetHyphenation(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3533,10 +3430,6 @@ static HRESULT WINAPI TextPara_SetHyphenation(ITextPara *iface,
LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3544,10 +3437,6 @@ static HRESULT WINAPI TextPara_GetFirstLineIndent(ITextPara *iface,
FLOAT *value
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3555,10 +3444,6 @@ static HRESULT WINAPI TextPara_GetKeepTogether(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3566,10 +3451,6 @@ static HRESULT WINAPI TextPara_SetKeepTogether(ITextPara *iface,
LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3577,10 +3458,6 @@ static HRESULT WINAPI TextPara_GetKeepWithNext(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3588,10 +3465,6 @@ static HRESULT WINAPI TextPara_SetKeepWithNext(ITextPara *iface,
LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3599,10 +3472,6 @@ static HRESULT WINAPI TextPara_GetLeftIndent(ITextPara *iface,
FLOAT *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3610,10 +3479,6 @@ static HRESULT WINAPI TextPara_GetLineSpacing(ITextPara *iface,
FLOAT *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3621,10 +3486,6 @@ static HRESULT WINAPI TextPara_GetLineSpacingRule(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3632,10 +3493,6 @@ static HRESULT WINAPI TextPara_GetListAlignment(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3643,10 +3500,6 @@ static HRESULT WINAPI TextPara_SetListAlignment(ITextPara *iface,
LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3654,10 +3507,6 @@ static HRESULT WINAPI TextPara_GetListLevelIndex(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3665,10 +3514,6 @@ static HRESULT WINAPI TextPara_SetListLevelIndex(ITextPara *iface,
LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3676,10 +3521,6 @@ static HRESULT WINAPI TextPara_GetListStart(ITextPara *iface, LONG
*value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3687,10 +3528,6 @@ static HRESULT WINAPI TextPara_SetListStart(ITextPara *iface, LONG
value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3698,10 +3535,6 @@ static HRESULT WINAPI TextPara_GetListTab(ITextPara *iface, FLOAT
*value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3709,10 +3542,6 @@ static HRESULT WINAPI TextPara_SetListTab(ITextPara *iface, FLOAT
value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%.2f)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3720,10 +3549,6 @@ static HRESULT WINAPI TextPara_GetListType(ITextPara *iface, LONG
*value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3731,10 +3556,6 @@ static HRESULT WINAPI TextPara_SetListType(ITextPara *iface, LONG
value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3742,10 +3563,6 @@ static HRESULT WINAPI TextPara_GetNoLineNumber(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3753,10 +3570,6 @@ static HRESULT WINAPI TextPara_SetNoLineNumber(ITextPara *iface,
LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3764,10 +3577,6 @@ static HRESULT WINAPI TextPara_GetPageBreakBefore(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3775,10 +3584,6 @@ static HRESULT WINAPI TextPara_SetPageBreakBefore(ITextPara *iface,
LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3786,10 +3591,6 @@ static HRESULT WINAPI TextPara_GetRightIndent(ITextPara *iface,
FLOAT *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3797,10 +3598,6 @@ static HRESULT WINAPI TextPara_SetRightIndent(ITextPara *iface,
FLOAT value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%.2f)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3808,10 +3605,6 @@ static HRESULT WINAPI TextPara_SetIndents(ITextPara *iface, FLOAT
StartIndent, F
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%.2f %.2f %.2f)\n", This, StartIndent, LeftIndent,
RightIndent);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3819,10 +3612,6 @@ static HRESULT WINAPI TextPara_SetLineSpacing(ITextPara *iface,
LONG LineSpacing
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d %.2f)\n", This, LineSpacingRule, LineSpacing);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3830,10 +3619,6 @@ static HRESULT WINAPI TextPara_GetSpaceAfter(ITextPara *iface,
FLOAT *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3841,10 +3626,6 @@ static HRESULT WINAPI TextPara_SetSpaceAfter(ITextPara *iface,
FLOAT value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%.2f)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3852,10 +3633,6 @@ static HRESULT WINAPI TextPara_GetSpaceBefore(ITextPara *iface,
FLOAT *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3863,10 +3640,6 @@ static HRESULT WINAPI TextPara_SetSpaceBefore(ITextPara *iface,
FLOAT value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%.2f)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3874,10 +3647,6 @@ static HRESULT WINAPI TextPara_GetWidowControl(ITextPara *iface,
LONG *value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3885,10 +3654,6 @@ static HRESULT WINAPI TextPara_SetWidowControl(ITextPara *iface,
LONG value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3896,10 +3661,6 @@ static HRESULT WINAPI TextPara_GetTabCount(ITextPara *iface, LONG
*value)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%p)\n", This, value);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3907,10 +3668,6 @@ static HRESULT WINAPI TextPara_AddTab(ITextPara *iface, FLOAT
tbPos, LONG tbAlig
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%.2f %d %d)\n", This, tbPos, tbAlign, tbLeader);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3918,10 +3675,6 @@ static HRESULT WINAPI TextPara_ClearAllTabs(ITextPara *iface)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)\n", This);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3929,10 +3682,6 @@ static HRESULT WINAPI TextPara_DeleteTab(ITextPara *iface, FLOAT
pos)
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%.2f)\n", This, pos);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -3940,10 +3689,6 @@ static HRESULT WINAPI TextPara_GetTab(ITextPara *iface, LONG iTab,
FLOAT *ptbPos
{
ITextParaImpl *This = impl_from_ITextPara(iface);
FIXME("(%p)->(%d %p %p %p)\n", This, iTab, ptbPos, ptbAlign,
ptbLeader);
-
- if (!para_get_reole(This))
- return CO_E_RELEASED;
-
return E_NOTIMPL;
}
@@ -4282,12 +4027,26 @@ ITextDocument_fnRange(ITextDocument* me, LONG cp1, LONG cp2,
ITextRange** ppRange)
{
IRichEditOleImpl *This = impl_from_ITextDocument(me);
+ const int len = ME_GetTextLength(This->editor) + 1;
TRACE("%p %p %d %d\n", This, ppRange, cp1, cp2);
if (!ppRange)
return E_INVALIDARG;
- cp2range(This->editor, &cp1, &cp2);
+ cp1 = max(cp1, 0);
+ cp2 = max(cp2, 0);
+ cp1 = min(cp1, len);
+ cp2 = min(cp2, len);
+ if (cp1 > cp2)
+ {
+ LONG tmp;
+ tmp = cp1;
+ cp1 = cp2;
+ cp2 = tmp;
+ }
+ if (cp1 == len)
+ cp1 = cp2 = len - 1;
+
return CreateITextRange(This, cp1, cp2, ppRange);
}
@@ -5484,6 +5243,7 @@ void ME_GetOLEObjectSize(const ME_Context *c, ME_Run *run, SIZE
*pSize)
return;
}
}
+ IDataObject_Release(ido);
switch (stgm.tymed)
{
@@ -5491,19 +5251,17 @@ void ME_GetOLEObjectSize(const ME_Context *c, ME_Run *run, SIZE
*pSize)
GetObjectW(stgm.u.hBitmap, sizeof(dibsect), &dibsect);
pSize->cx = dibsect.dsBm.bmWidth;
pSize->cy = dibsect.dsBm.bmHeight;
- if (!stgm.pUnkForRelease) DeleteObject(stgm.u.hBitmap);
break;
case TYMED_ENHMF:
GetEnhMetaFileHeader(stgm.u.hEnhMetaFile, sizeof(emh), &emh);
pSize->cx = emh.rclBounds.right - emh.rclBounds.left;
pSize->cy = emh.rclBounds.bottom - emh.rclBounds.top;
- if (!stgm.pUnkForRelease) DeleteEnhMetaFile(stgm.u.hEnhMetaFile);
break;
default:
FIXME("Unsupported tymed %d\n", stgm.tymed);
break;
}
- IDataObject_Release(ido);
+ ReleaseStgMedium(&stgm);
if (c->editor->nZoomNumerator != 0)
{
pSize->cx = MulDiv(pSize->cx, c->editor->nZoomNumerator,
c->editor->nZoomDenominator);
@@ -5511,8 +5269,7 @@ void ME_GetOLEObjectSize(const ME_Context *c, ME_Run *run, SIZE
*pSize)
}
}
-void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run *run,
- ME_Paragraph *para, BOOL selected)
+void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run *run, BOOL selected)
{
IDataObject* ido;
FORMATETC fmt;
@@ -5522,6 +5279,8 @@ void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run *run,
HDC hMemDC;
SIZE sz;
BOOL has_size;
+ HBITMAP old_bm;
+ RECT rc;
assert(run->nFlags & MERF_GRAPHICS);
assert(run->ole_obj);
@@ -5547,36 +5306,31 @@ void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run *run,
return;
}
}
+ IDataObject_Release(ido);
+
switch (stgm.tymed)
{
case TYMED_GDI:
GetObjectW(stgm.u.hBitmap, sizeof(dibsect), &dibsect);
hMemDC = CreateCompatibleDC(c->hDC);
- SelectObject(hMemDC, stgm.u.hBitmap);
+ old_bm = SelectObject(hMemDC, stgm.u.hBitmap);
if (has_size)
{
convert_sizel(c, &run->ole_obj->sizel, &sz);
} else {
- sz.cx = MulDiv(dibsect.dsBm.bmWidth, c->dpi.cx, 96);
- sz.cy = MulDiv(dibsect.dsBm.bmHeight, c->dpi.cy, 96);
+ sz.cx = dibsect.dsBm.bmWidth;
+ sz.cy = dibsect.dsBm.bmHeight;
}
if (c->editor->nZoomNumerator != 0)
{
sz.cx = MulDiv(sz.cx, c->editor->nZoomNumerator,
c->editor->nZoomDenominator);
sz.cy = MulDiv(sz.cy, c->editor->nZoomNumerator,
c->editor->nZoomDenominator);
}
- if (sz.cx == dibsect.dsBm.bmWidth && sz.cy == dibsect.dsBm.bmHeight)
- {
- BitBlt(c->hDC, x, y - sz.cy,
- dibsect.dsBm.bmWidth, dibsect.dsBm.bmHeight,
- hMemDC, 0, 0, SRCCOPY);
- } else {
- StretchBlt(c->hDC, x, y - sz.cy, sz.cx, sz.cy,
- hMemDC, 0, 0, dibsect.dsBm.bmWidth,
- dibsect.dsBm.bmHeight, SRCCOPY);
- }
+ StretchBlt(c->hDC, x, y - sz.cy, sz.cx, sz.cy,
+ hMemDC, 0, 0, dibsect.dsBm.bmWidth, dibsect.dsBm.bmHeight, SRCCOPY);
+
+ SelectObject(hMemDC, old_bm);
DeleteDC(hMemDC);
- if (!stgm.pUnkForRelease) DeleteObject(stgm.u.hBitmap);
break;
case TYMED_ENHMF:
GetEnhMetaFileHeader(stgm.u.hEnhMetaFile, sizeof(emh), &emh);
@@ -5584,8 +5338,8 @@ void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run *run,
{
convert_sizel(c, &run->ole_obj->sizel, &sz);
} else {
- sz.cy = MulDiv(emh.rclBounds.bottom - emh.rclBounds.top, c->dpi.cx, 96);
- sz.cx = MulDiv(emh.rclBounds.right - emh.rclBounds.left, c->dpi.cy, 96);
+ sz.cx = emh.rclBounds.right - emh.rclBounds.left;
+ sz.cy = emh.rclBounds.bottom - emh.rclBounds.top;
}
if (c->editor->nZoomNumerator != 0)
{
@@ -5593,25 +5347,21 @@ void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run *run,
sz.cy = MulDiv(sz.cy, c->editor->nZoomNumerator,
c->editor->nZoomDenominator);
}
- {
- RECT rc;
-
- rc.left = x;
- rc.top = y - sz.cy;
- rc.right = x + sz.cx;
- rc.bottom = y;
- PlayEnhMetaFile(c->hDC, stgm.u.hEnhMetaFile, &rc);
- }
- if (!stgm.pUnkForRelease) DeleteEnhMetaFile(stgm.u.hEnhMetaFile);
+ rc.left = x;
+ rc.top = y - sz.cy;
+ rc.right = x + sz.cx;
+ rc.bottom = y;
+ PlayEnhMetaFile(c->hDC, stgm.u.hEnhMetaFile, &rc);
break;
default:
FIXME("Unsupported tymed %d\n", stgm.tymed);
selected = FALSE;
break;
}
+ ReleaseStgMedium(&stgm);
+
if (selected && !c->editor->bHideSelection)
PatBlt(c->hDC, x, y - sz.cy, sz.cx, sz.cy, DSTINVERT);
- IDataObject_Release(ido);
}
void ME_DeleteReObject(REOBJECT* reo)
diff --git a/dll/win32/riched20/run.c b/dll/win32/riched20/run.c
index 445bbc2f91..098c4f8b4d 100644
--- a/dll/win32/riched20/run.c
+++ b/dll/win32/riched20/run.c
@@ -185,10 +185,9 @@ void ME_RunOfsFromCharOfs(ME_TextEditor *editor,
int *pOfs)
{
ME_DisplayItem *item, *next_item;
- int endOfs = nCharOfs, len = ME_GetTextLength(editor);
nCharOfs = max(nCharOfs, 0);
- nCharOfs = min(nCharOfs, len);
+ nCharOfs = min(nCharOfs, ME_GetTextLength(editor));
/* Find the paragraph at the offset. */
next_item = editor->pBuffer->pFirst->member.para.next_para;
@@ -211,11 +210,7 @@ void ME_RunOfsFromCharOfs(ME_TextEditor *editor,
nCharOfs -= item->member.run.nCharOfs;
if (ppRun) *ppRun = item;
- if (pOfs) {
- if (((*ppRun)->member.run.nFlags & MERF_ENDPARA) && endOfs > len)
- *pOfs = (*ppRun)->member.run.len;
- else *pOfs = nCharOfs;
- }
+ if (pOfs) *pOfs = nCharOfs;
}
/******************************************************************************
diff --git a/dll/win32/riched20/table.c b/dll/win32/riched20/table.c
index b834bc7bc3..d2cab9a817 100644
--- a/dll/win32/riched20/table.c
+++ b/dll/win32/riched20/table.c
@@ -400,7 +400,7 @@ void ME_ProtectPartialTableDeletion(ME_TextEditor *editor, ME_Cursor
*c, int *nC
}
}
if (*nChars < 0)
- nChars = 0;
+ *nChars = 0;
}
}
diff --git a/media/doc/README.WINE b/media/doc/README.WINE
index a30fea9f86..4b6fadfe70 100644
--- a/media/doc/README.WINE
+++ b/media/doc/README.WINE
@@ -158,7 +158,7 @@ reactos/dll/win32/qmgrprxy # Synced to WineStaging-2.9
reactos/dll/win32/query # Synced to WineStaging-2.9
reactos/dll/win32/rasapi32 # Synced to WineStaging-2.9
reactos/dll/win32/resutils # Synced to WineStaging-2.9
-reactos/dll/win32/riched20 # Synced to WineStaging-2.16
+reactos/dll/win32/riched20 # Synced to Wine-3.0
reactos/dll/win32/riched32 # Synced to WineStaging-2.9
reactos/dll/win32/rpcrt4 # Synced to WineStaging-2.16
reactos/dll/win32/rsabase # Synced to WineStaging-2.9