Skip to main content

[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);
  }
 }

 


Back to the top