VirtualBox

Ignore:
Timestamp:
Sep 16, 2015 9:40:54 AM (9 years ago)
Author:
vboxsync
Message:

DnD: Renamed DNDDIRDROPPEDFILES to DnDDroppedFiles and restructured it for being a class.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/DragAndDrop/DnDDroppedFiles.cpp

    r57756 r57776  
    2828#include <VBox/GuestHost/DragAndDrop.h>
    2929
    30 int DnDDirDroppedAddFile(PDNDDIRDROPPEDFILES pDir, const char *pszFile)
    31 {
    32     AssertPtrReturn(pDir, VERR_INVALID_POINTER);
     30DnDDroppedFiles::DnDDroppedFiles(void)
     31    : hDir(NULL)
     32    , fOpen(false) { }
     33
     34DnDDroppedFiles::DnDDroppedFiles(const char *pszPath, uint32_t fFlags)
     35    : hDir(NULL)
     36    , fOpen(false)
     37{
     38    OpenEx(pszPath, fFlags);
     39}
     40
     41DnDDroppedFiles::~DnDDroppedFiles(void)
     42{
     43    Reset(true /* fRemoveDropDir */);
     44}
     45
     46int DnDDroppedFiles::AddFile(const char *pszFile)
     47{
    3348    AssertPtrReturn(pszFile, VERR_INVALID_POINTER);
    3449
    35     if (!pDir->lstFiles.contains(pszFile))
    36         pDir->lstFiles.append(pszFile);
     50    if (!this->lstFiles.contains(pszFile))
     51        this->lstFiles.append(pszFile);
    3752    return VINF_SUCCESS;
    3853}
    3954
    40 int DnDDirDroppedAddDir(PDNDDIRDROPPEDFILES pDir, const char *pszDir)
    41 {
    42     AssertPtrReturn(pDir, VERR_INVALID_POINTER);
     55int DnDDroppedFiles::AddDir(const char *pszDir)
     56{
    4357    AssertPtrReturn(pszDir, VERR_INVALID_POINTER);
    4458
    45     if (!pDir->lstDirs.contains(pszDir))
    46         pDir->lstDirs.append(pszDir);
     59    if (!this->lstDirs.contains(pszDir))
     60        this->lstDirs.append(pszDir);
    4761    return VINF_SUCCESS;
    4862}
    4963
    50 static int dndDirDroppedFilesCreate(uint32_t fFlags, PDNDDIRDROPPEDFILES *ppDir)
    51 {
     64const char *DnDDroppedFiles::GetDirAbs(void) const
     65{
     66    return this->strPathAbs.c_str();
     67}
     68
     69bool DnDDroppedFiles::IsOpen(void) const
     70{
     71    return this->fOpen;
     72}
     73
     74int DnDDroppedFiles::OpenEx(const char *pszPath, uint32_t fFlags)
     75{
     76    AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
    5277    AssertReturn(fFlags == 0, VERR_INVALID_PARAMETER); /* Flags not supported yet. */
    53     AssertPtrReturn(ppDir, VERR_INVALID_POINTER);
    54 
    55     PDNDDIRDROPPEDFILES pDir = (PDNDDIRDROPPEDFILES)RTMemAlloc(sizeof(DNDDIRDROPPEDFILES));
    56     if (pDir)
    57     {
    58         pDir->hDir  = NULL;
    59         pDir->fOpen = false;
    60 
    61         *ppDir = pDir;
    62         return VINF_SUCCESS;
    63     }
    64 
    65     return VERR_NO_MEMORY;
    66 }
    67 
    68 int DnDDirDroppedFilesCreateAndOpenEx(const char *pszPath, uint32_t fFlags, PDNDDIRDROPPEDFILES *ppDir)
    69 {
    70     AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
    71     AssertPtrReturn(ppDir, VERR_INVALID_POINTER);
    72 
    73     PDNDDIRDROPPEDFILES pDir;
    74     int rc = dndDirDroppedFilesCreate(fFlags, &pDir);
    75     if (RT_FAILURE(rc))
    76         return rc;
     78
     79    int rc;
    7780
    7881    do
    7982    {
    8083        char pszDropDir[RTPATH_MAX];
    81         if (RTStrPrintf(pszDropDir, sizeof(pszDropDir), "%s", pszPath) <= 0)
    82         {
    83             rc = VERR_NO_MEMORY;
    84             break;
    85         }
     84        size_t cchDropDir = RTStrPrintf(pszDropDir, sizeof(pszDropDir), "%s", pszPath);
    8685
    8786        /** @todo On Windows we also could use the registry to override
     
    9089
    9190        /* Append our base drop directory. */
    92         int rc = RTPathAppend(pszDropDir, sizeof(pszDropDir), "VirtualBox Dropped Files"); /** @todo Make this tag configurable? */
     91        rc = RTPathAppend(pszDropDir, sizeof(pszDropDir), "VirtualBox Dropped Files"); /** @todo Make this tag configurable? */
    9392        if (RT_FAILURE(rc))
    9493            break;
     
    128127            if (RT_SUCCESS(rc))
    129128            {
    130                 pDir->hDir       = phDir;
    131                 pDir->strPathAbs = pszDropDir;
    132                 pDir->fOpen      = true;
     129                this->hDir       = phDir;
     130                this->strPathAbs = pszDropDir;
     131                this->fOpen      = true;
    133132            }
    134133        }
     
    136135    } while (0);
    137136
    138     if (RT_SUCCESS(rc))
    139     {
    140         *ppDir = pDir;
    141     }
    142     else
    143         DnDDirDroppedFilesDestroy(pDir);
    144 
    145     return rc;
    146 }
    147 
    148 int DnDDirDroppedFilesCreateAndOpenTemp(uint32_t fFlags, PDNDDIRDROPPEDFILES *ppDir)
     137    return rc;
     138}
     139
     140int DnDDroppedFiles::OpenTemp(uint32_t fFlags)
    149141{
    150142    AssertReturn(fFlags == 0, VERR_INVALID_PARAMETER); /* Flags not supported yet. */
    151     AssertPtrReturn(ppDir, VERR_INVALID_POINTER);
    152 
    153     PDNDDIRDROPPEDFILES pDir;
    154143
    155144    /*
     
    161150    int rc = RTPathTemp(szTemp, sizeof(szTemp));
    162151    if (RT_SUCCESS(rc))
    163         rc = DnDDirDroppedFilesCreateAndOpenEx(szTemp, fFlags, &pDir);
    164 
     152        rc = OpenEx(szTemp, fFlags);
     153
     154    return rc;
     155}
     156
     157int DnDDroppedFiles::Reset(bool fRemoveDropDir)
     158{
     159    int rc = VINF_SUCCESS;
     160    if (this->fOpen)
     161    {
     162        rc = RTDirClose(this->hDir);
     163        if (RT_SUCCESS(rc))
     164        {
     165            this->fOpen = false;
     166            this->hDir  = NULL;
     167        }
     168    }
    165169    if (RT_SUCCESS(rc))
    166170    {
    167         *ppDir = pDir;
    168     }
    169     else
    170         DnDDirDroppedFilesDestroy(pDir);
    171 
    172     return rc;
    173 }
    174 
    175 void DnDDirDroppedFilesDestroy(PDNDDIRDROPPEDFILES pDir)
    176 {
    177     AssertPtrReturnVoid(pDir);
    178 
    179     RTMemFree(pDir);
    180 }
    181 
    182 int DnDDirDroppedFilesClose(PDNDDIRDROPPEDFILES pDir, bool fRemove)
    183 {
    184     AssertPtrReturn(pDir, VERR_INVALID_POINTER);
    185 
    186     int rc = VINF_SUCCESS;
    187     if (pDir->fOpen)
    188     {
    189         rc = RTDirClose(pDir->hDir);
    190         if (RT_SUCCESS(rc))
    191         {
    192             pDir->fOpen = false;
    193             pDir->hDir  = NULL;
    194         }
    195     }
    196     if (RT_SUCCESS(rc))
    197     {
    198         pDir->lstDirs.clear();
    199         pDir->lstFiles.clear();
    200 
    201         if (   fRemove
    202             && pDir->strPathAbs.isNotEmpty())
     171        this->lstDirs.clear();
     172        this->lstFiles.clear();
     173
     174        if (   fRemoveDropDir
     175            && this->strPathAbs.isNotEmpty())
    203176        {
    204177            /* Try removing the (empty) drop directory in any case. */
    205             rc = RTDirRemove(pDir->strPathAbs.c_str());
     178            rc = RTDirRemove(this->strPathAbs.c_str());
    206179            if (RT_SUCCESS(rc)) /* Only clear if successfully removed. */
    207                 pDir->strPathAbs = "";
    208         }
    209     }
    210 
    211     return rc;
    212 }
    213 
    214 const char *DnDDirDroppedFilesGetDirAbs(PDNDDIRDROPPEDFILES pDir)
    215 {
    216     AssertPtrReturn(pDir, NULL);
    217     return pDir->strPathAbs.c_str();
    218 }
    219 
    220 int DnDDirDroppedFilesRollback(PDNDDIRDROPPEDFILES pDir)
    221 {
    222     AssertPtrReturn(pDir, VERR_INVALID_POINTER);
    223 
    224     if (pDir->strPathAbs.isEmpty())
     180                this->strPathAbs = "";
     181        }
     182    }
     183
     184    return rc;
     185}
     186
     187int DnDDroppedFiles::Rollback(void)
     188{
     189    if (this->strPathAbs.isEmpty())
    225190        return VINF_SUCCESS;
     191
     192    Assert(this->fOpen);
     193    Assert(this->hDir != NULL);
    226194
    227195    int rc = VINF_SUCCESS;
     
    231199     * Note: Only remove empty directories, never ever delete
    232200     *       anything recursive here! Steam (tm) knows best ... :-) */
    233     for (size_t i = 0; i < pDir->lstFiles.size(); i++)
    234     {
    235         rc2 = RTFileDelete(pDir->lstFiles.at(i).c_str());
     201    for (size_t i = 0; i < this->lstFiles.size(); i++)
     202    {
     203        rc2 = RTFileDelete(this->lstFiles.at(i).c_str());
    236204        if (RT_SUCCESS(rc))
    237205            rc = rc2;
    238206    }
    239207
    240     for (size_t i = 0; i < pDir->lstDirs.size(); i++)
    241     {
    242         rc2 = RTDirRemove(pDir->lstDirs.at(i).c_str());
     208    for (size_t i = 0; i < this->lstDirs.size(); i++)
     209    {
     210        rc2 = RTDirRemove(this->lstDirs.at(i).c_str());
    243211        if (RT_SUCCESS(rc))
    244212            rc = rc2;
     
    246214
    247215    /* Try to remove the empty root dropped files directory as well. */
    248     rc2 = RTDirRemove(pDir->strPathAbs.c_str());
     216    rc2 = RTDirRemove(this->strPathAbs.c_str());
    249217    if (RT_SUCCESS(rc))
    250218        rc = rc2;
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