Bad behavior fix : in element collection tree, when user drop a directory into itself, this directory is copied in recursive way infinitely.

See bug report N° 121


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4831 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2017-01-03 16:47:39 +00:00
parent caf81b924b
commit 6f498977c5
2 changed files with 22 additions and 7 deletions

View File

@@ -96,11 +96,25 @@ ElementsLocation ECHSFileToFile::copyDirectory(ElementsLocation &source, Element
//Copy all dirs found in source_dir to destination_dir //Copy all dirs found in source_dir to destination_dir
ElementsLocation created_location(created_dir.canonicalPath()); ElementsLocation created_location(created_dir.canonicalPath());
foreach(QString str, source_dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name)) //Used this bool when user drop a folder into itself to avoid infinite recursive creation of the dropped dir
{ bool copy_itself = false;
if (source_dir == destination_dir)
copy_itself = true;
foreach(QString str, source_dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name))
{
if (copy_itself)
{
if (source_dir.dirName() == str)
{
copy_itself = false;
continue;
}
}
ElementsLocation sub_source(source.fileSystemPath() + "/" + str); ElementsLocation sub_source(source.fileSystemPath() + "/" + str);
copyDirectory(sub_source, created_location); copyDirectory(sub_source, created_location);
} }
//Copy all elements found in source_dir to destination_dir //Copy all elements found in source_dir to destination_dir
source_dir.setNameFilters(QStringList() << "*.elmt"); source_dir.setNameFilters(QStringList() << "*.elmt");

View File

@@ -122,8 +122,8 @@ bool ElementsCollectionModel::canDropMimeData(const QMimeData *data, Qt::DropAct
ElementCollectionItem *eci = static_cast<ElementCollectionItem *>(qsi); ElementCollectionItem *eci = static_cast<ElementCollectionItem *>(qsi);
if (data->hasFormat("application/x-qet-element-uri") || data->hasFormat("application/x-qet-category-uri")) { if (data->hasFormat("application/x-qet-element-uri") || data->hasFormat("application/x-qet-category-uri"))
return true; {
//Return false if user try to drop a item from a folder to the same folder //Return false if user try to drop a item from a folder to the same folder
ElementsLocation drop_location(data->text()); ElementsLocation drop_location(data->text());
for (int i=0 ; i<eci->rowCount() ; i++) for (int i=0 ; i<eci->rowCount() ; i++)
@@ -154,7 +154,8 @@ bool ElementsCollectionModel::dropMimeData(const QMimeData *data, Qt::DropAction
if (!qsi) if (!qsi)
qsi = itemFromIndex(parent); qsi = itemFromIndex(parent);
if (qsi->type() == FileElementCollectionItem::Type) { if (qsi->type() == FileElementCollectionItem::Type)
{
FileElementCollectionItem *feci = static_cast<FileElementCollectionItem *>(qsi); FileElementCollectionItem *feci = static_cast<FileElementCollectionItem *>(qsi);
if (feci->isCommonCollection()) if (feci->isCommonCollection())