Ticket #8509: bug-fix.patch
| File bug-fix.patch, 3.4 KB (added by , 8 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
3 3 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import java.util.ArrayList; 7 import java.util.Collection; 8 import java.util.List; 9 import java.util.ListIterator; 6 import java.util.*; 10 7 import java.util.concurrent.CopyOnWriteArrayList; 11 8 12 9 import javax.swing.JOptionPane; … … 13 10 14 11 import org.openstreetmap.josm.data.osm.DataSet; 15 12 import org.openstreetmap.josm.gui.MainApplication; 13 import org.openstreetmap.josm.gui.io.AsynchronousUploadPrimitivesTask; 16 14 import org.openstreetmap.josm.gui.util.GuiHelper; 17 15 18 16 /** … … 273 271 274 272 @Override 275 273 protected Collection<Layer> realRemoveSingleLayer(Layer layer) { 276 if ( layer == activeLayer || layer == editLayer) {277 Layer nextActive = suggestNextActiveLayer(layer);278 setActiveLayer(nextActive, true);279 }274 if ((layer instanceof OsmDataLayer) && (((OsmDataLayer) layer).isReadOnly())) { 275 GuiHelper.runInEDT(() -> JOptionPane.showMessageDialog(MainApplication.parent, 276 tr("Trying to delete the layer with background upload. " + 277 "Please wait till the upload is finished."))); 280 278 281 Collection<Layer> toDelete = super.realRemoveSingleLayer(layer); 282 if (getLayers().isEmpty()) { 283 LayerAvailabilityEvent e = new LayerAvailabilityEvent(this, false); 284 for (LayerAvailabilityListener l : layerAvailabilityListeners) { 285 l.afterLastLayerRemoved(e); 279 // Return an empty collection for 280 // allowing to delete other layers 281 return new ArrayList<>(); 282 } else { 283 if (layer == activeLayer || layer == editLayer) { 284 Layer nextActive = suggestNextActiveLayer(layer); 285 setActiveLayer(nextActive, true); 286 286 } 287 288 Collection<Layer> toDelete = super.realRemoveSingleLayer(layer); 289 if (getLayers().isEmpty()) { 290 LayerAvailabilityEvent e = new LayerAvailabilityEvent(this, false); 291 for (LayerAvailabilityListener l : layerAvailabilityListeners) { 292 l.afterLastLayerRemoved(e); 293 } 294 } 295 return toDelete; 287 296 } 288 return toDelete;289 297 } 290 298 291 299 /** … … 408 416 409 417 @Override 410 418 protected synchronized void realResetState() { 411 // active and edit layer are unset automatically 412 super.realResetState(); 419 // Reset state iff no asynchronous upload is under progress 420 if (!AsynchronousUploadPrimitivesTask.getCurrentAsynchronousUploadTask().isPresent()) { 421 // active and edit layer are unset automatically 422 super.realResetState(); 413 423 414 activeLayerChangeListeners.clear(); 415 layerAvailabilityListeners.clear(); 424 activeLayerChangeListeners.clear(); 425 layerAvailabilityListeners.clear(); 426 } else { 427 GuiHelper.runInEDT(() -> JOptionPane.showMessageDialog(MainApplication.parent, 428 tr("A background upload is already in progress. " + 429 "Cannot reset state till the upload is finished."))); 430 } 416 431 } 417 432 418 433 /**
