VirtualBox

Ignore:
Timestamp:
Apr 8, 2020 9:40:37 PM (5 years ago)
Author:
vboxsync
Message:

SharedClipboard: Failed attempt at putting HTML on the pasteboard (disabled). bugref:9620

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.cpp

    r83630 r83631  
    354354int writeToPasteboard(PasteboardRef hPasteboard, uint64_t idOwnership, const void *pv, uint32_t cb, uint32_t fFormat)
    355355{
    356     int rc;
    357     OSStatus orc;
     356    int       rc;
     357    OSStatus  orc;
     358    CFDataRef hData;
    358359    Log(("writeToPasteboard: fFormat = %02X\n", fFormat));
    359360
     
    364365     * Handle the unicode text
    365366     */
    366     if (fFormat & VBOX_SHCL_FMT_UNICODETEXT)
     367    /** @todo Figure out the format of kUTTypeHTML.  Seems it is neiter UTF-8 or
     368     *        UTF-16. */
     369    if (fFormat & (VBOX_SHCL_FMT_UNICODETEXT /*| VBOX_SHCL_FMT_HTML*/))
    367370    {
    368371        PCRTUTF16 const pwszSrc = (PCRTUTF16)pv;
     
    397400             */
    398401            rc = VINF_SUCCESS;
    399             CFDataRef hData = CFDataCreate(kCFAllocatorDefault, (const UInt8 *)pwszDst, cwcDst * sizeof(RTUTF16));
    400             if (hData)
    401             {
    402                 orc = PasteboardPutItemFlavor(hPasteboard, (PasteboardItemID)idOwnership,
    403                                               kUTTypeUTF16PlainText, hData, kPasteboardFlavorNoFlags);
    404                 if (orc != 0)
    405                 {
    406                     Log(("writeToPasteboard: PasteboardPutItemFlavor/kUTTypeUTF16PlainText failed: %d (%#x)\n", orc, orc));
    407                     rc = VERR_GENERAL_FAILURE;
    408                 }
    409                 else
    410                 {
    411                     Log(("writeToPasteboard: CFDataCreate/UTF16 failed!\n"));
    412                     rc = VERR_NO_MEMORY;
    413                 }
    414                 CFRelease(hData);
     402            //if (fFormat & (VBOX_SHCL_FMT_UNICODETEXT | VBOX_SHCL_FMT_HTML))
     403            {
     404                hData = CFDataCreate(kCFAllocatorDefault, (const UInt8 *)pwszDst, cwcDst * sizeof(RTUTF16));
     405                if (hData)
     406                {
     407                    orc = PasteboardPutItemFlavor(hPasteboard, (PasteboardItemID)idOwnership,
     408                                                  fFormat & VBOX_SHCL_FMT_UNICODETEXT ? kUTTypeUTF16PlainText : kUTTypeHTML,
     409                                                  hData, kPasteboardFlavorNoFlags);
     410                    if (orc != 0)
     411                    {
     412                        Log(("writeToPasteboard: PasteboardPutItemFlavor/%s failed: %d (%#x)\n",
     413                             fFormat & VBOX_SHCL_FMT_UNICODETEXT ? "kUTTypeUTF16PlainText" : "kUTTypeHTML", orc, orc));
     414                        rc = VERR_GENERAL_FAILURE;
     415                    }
     416                    else
     417                    {
     418                        Log(("writeToPasteboard: CFDataCreate/UTF16 failed!\n"));
     419                        rc = VERR_NO_MEMORY;
     420                    }
     421                    CFRelease(hData);
     422                }
    415423            }
    416424
     
    418426             * Now for the UTF-8 version.
    419427             */
    420             char *pszDst;
    421             int rc2 = RTUtf16ToUtf8(pwszDst, &pszDst);
    422             if (RT_SUCCESS(rc2))
    423             {
    424                 hData = CFDataCreate(kCFAllocatorDefault, (const UInt8 *)pszDst, strlen(pszDst));
    425                 if (hData)
    426                 {
    427                     orc = PasteboardPutItemFlavor(hPasteboard, (PasteboardItemID)idOwnership,
    428                                                   kUTTypeUTF8PlainText, hData, kPasteboardFlavorNoFlags);
    429                     if (orc != 0)
     428            //if (fFormat & VBOX_SHCL_FMT_UNICODETEXT)
     429            {
     430                char *pszDst;
     431                int rc2 = RTUtf16ToUtf8(pwszDst, &pszDst);
     432                if (RT_SUCCESS(rc2))
     433                {
     434                    hData = CFDataCreate(kCFAllocatorDefault, (const UInt8 *)pszDst, strlen(pszDst));
     435                    if (hData)
    430436                    {
    431                         Log(("writeToPasteboard: PasteboardPutItemFlavor/kUTTypeUTF8PlainText failed: %d (%#x)\n", orc, orc));
    432                         rc = VERR_GENERAL_FAILURE;
     437                        orc = PasteboardPutItemFlavor(hPasteboard, (PasteboardItemID)idOwnership,
     438                                                      fFormat & VBOX_SHCL_FMT_UNICODETEXT ? kUTTypeUTF8PlainText : kUTTypeHTML,
     439                                                      hData, kPasteboardFlavorNoFlags);
     440                        if (orc != 0)
     441                        {
     442                            Log(("writeToPasteboard: PasteboardPutItemFlavor/%s failed: %d (%#x)\n",
     443                                 fFormat & VBOX_SHCL_FMT_UNICODETEXT ? "kUTTypeUTF8PlainText" : "kUTTypeHTML", orc, orc));
     444                            rc = VERR_GENERAL_FAILURE;
     445                        }
     446                        CFRelease(hData);
    433447                    }
    434                     CFRelease(hData);
     448                    else
     449                    {
     450                        Log(("writeToPasteboard: CFDataCreate/UTF8 failed!\n"));
     451                        rc = VERR_NO_MEMORY;
     452                    }
     453                    RTStrFree(pszDst);
    435454                }
    436455                else
    437                 {
    438                     Log(("writeToPasteboard: CFDataCreate/UTF8 failed!\n"));
    439                     rc = VERR_NO_MEMORY;
    440                 }
    441                 RTStrFree(pszDst);
    442             }
    443             else
    444                 rc = rc2;
     456                    rc = rc2;
     457            }
    445458        }
    446459        else
     
    461474        if (RT_SUCCESS(rc))
    462475        {
    463             CFDataRef hData = CFDataCreate(kCFAllocatorDefault, (UInt8 const *)pvBmp, cbBmp);
     476            hData = CFDataCreate(kCFAllocatorDefault, (UInt8 const *)pvBmp, cbBmp);
    464477            if (hData)
    465478            {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette