From: Kenneth Haley Subject: [PATCH 1/1] riched20: add support for EM_PASTESPECIAL Message-Id: Date: Sat, 6 Aug 2016 14:18:56 -0600 partial fix for https://bugs.winehq.org/show_bug.cgi?id=14530 Support CF_TEXT & CF_UNICODETEXT clipboard formats. Tested on Arch Linux.
partial fix for https://bugs.winehq.org/show_bug.cgi?id=14530

Support CF_TEXT & CF_UNICODETEXT clipboard formats.

Tested on Arch Linux.
From 00075cd8244be0914020590a82d76635fadc12e5 Mon Sep 17 00:00:00 2001 From: "K. Haley" Date: Sat, 5 Apr 2014 23:03:26 -0600 Subject: [PATCH 1/1] riched20: add support for EM_PASTESPECIAL partial fix for https://bugs.winehq.org/show_bug.cgi?id=14530 Support CF_TEXT & CF_UNICODETEXT clipboard formats. Tested on Arch Linux. --- dlls/riched20/editor.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index 9ec72e2..1dccceb 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -2117,6 +2117,45 @@ static BOOL ME_Paste(ME_TextEditor *editor) return TRUE; } +static BOOL ME_PasteSpecial(ME_TextEditor *editor, BOOL unicode, UINT cf, REPASTESPECIAL *rps) +{ + DWORD dwFormat = SF_TEXT; + EDITSTREAM es; + ME_GlobalDestStruct gds; + + if (rps != NULL && rps->dwAspect != 0) { + FIXME("REPASTESPECIAL structure handling not yet implemented\n"); + } + + switch(cf) + { + // on XP CF_TEXT appears to paste unicode into W version of controll + case CF_TEXT: + case CF_UNICODETEXT: + cf=CF_UNICODETEXT; + if (!IsClipboardFormatAvailable(cf)) + return FALSE; + es.pfnCallback = ME_ReadFromHGLOBALUnicode; + dwFormat|=SF_UNICODE; + if (!unicode) + FIXME("convert unicode to ANSI\n"); + break; + default: + FIXME("Clipboard formats other than CF_TEXT and CF_UNICODETEXT not yet implemented!\n"); + return FALSE; + } + + if (!OpenClipboard(editor->hWnd)) + return FALSE; + gds.hData = GetClipboardData(cf); + gds.nLength = 0; + es.dwCookie = (DWORD_PTR)&gds; + ME_StreamIn(editor, dwFormat|SFF_SELECTION, &es, FALSE); + + CloseClipboard(); + return TRUE; +} + static BOOL ME_Copy(ME_TextEditor *editor, const ME_Cursor *start, int nChars) { LPDATAOBJECT dataObj = NULL; @@ -3287,7 +3326,6 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, UNSUPPORTED_MSG(EM_GETTYPOGRAPHYOPTIONS) UNSUPPORTED_MSG(EM_GETUNDONAME) UNSUPPORTED_MSG(EM_GETWORDBREAKPROCEX) - UNSUPPORTED_MSG(EM_PASTESPECIAL) UNSUPPORTED_MSG(EM_SELECTIONTYPE) UNSUPPORTED_MSG(EM_SETBIDIOPTIONS) UNSUPPORTED_MSG(EM_SETEDITSTYLE) @@ -3300,6 +3338,8 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, /* Messages specific to Richedit controls */ + case EM_PASTESPECIAL: + return ME_PasteSpecial(editor, unicode, (UINT)wParam, (REPASTESPECIAL*)lParam); case EM_STREAMIN: return ME_StreamIn(editor, wParam, (EDITSTREAM*)lParam, TRUE); case EM_STREAMOUT: -- 2.9.0