From 0d4451a85dca44bc3fe154f6fb9281785df38938 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Fri, 17 Apr 2009 14:46:06 +0100 Subject: [PATCH] winex11.drv: Fix ordering of synthesized text formats. --- dlls/user32/tests/clipboard.c | 71 +++++++++++++++++++++++++++++++++++ dlls/winex11.drv/clipboard.c | 2 +- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c index 30b170759a2..41561a496ba 100644 --- a/dlls/user32/tests/clipboard.c +++ b/dlls/user32/tests/clipboard.c @@ -21,6 +21,7 @@ #include "wine/test.h" #include "winbase.h" #include "winerror.h" +#include "wingdi.h" #include "winuser.h" static BOOL is_win9x = FALSE; @@ -190,6 +191,75 @@ todo_wine test_last_error(ERROR_CLIPBOARD_NOT_OPEN); } +static HGLOBAL create_text(void) +{ + HGLOBAL h = GlobalAlloc(GMEM_DDESHARE|GMEM_MOVEABLE, 5); + char *p = GlobalLock(h); + strcpy(p, "test"); + GlobalUnlock(h); + return h; +} + +static HENHMETAFILE create_emf(void) +{ + const RECT rect = {0, 0, 100, 100}; + HDC hdc = CreateEnhMetaFileA(NULL, NULL, &rect, "HENHMETAFILE Ole Clipboard Test\0Test\0\0"); + ExtTextOutA(hdc, 0, 0, ETO_OPAQUE, &rect, "Test String", strlen("Test String"), NULL); + return CloseEnhMetaFile(hdc); +} + +static void test_synthesized(void) +{ + HGLOBAL h, htext; + HENHMETAFILE emf; + BOOL r; + UINT cf; + + htext = create_text(); + emf = create_emf(); + + r = OpenClipboard(NULL); + ok(r, "gle %d\n", GetLastError()); + r = EmptyClipboard(); + ok(r, "gle %d\n", GetLastError()); + h = SetClipboardData(CF_TEXT, htext); + ok(h == htext, "got %p\n", h); + h = SetClipboardData(CF_ENHMETAFILE, emf); + ok(h == emf, "got %p\n", h); + r = CloseClipboard(); + ok(r, "gle %d\n", GetLastError()); + + r = OpenClipboard(NULL); + ok(r, "gle %d\n", GetLastError()); + cf = EnumClipboardFormats(0); + ok(cf == CF_TEXT, "cf %08x\n", cf); + + cf = EnumClipboardFormats(cf); + ok(cf == CF_ENHMETAFILE, "cf %08x\n", cf); + + cf = EnumClipboardFormats(cf); + todo_wine ok(cf == CF_LOCALE, "cf %08x\n", cf); + if(cf == CF_LOCALE) + cf = EnumClipboardFormats(cf); + ok(cf == CF_OEMTEXT, "cf %08x\n", cf); + + cf = EnumClipboardFormats(cf); + ok(cf == CF_UNICODETEXT, "cf %08x\n", cf); + + cf = EnumClipboardFormats(cf); + todo_wine ok(cf == CF_METAFILEPICT, "cf %08x\n", cf); + if(cf == CF_METAFILEPICT) + cf = EnumClipboardFormats(cf); + + ok(cf == 0, "cf %08x\n", cf); + + r = EmptyClipboard(); + ok(r, "gle %d\n", GetLastError()); + + r = CloseClipboard(); + ok(r, "gle %d\n", GetLastError()); +} + START_TEST(clipboard) { SetLastError(0xdeadbeef); @@ -198,4 +268,5 @@ START_TEST(clipboard) test_RegisterClipboardFormatA(); test_ClipboardOwner(); + test_synthesized(); } diff --git a/dlls/winex11.drv/clipboard.c b/dlls/winex11.drv/clipboard.c index 0b27a87093e..07d58a5d17b 100644 --- a/dlls/winex11.drv/clipboard.c +++ b/dlls/winex11.drv/clipboard.c @@ -2778,9 +2778,9 @@ void CDECL X11DRV_EndClipboardUpdate(void) INT count = ClipDataCount; /* Do Unicode <-> Text <-> OEM mapping */ - X11DRV_CLIPBOARD_SynthesizeData(CF_UNICODETEXT); X11DRV_CLIPBOARD_SynthesizeData(CF_TEXT); X11DRV_CLIPBOARD_SynthesizeData(CF_OEMTEXT); + X11DRV_CLIPBOARD_SynthesizeData(CF_UNICODETEXT); /* Enhmetafile <-> MetafilePict mapping */ X11DRV_CLIPBOARD_SynthesizeData(CF_ENHMETAFILE);