Alexandre Julliard : winex11: Add separate export functions for the various string types.

Alexandre Julliard julliard at winehq.org
Mon Sep 19 10:32:12 CDT 2016


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Sat Sep 17 11:10:31 2016 +0900

winex11: Add separate export functions for the various string types.

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

---

 dlls/winex11.drv/clipboard.c | 60 ++++++++++++++++----------------------------
 1 file changed, 21 insertions(+), 39 deletions(-)

diff --git a/dlls/winex11.drv/clipboard.c b/dlls/winex11.drv/clipboard.c
index 190935c..ed304ac 100644
--- a/dlls/winex11.drv/clipboard.c
+++ b/dlls/winex11.drv/clipboard.c
@@ -140,6 +140,10 @@ static HANDLE export_data(Display *display, Window requestor, Atom aTarget,
                           Atom rprop, LPWINE_CLIPDATA lpData, LPDWORD lpBytes);
 static HANDLE export_string(Display *display, Window requestor, Atom aTarget,
                             Atom rprop, LPWINE_CLIPDATA lpData, LPDWORD lpBytes);
+static HANDLE export_utf8_string(Display *display, Window requestor, Atom aTarget,
+                                 Atom rprop, LPWINE_CLIPDATA lpData, LPDWORD lpBytes);
+static HANDLE export_compound_text(Display *display, Window requestor, Atom aTarget,
+                                   Atom rprop, LPWINE_CLIPDATA lpData, LPDWORD lpBytes);
 static HANDLE export_pixmap(Display *display, Window requestor, Atom aTarget,
                             Atom rprop, LPWINE_CLIPDATA lpdata, LPDWORD lpBytes);
 static HANDLE export_image_bmp(Display *display, Window requestor, Atom aTarget,
@@ -192,8 +196,8 @@ static const struct
     { 0, CF_PENDATA,         XATOM_WCF_PENDATA,         import_data,          export_data },
     { 0, CF_RIFF,            XATOM_WCF_RIFF,            import_data,          export_data },
     { 0, CF_WAVE,            XATOM_WCF_WAVE,            import_data,          export_data },
-    { 0, CF_UNICODETEXT,     XATOM_UTF8_STRING,         import_utf8_string,   export_string },
-    { 0, CF_UNICODETEXT,     XATOM_COMPOUND_TEXT,       import_compound_text, export_string },
+    { 0, CF_UNICODETEXT,     XATOM_UTF8_STRING,         import_utf8_string,   export_utf8_string },
+    { 0, CF_UNICODETEXT,     XATOM_COMPOUND_TEXT,       import_compound_text, export_compound_text },
     { 0, CF_ENHMETAFILE,     XATOM_WCF_ENHMETAFILE,     import_enhmetafile,   export_enhmetafile },
     { 0, CF_HDROP,           XATOM_text_uri_list,       import_text_uri_list, export_hdrop },
     { 0, CF_LOCALE,          XATOM_WCF_LOCALE,          import_data,          export_data },
@@ -1365,17 +1369,19 @@ static HANDLE export_data(Display *display, Window requestor, Atom aTarget,
 
 
 /**************************************************************************
- *		X11DRV_CLIPBOARD_ExportXAString
+ *		export_string
  *
  *  Export CF_TEXT converting the string to XA_STRING.
- *  Helper function for export_string.
  */
-static HANDLE X11DRV_CLIPBOARD_ExportXAString(LPWINE_CLIPDATA lpData, LPDWORD lpBytes)
+static HANDLE export_string(Display *display, Window requestor, Atom aTarget, Atom rprop,
+                            LPWINE_CLIPDATA lpData, LPDWORD lpBytes)
 {
     UINT i, j;
     UINT size;
     LPSTR text, lpstr = NULL;
 
+    if (!X11DRV_CLIPBOARD_RenderFormat(display, lpData)) return 0;
+
     *lpBytes = 0; /* Assume return has zero bytes */
 
     text = GlobalLock(lpData->hData);
@@ -1404,18 +1410,20 @@ done:
 
 
 /**************************************************************************
- *		X11DRV_CLIPBOARD_ExportUTF8String
+ *		export_utf8_string
  *
  *  Export CF_UNICODE converting the string to UTF8.
- *  Helper function for export_string.
  */
-static HANDLE X11DRV_CLIPBOARD_ExportUTF8String(LPWINE_CLIPDATA lpData, LPDWORD lpBytes)
+static HANDLE export_utf8_string(Display *display, Window requestor, Atom aTarget, Atom rprop,
+                                 LPWINE_CLIPDATA lpData, LPDWORD lpBytes)
 {
     UINT i, j;
     UINT size;
     LPWSTR uni_text;
     LPSTR text, lpstr = NULL;
 
+    if (!X11DRV_CLIPBOARD_RenderFormat(display, lpData)) return 0;
+
     *lpBytes = 0; /* Assume return has zero bytes */
 
     uni_text = GlobalLock(lpData->hData);
@@ -1452,13 +1460,12 @@ done:
 
 
 /**************************************************************************
- *		X11DRV_CLIPBOARD_ExportCompoundText
+ *		export_compound_text
  *
  *  Export CF_UNICODE to COMPOUND_TEXT
- *  Helper function for export_string.
  */
-static HANDLE X11DRV_CLIPBOARD_ExportCompoundText(Display *display, Window requestor, Atom aTarget, Atom rprop,
-    LPWINE_CLIPDATA lpData, LPDWORD lpBytes)
+static HANDLE export_compound_text(Display *display, Window requestor, Atom aTarget, Atom rprop,
+                                   LPWINE_CLIPDATA lpData, LPDWORD lpBytes)
 {
     char* lpstr = 0;
     XTextProperty prop;
@@ -1467,6 +1474,8 @@ static HANDLE X11DRV_CLIPBOARD_ExportCompoundText(Display *display, Window reque
     UINT size;
     LPWSTR uni_text;
 
+    if (!X11DRV_CLIPBOARD_RenderFormat(display, lpData)) return 0;
+
     uni_text = GlobalLock(lpData->hData);
 
     size = WideCharToMultiByte(CP_UNIXCP, 0, uni_text, -1, NULL, 0, NULL, NULL);
@@ -1504,33 +1513,6 @@ static HANDLE X11DRV_CLIPBOARD_ExportCompoundText(Display *display, Window reque
     return 0;
 }
 
-/**************************************************************************
- *		export_string
- *
- *  Export string
- */
-static HANDLE export_string(Display *display, Window requestor, Atom aTarget, Atom rprop,
-                            LPWINE_CLIPDATA lpData, LPDWORD lpBytes)
-{
-    if (X11DRV_CLIPBOARD_RenderFormat(display, lpData))
-    {
-        if (aTarget == XA_STRING)
-            return X11DRV_CLIPBOARD_ExportXAString(lpData, lpBytes);
-        else if (aTarget == x11drv_atom(COMPOUND_TEXT) || aTarget == x11drv_atom(TEXT))
-            return X11DRV_CLIPBOARD_ExportCompoundText(display, requestor, aTarget,
-                rprop, lpData, lpBytes);
-        else
-        {
-            TRACE("Exporting target %ld to default UTF8_STRING\n", aTarget);
-            return X11DRV_CLIPBOARD_ExportUTF8String(lpData, lpBytes);
-        }
-    }
-    else
-        ERR("Failed to render %04x format\n", lpData->wFormatID);
-
-    return 0;
-}
-
 
 /**************************************************************************
  *		export_pixmap




More information about the wine-cvs mailing list