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