[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[mylar-dev] [enhancement] remove duplicated redrawing when uninstalling InterestFilter from StructuredViewer.
|
AbstractApplyMylarAction#uninstallInterestFilter(StructuredViewer) will reDraw StructuredViewer more than one if there are more than one
InterestFilter to be removed.
Below is the original method
protected void uninstallInterestFilter(StructuredViewer viewer) {
if (viewer != null) {
for (int i = 0; i < viewer.getFilters().length; i++) {
ViewerFilter filter = viewer.getFilters()[i];
if (filter instanceof InterestFilter) {
viewer.getControl().setRedraw(false);
viewer.removeFilter(filter);
viewer.getControl().setRedraw(true);
}
}
} else {
MylarStatusHandler.log("Could not uninstall interest filter", this);
}
}
We can see if there aremore than one InterestFilter to be removed, below code is excuted more than one.
viewer.getControl().setRedraw(false);
viewer.removeFilter(filter);
viewer.getControl().setRedraw(true);
So I suggest cache alled the filters to be removed as below code does.
protected void uninstallInterestFilter(StructuredViewer viewer) {
if (viewer == null) {
MylarStatusHandler.log("Could not uninstall interest filter", this);
return;
}
List<ViewerFilter> filtersToRemove = new ArrayList<ViewerFilter>();
for (ViewerFilter filter : viewer.getFilters()) {
if (filter instanceof InterestFilter) {
filtersToRemove.add(filter);
}
}
if (! filtersToRemove.isEmpty()) {
viewer.getControl
().setRedraw(false);
for (ViewerFilter filter : filtersToRemove) {
viewer.removeFilter(filter);
}
viewer.getControl().setRedraw(true);
}
}