Francois Gouget : user32/tests: Test delayed clipboard rendering after window destruction.
Alexandre Julliard
julliard at winehq.org
Tue Aug 10 16:24:07 CDT 2021
Module: wine
Branch: master
Commit: ce98c3b58e1006c86b1ab5d1600e0c2d2b56413e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ce98c3b58e1006c86b1ab5d1600e0c2d2b56413e
Author: Francois Gouget <fgouget at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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)
More information about the wine-cvs
mailing list