Module: wine Branch: master Commit: ce98c3b58e1006c86b1ab5d1600e0c2d2b56413e URL: https://source.winehq.org/git/wine.git/?a=commit;h=ce98c3b58e1006c86b1ab5d16...
Author: Francois Gouget fgouget@codeweavers.com Date: Tue Aug 10 05:51:39 2021 +0200
user32/tests: Test delayed clipboard rendering after window destruction.
If the window does not render the delayed-rendering clipboard formats before it is destroyed, then they should be removed from the clipboard, including the derived formats added by CloseClipboard().
Signed-off-by: Francois Gouget fgouget@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/tests/clipboard.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c index f351a6a29a8..8515ba5b88a 100644 --- a/dlls/user32/tests/clipboard.c +++ b/dlls/user32/tests/clipboard.c @@ -949,6 +949,48 @@ static void test_synthesized(void) r = CloseClipboard(); ok(r, "gle %d\n", GetLastError()); DestroyWindow( hwnd ); + + /* Check what happens to the delayed rendering clipboard formats when the + * owner window is destroyed. + */ + hwnd = CreateWindowA( "static", NULL, WS_POPUP, 0, 0, 10, 10, 0, 0, 0, NULL ); + SetWindowLongPtrA( hwnd, GWLP_WNDPROC, (LONG_PTR)renderer_winproc ); + + r = open_clipboard(hwnd); + ok(r, "gle %d\n", GetLastError()); + r = EmptyClipboard(); + ok(r, "gle %d\n", GetLastError()); + SetClipboardData( CF_UNICODETEXT, NULL ); + r = CloseClipboard(); + ok(r, "gle %d\n", GetLastError()); + + r = open_clipboard(NULL); + ok(r, "gle %d\n", GetLastError()); + count = CountClipboardFormats(); + ok(count == 4, "count %u\n", count ); + + DestroyWindow( hwnd ); + + /* CF_UNICODETEXT and derivatives, CF_TEXT + CF_OEMTEXT, should be gone */ + count = CountClipboardFormats(); + todo_wine ok(count == 1, "count %u\n", count ); + cf = EnumClipboardFormats( 0 ); + ok(cf == CF_LOCALE, "unexpected clipboard format %u\n", cf); + + r = CloseClipboard(); + ok(r, "gle %d\n", GetLastError()); + + r = open_clipboard(NULL); + ok(r, "gle %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + data = (void*)1; if (broken(1)) /* FIXME Crashes in Wine */ + data = GetClipboardData( CF_TEXT ); + ok(GetLastError() == 0xdeadbeef, "unexpected last error %d\n", GetLastError()); + todo_wine ok(!data, "GetClipboardData() should have returned NULL\n"); + + r = CloseClipboard(); + ok(r, "gle %d\n", GetLastError()); }
static DWORD WINAPI clipboard_render_data_thread(void *param)