    emit rangeChanged(min, max, is_zoomed);
  }
  
  void ChartsWidget::zoomReset() {
    zoomIn(display_range.first, display_range.second);
  }
  
  void ChartsWidget::updateState() {
    if (charts.isEmpty()) return;
  
 
</s> remove void ChartsWidget::zoomIn(double min, double max) {
 </s> add void ChartsWidget::setZoom(double min, double max) { </s> remove     emit zoomReset();
 </s> add     emit zoomUndo(); </s> remove     // loop in zoommed range
 </s> add     // loop in zoomed range
  setZoom(display_range.first, display_range.second);
}

void ChartsWidget::zoomUndo() {
  if (!zoom_stack.isEmpty()) {
    auto r = zoom_stack.pop();
    setZoom(r.first, r.second);
  } else {
    zoomReset();
  }
    emit rangeChanged(min, max, is_zoomed);
  }
  
  void ChartsWidget::zoomReset() {
  setZoom(display_range.first, display_range.second);
}

void ChartsWidget::zoomUndo() {
  if (!zoom_stack.isEmpty()) {
    auto r = zoom_stack.pop();
    setZoom(r.first, r.second);
  } else {
    zoomReset();
  }
  }
  
  void ChartsWidget::updateState() {
    if (charts.isEmpty()) return;
  
keep keep keep keep replace keep keep keep keep keep
 cabana: go to previous zoom window (#27702)

* cabana: go to previous zoom level

* zoom undo on right click

* catch mousepress event on linux 
tools/cabana/chartswidget.cc