Module: wine Branch: master Commit: 0d4451a85dca44bc3fe154f6fb9281785df38938 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0d4451a85dca44bc3fe154f6fb...
Author: Huw Davies huw@codeweavers.com Date: Fri Apr 17 14:46:06 2009 +0100
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 deletions(-)
diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c index 30b1707..41561a4 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 0b27a87..07d58a5 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);