mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-10 12:03:16 +02:00
[164118] - fix for moved file not showing under filter - problem is that target filter needs to be invalidated during the copy/move operation
This commit is contained in:
parent
94e0ef912d
commit
9910ab7073
2 changed files with 47 additions and 1 deletions
|
@ -24,6 +24,9 @@ import org.eclipse.jface.dialogs.Dialog;
|
|||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.jface.viewers.Viewer;
|
||||
import org.eclipse.rse.core.SystemBasePlugin;
|
||||
import org.eclipse.rse.core.filters.ISystemFilter;
|
||||
import org.eclipse.rse.core.filters.ISystemFilterPool;
|
||||
import org.eclipse.rse.core.filters.ISystemFilterPoolReferenceManager;
|
||||
import org.eclipse.rse.core.filters.ISystemFilterReference;
|
||||
import org.eclipse.rse.core.model.IHost;
|
||||
import org.eclipse.rse.core.subsystems.ISubSystem;
|
||||
|
@ -388,6 +391,39 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
|
|||
return targetContainer;
|
||||
}
|
||||
|
||||
private void invalidateFilterReferences(IRemoteFile targetFolder)
|
||||
{
|
||||
String path = targetFolder.getAbsolutePath();
|
||||
IRemoteFileSubSystem fileSS = targetFolder.getParentRemoteFileSubSystem();
|
||||
ISystemFilterPoolReferenceManager mgr = fileSS.getSystemFilterPoolReferenceManager();
|
||||
ISystemFilterPool[] pools = mgr.getReferencedSystemFilterPools();
|
||||
for (int i = 0; i < pools.length; i++)
|
||||
{
|
||||
ISystemFilterPool pool = pools[i];
|
||||
ISystemFilter[] filters = pool.getSystemFilters();
|
||||
for (int f = 0; f < filters.length; f++)
|
||||
{
|
||||
String[] strs = filters[f].getFilterStrings();
|
||||
for (int s = 0; s < strs.length; s++)
|
||||
{
|
||||
String str = strs[s];
|
||||
int lastSep = str.lastIndexOf(fileSS.getSeparator());
|
||||
if (lastSep > 0)
|
||||
{
|
||||
str = str.substring(0, lastSep);
|
||||
}
|
||||
|
||||
//if (StringCompare.compare(str, path, true))
|
||||
if (str.equals(path))
|
||||
{
|
||||
ISystemFilterReference ref = mgr.getSystemFilterReference(fileSS, filters[f]);
|
||||
ref.markStale(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called after all the copy/move operations end, be it successfully or not.
|
||||
* Your opportunity to display completion or do post-copy selections/refreshes
|
||||
|
@ -408,13 +444,21 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
|
|||
// after it is refreshed via the remote_resource_created event.
|
||||
if (originatingViewer instanceof SystemView)
|
||||
{
|
||||
boolean selectedOk = ((SystemView)originatingViewer).selectRemoteObjects(targetFolder.getAbsolutePath(), fileSS, null);
|
||||
// boolean selectedOk = ((SystemView)originatingViewer).selectRemoteObjects(targetFolder.getAbsolutePath(), fileSS, null);
|
||||
//System.out.println(targetFolder.getAbsolutePath()+" selectedOK? " + selectedOk);
|
||||
//if (selectedOk)
|
||||
// return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
targetFolder.markStale(true);
|
||||
|
||||
// invalidate filters
|
||||
invalidateFilterReferences(targetFolder);
|
||||
|
||||
|
||||
RSEUIPlugin.getTheSystemRegistry().fireRemoteResourceChangeEvent(
|
||||
ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, copiedFiles, targetFolder.getAbsolutePath(), fileSS, null, originatingViewer);
|
||||
|
||||
|
|
|
@ -2704,7 +2704,9 @@ public class SystemViewRemoteFileAdapter
|
|||
|
||||
names = new String[children.length];
|
||||
for (int idx = 0; idx < names.length; idx++)
|
||||
{
|
||||
names[idx] = ((IRemoteFile) children[idx]).getName();
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue