Huw Davies : winex11.drv: Fix ordering of synthesized text formats.
Alexandre Julliard
julliard at winehq.org
Mon Apr 20 11:33:07 CDT 2009
Module: wine
Branch: master
Commit: 0d4451a85dca44bc3fe154f6fb9281785df38938
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0d4451a85dca44bc3fe154f6fb9281785df38938
Author: Huw Davies <huw at 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);
More information about the wine-cvs
mailing list