VirtualBox

Changeset 58329 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Oct 20, 2015 10:05:12 AM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
103528
Message:

DnD: Updates/bugfixes:

  • Added separate VBOXDNDDISCONNECTMSG message for letting Main know about client disconnects.
  • Various cleanups and bugfixes.
Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.cpp

    r58212 r58329  
    7575    : m_pSession(pSession)
    7676    , m_pParent(pParent)
    77     , m_enmMode(DNDMODE_UNKNOWN)
     77    , m_enmOpMode(DNDMODE_UNKNOWN)
    7878    , m_fIsPending(false)
    7979    , m_fDataRetrieved(false)
     
    9999                                       const QMimeData *pMimeData)
    100100{
    101     LogFlowFunc(("enmMode=%RU32, screenID=%RU32, x=%d, y=%d, action=%ld\n",
    102                  m_enmMode, screenID, x, y, toVBoxDnDAction(proposedAction)));
    103 
    104     if (   m_enmMode != DNDMODE_UNKNOWN
    105         && m_enmMode != DNDMODE_HOSTTOGUEST)
     101    LogFlowFunc(("enmOpMode=%RU32, screenID=%RU32, x=%d, y=%d, action=%ld\n",
     102                 m_enmOpMode, screenID, x, y, toVBoxDnDAction(proposedAction)));
     103
     104    if (   m_enmOpMode != DNDMODE_UNKNOWN
     105        && m_enmOpMode != DNDMODE_HOSTTOGUEST)
    106106        return Qt::IgnoreAction;
    107107
     
    114114                                          pMimeData->formats().toVector());
    115115    if (m_dndTarget.isOk())
    116         setMode(DNDMODE_HOSTTOGUEST);
    117 
    118     /* Set the DnD action returned by the guest. */
    119     return toQtDnDAction(result);
     116    {
     117        setOpMode(DNDMODE_HOSTTOGUEST);
     118        return toQtDnDAction(result);
     119    }
     120
     121    msgCenter().cannotDropDataToGuest(m_dndTarget, m_pParent);
     122    return Qt::IgnoreAction;
    120123}
    121124
     
    124127                                      const QMimeData *pMimeData)
    125128{
    126     LogFlowFunc(("enmMode=%RU32, screenID=%RU32, x=%d, y=%d, action=%ld\n",
    127                  m_enmMode, screenID, x, y, toVBoxDnDAction(proposedAction)));
    128 
    129     if (m_enmMode != DNDMODE_HOSTTOGUEST)
     129    LogFlowFunc(("enmOpMode=%RU32, screenID=%RU32, x=%d, y=%d, action=%ld\n",
     130                 m_enmOpMode, screenID, x, y, toVBoxDnDAction(proposedAction)));
     131
     132    if (m_enmOpMode != DNDMODE_HOSTTOGUEST)
    130133        return Qt::IgnoreAction;
    131134
     
    138141                                         toVBoxDnDActions(possibleActions),
    139142                                         pMimeData->formats().toVector());
    140     /* Set the DnD action returned by the guest. */
    141     return toQtDnDAction(result);
     143    if (m_dndTarget.isOk())
     144        return toQtDnDAction(result);
     145
     146    msgCenter().cannotDropDataToGuest(m_dndTarget, m_pParent);
     147    return Qt::IgnoreAction;
    142148}
    143149
     
    146152                                      const QMimeData *pMimeData)
    147153{
    148     LogFlowFunc(("enmMode=%RU32, screenID=%RU32, x=%d, y=%d, action=%ld\n",
    149                  m_enmMode, screenID, x, y, toVBoxDnDAction(proposedAction)));
    150 
    151     if (m_enmMode != DNDMODE_HOSTTOGUEST)
     154    LogFlowFunc(("enmOpMode=%RU32, screenID=%RU32, x=%d, y=%d, action=%ld\n",
     155                 m_enmOpMode, screenID, x, y, toVBoxDnDAction(proposedAction)));
     156
     157    if (m_enmOpMode != DNDMODE_HOSTTOGUEST)
    152158        return Qt::IgnoreAction;
    153159
     
    258264     * mode as well here.
    259265     */
    260     setMode(DNDMODE_UNKNOWN);
     266    setOpMode(DNDMODE_UNKNOWN);
    261267
    262268    return toQtDnDAction(enmResult);
     
    265271void UIDnDHandler::dragLeave(ulong screenID)
    266272{
    267     LogFlowFunc(("enmMode=%RU32, screenID=%RU32\n", m_enmMode, screenID));
    268 
    269     if (m_enmMode == DNDMODE_HOSTTOGUEST)
     273    LogFlowFunc(("enmOpMode=%RU32, screenID=%RU32\n", m_enmOpMode, screenID));
     274
     275    if (m_enmOpMode == DNDMODE_HOSTTOGUEST)
    270276    {
    271277        m_dndTarget.Leave(screenID);
    272         setMode(DNDMODE_UNKNOWN);
     278        setOpMode(DNDMODE_UNKNOWN);
    273279    }
    274280}
     
    448454#ifdef VBOX_WITH_DRAG_AND_DROP_GH
    449455
    450     LogFlowFunc(("enmMode=%RU32, fIsPending=%RTbool, screenID=%RU32\n", m_enmMode, m_fIsPending, screenID));
     456    LogFlowFunc(("enmOpMode=%RU32, fIsPending=%RTbool, screenID=%RU32\n", m_enmOpMode, m_fIsPending, screenID));
    451457
    452458    {
    453459        QMutexLocker AutoReadLock(&m_ReadLock);
    454460
    455         if (   m_enmMode != DNDMODE_UNKNOWN
    456             && m_enmMode != DNDMODE_GUESTTOHOST) /* Wrong mode set? */
     461        if (   m_enmOpMode != DNDMODE_UNKNOWN
     462            && m_enmOpMode != DNDMODE_GUESTTOHOST) /* Wrong mode set? */
    457463            return VINF_SUCCESS;
    458464
     
    548554    }
    549555
    550     setMode(DNDMODE_GUESTTOHOST);
     556    setOpMode(DNDMODE_GUESTTOHOST);
    551557
    552558    rc = dragStartInternal(m_dataSource.lstFormats,
     
    594600    m_fIsPending = false;
    595601
    596     setMode(DNDMODE_UNKNOWN);
     602    setOpMode(DNDMODE_UNKNOWN);
    597603}
    598604
     
    684690                /* After we successfully retrieved data from the source we query it from Main. */
    685691                vecData = m_dndSource.ReceiveData(); /** @todo QVector.size() is "int" only!? */
    686                 if (vecData.isEmpty())
    687                     rc = VERR_NO_DATA;
     692                if (m_dndSource.isOk())
     693                {
     694                    if (vecData.isEmpty())
     695                        rc = VERR_NO_DATA;
     696                }
     697                else
     698                {
     699                    msgCenter().cannotDropDataToHost(m_dndSource, m_pParent);
     700                    rc = VERR_GENERAL_FAILURE; /** @todo Fudge; do a GetResultCode() to rc translation. */
     701                }
    688702            }
    689703            else
     
    699713    }
    700714
    701     setMode(DNDMODE_UNKNOWN);
     715    setOpMode(DNDMODE_UNKNOWN);
    702716
    703717    LogFlowFuncLeaveRC(rc);
     
    705719}
    706720
    707 void UIDnDHandler::setMode(DNDMODE enmMode)
     721void UIDnDHandler::setOpMode(DNDOPMODE enmMode)
    708722{
    709723    QMutexLocker AutoWriteLock(&m_WriteLock);
    710     m_enmMode = enmMode;
    711     LogFlowFunc(("Mode is now: %RU32\n", m_enmMode));
     724    m_enmOpMode = enmMode;
     725    LogFunc(("Operation mode is now: %RU32\n", m_enmOpMode));
    712726}
    713727
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.h

    r57288 r58329  
    4949     *       drag and drop mode.
    5050     */
    51     typedef enum DNDMODE
     51    typedef enum DNDOPMODE
    5252    {
    5353        /** Unknown mode. */
     
    6060        /** The usual 32-bit type blow up. */
    6161        DNDMODE_32BIT_HACK = 0x7fffffff
    62     } DNDMODE;
     62    } DNDOPMODE;
    6363
    6464    /**
     
    125125    int                        dragStartInternal(const QStringList &lstFormats, Qt::DropAction defAction, Qt::DropActions actions);
    126126    int                        retrieveDataInternal(Qt::DropAction dropAction, const QString &strMIMEType, QVector<uint8_t> &vecData);
    127     void                       setMode(DNDMODE enmMode);
     127    void                       setOpMode(DNDOPMODE enmMode);
    128128
    129129protected:
     
    133133    /** Pointer to parent widget. */
    134134    QWidget          *m_pParent;
    135 
    136135    /** Drag and drop source instance. */
    137136    CDnDSource        m_dndSource;
    138137    /** Drag and drop target instance. */
    139138    CDnDTarget        m_dndTarget;
    140     /** Current transfer direction. */
    141     DNDMODE           m_enmMode;
     139    /** Current operation mode, indicating the transfer direction.
     140     *  Note: This is independent of the current drag and drop
     141     *        mode being set for this VM! */
     142    DNDOPMODE         m_enmOpMode;
    142143    /** Current data from the source (if any).
    143144     *  At the momenet we only support one source at a time. */
Note: See TracChangeset for help on using the changeset viewer.

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