VirtualBox

Changeset 78142 in vbox


Ignore:
Timestamp:
Apr 16, 2019 10:36:08 AM (6 years ago)
Author:
vboxsync
Message:

VBoxTray/SharedClipboard: Added defines for WM_USER messages, logging tweaks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxClipboard.cpp

    r76553 r78142  
    4747#endif
    4848
     49/** Sets announced clipboard formats from the host. */
     50#define VBOX_WM_SHCLPB_SET_FORMATS      WM_USER
     51/** Reads data from the clipboard and sends it to the host. */
     52#define VBOX_WM_SHCLPB_READ_DATA        WM_USER + 1
     53
    4954typedef struct _VBOXCLIPBOARDCONTEXT
    5055{
     
    105110
    106111
    107 static int vboxOpenClipboard(HWND hwnd)
     112static int vboxOpenClipboard(HWND hWnd)
    108113{
    109114    /* "OpenClipboard fails if another window has the clipboard open."
     
    112117    BOOL fOpened = FALSE;
    113118
     119    LogFlowFunc(("hWnd=%p\n", hWnd));
     120
    114121    int i = 0;
    115122    for (;;)
    116123    {
    117         if (OpenClipboard(hwnd))
     124        if (OpenClipboard(hWnd))
    118125        {
    119126            fOpened = TRUE;
     
    130137#ifdef LOG_ENABLED
    131138    if (i > 0)
    132         LogFlowFunc(("%d times tried to open clipboard.\n", i + 1));
     139        LogFlowFunc(("%d times tried to open clipboard\n", i + 1));
    133140#endif
    134141
     
    138145    else
    139146    {
    140         const DWORD err = GetLastError();
    141         LogFlowFunc(("error %d\n", err));
    142         rc = RTErrConvertFromWin32(err);
     147        const DWORD dwLastErr = GetLastError();
     148        rc = RTErrConvertFromWin32(dwLastErr);
     149        LogRel(("Clipboard: Failed to open clipboard! Error=%ld (%Rrc)\n", dwLastErr, rc));
    143150    }
    144151
     
    195202        CloseClipboard();
    196203        rc = VbglR3ClipboardReportFormats(pCtx->u32ClientID, u32Formats);
    197     }
    198     else
    199     {
    200         LogFlow(("vboxClipboardChanged: error in open clipboard. hwnd: %x. err: %Rrc\n", pCtx->hwnd, rc));
    201204    }
    202205    return rc;
     
    530533                CloseClipboard();
    531534            }
    532             else
    533             {
    534                 LogFlowFunc(("WM_RENDERALLFORMATS: Failed to open clipboard! rc: %Rrc\n", vboxrc));
    535             }
    536535        } break;
    537536
    538         case WM_USER:
     537        case VBOX_WM_SHCLPB_SET_FORMATS:
    539538        {
    540539            /* Announce available formats. Do not insert data, they will be inserted in WM_RENDER*. */
    541540            uint32_t u32Formats = (uint32_t)lParam;
    542541
     542            LogFlowFunc(("VBOX_WM_SHCLPB_SET_FORMATS: u32Formats=0x%x\n", u32Formats));
     543
    543544            int vboxrc = vboxOpenClipboard(hwnd);
    544545            if (RT_SUCCESS(vboxrc))
     
    549550
    550551                if (u32Formats & VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT)
    551                 {
    552                     LogFlowFunc(("WM_USER: VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT\n"));
    553552                    hClip = SetClipboardData(CF_UNICODETEXT, NULL);
     553
     554                if (u32Formats & VBOX_SHARED_CLIPBOARD_FMT_BITMAP)
     555                    hClip = SetClipboardData(CF_DIB, NULL);
     556
     557                if (u32Formats & VBOX_SHARED_CLIPBOARD_FMT_HTML)
     558                {
     559                    UINT format = RegisterClipboardFormat ("HTML Format");
     560                    if (format != 0)
     561                        hClip = SetClipboardData(format, NULL);
    554562                }
    555563
    556                 if (u32Formats & VBOX_SHARED_CLIPBOARD_FMT_BITMAP)
    557                 {
    558                     LogFlowFunc(("WM_USER: VBOX_SHARED_CLIPBOARD_FMT_BITMAP\n"));
    559                     hClip = SetClipboardData(CF_DIB, NULL);
    560                 }
    561 
    562                 if (u32Formats & VBOX_SHARED_CLIPBOARD_FMT_HTML)
    563                 {
    564                     UINT format = RegisterClipboardFormat ("HTML Format");
    565                     LogFlowFunc(("WM_USER: VBOX_SHARED_CLIPBOARD_FMT_HTML 0x%04X\n", format));
    566                     if (format != 0)
    567                     {
    568                         hClip = SetClipboardData(format, NULL);
    569                     }
    570                 }
    571 
    572564                CloseClipboard();
    573                 LogFlowFunc(("WM_USER: hClip = %p, err = %ld\n", hClip, GetLastError ()));
    574             }
    575             else
    576             {
    577                 LogFlowFunc(("WM_USER: Failed to open clipboard! error = %Rrc\n", vboxrc));
     565
     566                LogFlowFunc(("VBOX_WM_SHCLPB_SET_FORMATS: hClip=%p, lastErr=%ld\n", hClip, GetLastError()));
    578567            }
    579568        } break;
    580569
    581         case WM_USER + 1:
     570        case VBOX_WM_SHCLPB_READ_DATA:
    582571        {
    583572            /* Send data in the specified format to the host. */
    584573            uint32_t u32Formats = (uint32_t)lParam;
    585574            HANDLE hClip = NULL;
     575
     576            LogFlowFunc(("VBOX_WM_SHCLPB_READ_DATA: u32Formats=0x%x\n", u32Formats));
    586577
    587578            int vboxrc = vboxOpenClipboard(hwnd);
     
    597588                        if (lp != NULL)
    598589                        {
    599                             LogFlowFunc(("WM_USER + 1: CF_DIB\n"));
    600590                            vboxrc = VbglR3ClipboardWriteData(pCtx->u32ClientID, VBOX_SHARED_CLIPBOARD_FMT_BITMAP,
    601591                                                              lp, GlobalSize(hClip));
     
    618608                        if (uniString != NULL)
    619609                        {
    620                             LogFlowFunc(("WM_USER + 1: CF_UNICODETEXT\n"));
    621610                            vboxrc = VbglR3ClipboardWriteData(pCtx->u32ClientID, VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT,
    622611                                                              uniString, (lstrlenW(uniString) + 1) * 2);
     
    641630                            if (lp != NULL)
    642631                            {
    643                                 LogFlowFunc(("WM_USER + 1: CF_HTML\n"));
    644632                                vboxrc = VbglR3ClipboardWriteData(pCtx->u32ClientID, VBOX_SHARED_CLIPBOARD_FMT_HTML,
    645633                                                                  lp, GlobalSize(hClip));
     
    656644                CloseClipboard();
    657645            }
    658             else
    659             {
    660                 LogFlowFunc(("WM_USER: Failed to open clipboard! rc: %Rrc\n", vboxrc));
    661             }
    662646
    663647            if (hClip == NULL)
     
    857841            switch (u32Msg)
    858842            {
    859                 /** @todo r=andy: Use a \#define for WM_USER (+1). */
    860843                case VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS:
    861844                {
     
    863846                     * Forward the information to the window, so it can later
    864847                     * respond to WM_RENDERFORMAT message. */
    865                     ::PostMessage(pCtx->hwnd, WM_USER, 0, u32Formats);
     848                    ::PostMessage(pCtx->hwnd, VBOX_WM_SHCLPB_SET_FORMATS, 0, u32Formats);
    866849                } break;
    867850
     
    869852                {
    870853                    /* The host needs data in the specified format. */
    871                     ::PostMessage(pCtx->hwnd, WM_USER + 1, 0, u32Formats);
     854                    ::PostMessage(pCtx->hwnd, VBOX_WM_SHCLPB_READ_DATA, 0, u32Formats);
    872855                } break;
    873856
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