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