Alexandre Julliard : winex11: Allocate clipboard data as GMEM_FIXED.

Alexandre Julliard julliard at winehq.org
Thu Aug 18 10:23:25 CDT 2016


Module: wine
Branch: master
Commit: 60f8b516e2a6233eaee8ae58cd2eccce998dd81f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=60f8b516e2a6233eaee8ae58cd2eccce998dd81f

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Aug 18 20:57:51 2016 +0900

winex11: Allocate clipboard data as GMEM_FIXED.

Based on a patch by Rafał Harabień.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/tests/clipboard.c | 10 +++++-----
 dlls/winex11.drv/clipboard.c  | 24 ++++++++++--------------
 2 files changed, 15 insertions(+), 19 deletions(-)

diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c
index 2e9cd24..4fac7c6 100644
--- a/dlls/user32/tests/clipboard.c
+++ b/dlls/user32/tests/clipboard.c
@@ -846,9 +846,9 @@ static void test_handles( HWND hwnd )
     }
 
     data = GetClipboardData( CF_OEMTEXT );
-    todo_wine ok( is_fixed( data ), "expected fixed mem %p\n", data );
+    ok( is_fixed( data ), "expected fixed mem %p\n", data );
     data = GetClipboardData( CF_UNICODETEXT );
-    todo_wine ok( is_fixed( data ), "expected fixed mem %p\n", data );
+    ok( is_fixed( data ), "expected fixed mem %p\n", data );
     data = GetClipboardData( CF_BITMAP );
     ok( data == bitmap, "expected bitmap %p\n", data );
     data = GetClipboardData( CF_PALETTE );
@@ -858,7 +858,7 @@ static void test_handles( HWND hwnd )
     data = GetClipboardData( CF_GDIOBJFIRST + 2 );
     ok( data == pen, "expected pen %p\n", data );
     data = GetClipboardData( CF_DIB );
-    todo_wine ok( is_fixed( data ), "expected fixed mem %p\n", data );
+    ok( is_fixed( data ), "expected fixed mem %p\n", data );
     data = GetClipboardData( CF_DIBV5 );
     todo_wine ok( is_fixed( data ), "expected fixed mem %p\n", data );
 
@@ -924,7 +924,7 @@ static DWORD WINAPI test_handles_thread2( void *arg )
     ok( h == pen, "different pen %p / %p\n", h, pen );
     trace( "pen %p\n", h );
     h = GetClipboardData( CF_DIB );
-    todo_wine ok( is_fixed( h ), "expected fixed mem %p\n", h );
+    ok( is_fixed( h ), "expected fixed mem %p\n", h );
     h = GetClipboardData( CF_DIBV5 );
     todo_wine ok( is_fixed( h ), "expected fixed mem %p\n", h );
     r = CloseClipboard();
@@ -942,7 +942,7 @@ static void test_handles_process( const char *str )
     r = OpenClipboard( 0 );
     ok( r, "gle %d\n", GetLastError() );
     h = GetClipboardData( CF_TEXT );
-    todo_wine ok( is_fixed( h ), "expected fixed mem %p\n", h );
+    ok( is_fixed( h ), "expected fixed mem %p\n", h );
     ptr = GlobalLock( h );
     if (ptr) todo_wine ok( !strcmp( str, ptr ), "wrong data '%.5s'\n", ptr );
     GlobalUnlock( h );
diff --git a/dlls/winex11.drv/clipboard.c b/dlls/winex11.drv/clipboard.c
index 460440d..9b8ff65 100644
--- a/dlls/winex11.drv/clipboard.c
+++ b/dlls/winex11.drv/clipboard.c
@@ -863,8 +863,7 @@ static BOOL X11DRV_CLIPBOARD_RenderSynthesizedText(Display *display, UINT wForma
     else
         alloc_size = dst_chars;
 
-    hData = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE |
-        GMEM_DDESHARE, alloc_size);
+    hData = GlobalAlloc(GMEM_ZEROINIT | GMEM_FIXED, alloc_size);
 
     lpstrT = GlobalLock(hData);
 
@@ -941,8 +940,7 @@ static HGLOBAL create_dib_from_bitmap(HBITMAP hBmp)
 
     /* Allocate the packed DIB */
     TRACE("\tAllocating packed DIB of size %d\n", cPackedSize);
-    hPackedDIB = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE /*| GMEM_ZEROINIT*/,
-                             cPackedSize );
+    hPackedDIB = GlobalAlloc( GMEM_FIXED, cPackedSize );
     if ( !hPackedDIB )
     {
         WARN("Could not allocate packed DIB!\n");
@@ -1233,7 +1231,7 @@ static HANDLE X11DRV_CLIPBOARD_ImportXAString(Display *display, Window w, Atom p
             inlcount++;
     }
 
-    if ((hText = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, cbytes + inlcount + 1)))
+    if ((hText = GlobalAlloc(GMEM_FIXED, cbytes + inlcount + 1)))
     {
         lpstr = GlobalLock(hText);
 
@@ -1290,7 +1288,7 @@ static HANDLE X11DRV_CLIPBOARD_ImportUTF8(Display *display, Window w, Atom prop)
         }
 
         count = MultiByteToWideChar(CP_UTF8, 0, lpstr, -1, NULL, 0);
-        hUnicodeText = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, count * sizeof(WCHAR));
+        hUnicodeText = GlobalAlloc(GMEM_FIXED, count * sizeof(WCHAR));
 
         if (hUnicodeText)
         {
@@ -1348,7 +1346,7 @@ static HANDLE X11DRV_CLIPBOARD_ImportCompoundText(Display *display, Window w, At
 
     TRACE("lcount = %d, destlen=%d, srcstr %s\n", lcount, destlen, srcstr[0]);
 
-    if ((hUnicodeText = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, (destlen + lcount + 1) * sizeof(WCHAR))))
+    if ((hUnicodeText = GlobalAlloc(GMEM_FIXED, (destlen + lcount + 1) * sizeof(WCHAR))))
     {
         WCHAR *deststr = GlobalLock(hUnicodeText);
         MultiByteToWideChar(CP_UNIXCP, 0, srcstr[0], -1, deststr, destlen);
@@ -1432,8 +1430,7 @@ static HANDLE X11DRV_CLIPBOARD_ImportXAPIXMAP(Display *display, Window w, Atom p
             DWORD info_size = bitmap_info_size( info, DIB_RGB_COLORS );
             BYTE *ptr;
 
-            hClipData = GlobalAlloc( GMEM_MOVEABLE | GMEM_DDESHARE,
-                                     info_size + info->bmiHeader.biSizeImage );
+            hClipData = GlobalAlloc( GMEM_FIXED, info_size + info->bmiHeader.biSizeImage );
             if (hClipData)
             {
                 ptr = GlobalLock( hClipData );
@@ -1614,7 +1611,7 @@ static HANDLE X11DRV_CLIPBOARD_ImportTextUriList(Display *display, Window w, Ato
     if (out && end >= len)
     {
         DROPFILES *dropFiles;
-        handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, sizeof(DROPFILES) + (size + 1)*sizeof(WCHAR));
+        handle = GlobalAlloc(GMEM_FIXED, sizeof(DROPFILES) + (size + 1)*sizeof(WCHAR));
         if (handle)
         {
             dropFiles = (DROPFILES*) GlobalLock(handle);
@@ -1650,8 +1647,7 @@ static HANDLE X11DRV_CLIPBOARD_ImportClipboardData(Display *display, Window w, A
     {
         if (cbytes)
         {
-            /* Turn on the DDESHARE flag to enable shared 32 bit memory */
-            hClipData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, cbytes);
+            hClipData = GlobalAlloc(GMEM_FIXED, cbytes);
             if (hClipData == 0)
             {
                 HeapFree(GetProcessHeap(), 0, lpdata);
@@ -1716,7 +1712,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportClipboardData(Display *display, Window requ
     {
         datasize = GlobalSize(lpData->hData);
 
-        hClipData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, datasize);
+        hClipData = GlobalAlloc(GMEM_FIXED, datasize);
         if (hClipData == 0) return NULL;
 
         if ((lpClipData = GlobalLock(hClipData)))
@@ -2182,7 +2178,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportHDROP(Display *display, Window requestor, A
         ERR("Failed to export %04x format\n", lpdata->wFormatID);
         return 0;
     }
-    hClipData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, textUriListSize);
+    hClipData = GlobalAlloc(GMEM_FIXED, textUriListSize);
     if (hClipData == NULL)
         return 0;
     hDrop = (HDROP) lpdata->hData;




More information about the wine-cvs mailing list