From 01cd9fb2c6dd2601e1cdf441474c360118f46249 Mon Sep 17 00:00:00 2001 From: Krzysztof Foltman Date: Mon, 11 Apr 2005 12:50:48 +0000 Subject: [PATCH] - EM_CANPASTE implemented - updated TODO list (including list of (un)implemented messages) - fixed WM_PASTE (the previous version might not close the clipboard if it didn't contain a usable format) - scrollbar operations (like clicking on arrows) should update scrollbar's current position --- dlls/riched20/editor.c | 43 ++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index e32a57bd9c..7b7f8653e4 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -23,7 +23,7 @@ Messages (ANSI versions not done yet) - EM_AUTOURLDETECT 2.0 - - EM_CANPASTE + + EM_CANPASTE + EM_CANREDO 2.0 + EM_CANUNDO - EM_CHARFROMPOS @@ -73,7 +73,7 @@ - EM_LINESCROLL - EM_PASTESPECIAL - EM_POSFROMCHARS - - EM_REDO 2.0 + + EM_REDO 2.0 - EM_REQUESTRESIZE + EM_REPLACESEL (proper style?) ANSI&Unicode - EM_SCROLL @@ -102,9 +102,9 @@ - EM_SETWORDBREAKPROCEX - EM_SETWORDWRAPMODE 1.0asian - EM_STOPGROUPTYPING 2.0 - - EM_STREAMIN - - EM_STREAMOUT - - EM_UNDO + + EM_STREAMIN (can't fall back to text when the RTF isn't really RTF) + + EM_STREAMOUT + + EM_UNDO + WM_CHAR + WM_CLEAR + WM_COPY @@ -166,30 +166,25 @@ /* * RICHED20 TODO (incomplete): * - * - font caching + * - messages/styles/notifications listed above + * - Undo coalescing * - add remaining CHARFORMAT/PARAFORMAT fields * - right/center align should strip spaces from the beginning - * - more advanced navigation (Ctrl-arrows, PageUp/PageDn) + * - more advanced navigation (Ctrl-arrows) * - tabs - * - pictures (not just smiling faces that lack API support ;-) ) - * - OLE objects + * - pictures/OLE objects (not just smiling faces that lack API support ;-) ) + * - COM interface (looks like a major pain in the TODO list) * - calculate heights of pictures (half-done) - * - EM_STREAMIN/EM_STREAMOUT * - horizontal scrolling (not even started) - * - fix scrollbars and refresh (it sucks bigtime) * - hysteresis during wrapping (related to scrollbars appearing/disappearing) - * - should remember maximum row width for wrap hysteresis * - find/replace * - how to implement EM_FORMATRANGE and EM_DISPLAYBAND ? (Mission Impossible) - * - italic cursor with italic fonts + * - italic caret with italic fonts * - IME * - most notifications aren't sent at all (the most important ones are) * - when should EN_SELCHANGE be sent after text change ? (before/after EN_UPDATE?) * - WM_SETTEXT may use wrong style (but I'm 80% sure it's OK) * - EM_GETCHARFORMAT with SCF_SELECTION may not behave 100% like in original (but very close) - * - bugs in end-of-text handling (the gray bar) could get me in jail ;-) - * - determination of row size - * - end-of-paragraph marks should be of reasonable size * * Bugs that are probably fixed, but not so easy to verify: * - EN_UPDATE/EN_CHANGE are handled very incorrectly (should be OK now) @@ -690,7 +685,6 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP switch(msg) { UNSUPPORTED_MSG(EM_AUTOURLDETECT) - UNSUPPORTED_MSG(EM_CANPASTE) UNSUPPORTED_MSG(EM_CHARFROMPOS) UNSUPPORTED_MSG(EM_DISPLAYBAND) UNSUPPORTED_MSG(EM_EXLIMITTEXT) @@ -931,6 +925,15 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP ME_UpdateRepaint(editor); return 0; } + case EM_CANPASTE: + { + UINT nRTFFormat = RegisterClipboardFormatA("Rich Text Format"); + if (IsClipboardFormatAvailable(nRTFFormat)) + return TRUE; + if (IsClipboardFormatAvailable(CF_UNICODETEXT)) + return TRUE; + return FALSE; + } case WM_PASTE: { DWORD dwFormat = 0; @@ -939,8 +942,6 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP UINT nRTFFormat = RegisterClipboardFormatA("Rich Text Format"); UINT cf = 0; - if (!OpenClipboard(hWnd)) - return 0; if (IsClipboardFormatAvailable(nRTFFormat)) cf = nRTFFormat, dwFormat = SF_RTF; else if (IsClipboardFormatAvailable(CF_UNICODETEXT)) @@ -948,6 +949,8 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP else return 0; + if (!OpenClipboard(hWnd)) + return 0; gds.hData = GetClipboardData(cf); gds.nLength = 0; es.dwCookie = (DWORD)&gds; @@ -1164,7 +1167,7 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP if (nPos != editor->nScrollPosY) { ScrollWindow(hWnd, 0, editor->nScrollPosY-nPos, NULL, NULL); editor->nScrollPosY = nPos; - SetScrollPos(hWnd, SB_VERT, nPos, FALSE); + SetScrollPos(hWnd, SB_VERT, nPos, TRUE); UpdateWindow(hWnd); } break;