Ticket #11496: 0001-Fixed-11496.patch

File 0001-Fixed-11496.patch, 3.7 KB (added by michael2402, 9 years ago)
  • src/org/openstreetmap/josm/gui/MapView.java

    From f2d39103e41130520be8e4f17e93c7f4c9a752ae Mon Sep 17 00:00:00 2001
    From: Michael Zangl <michael.zangl@student.kit.edu>
    Date: Thu, 23 Jul 2015 11:51:14 +0200
    Subject: [PATCH] Fixed #11496
    
    ---
     src/org/openstreetmap/josm/gui/MapView.java | 41 ++++++++++++++++-------------
     1 file changed, 22 insertions(+), 19 deletions(-)
    
    diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
    index 589082a..6a79957 100644
    a b import java.util.ArrayList;  
    2525import java.util.Arrays;
    2626import java.util.Collection;
    2727import java.util.Collections;
    28 import java.util.Comparator;
    2928import java.util.EnumSet;
    3029import java.util.LinkedHashSet;
    3130import java.util.List;
     31import java.util.ListIterator;
    3232import java.util.Set;
    3333import java.util.concurrent.CopyOnWriteArrayList;
    3434import java.util.concurrent.locks.ReentrantReadWriteLock;
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    652652    /**
    653653     * Creates a list of the visible layers in Z-Order, the layer with the lowest Z-Order
    654654     * first, layer with the highest Z-Order last.
     655     * <p>
     656     * The active data layer is pulled above all adjacent data layers.
    655657     *
    656658     * @return a list of the visible in Z-Order, the layer with the lowest Z-Order
    657659     * first, layer with the highest Z-Order last.
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    660662        layerLock.readLock().lock();
    661663        try {
    662664            List<Layer> ret = new ArrayList<>();
    663             for (Layer l: layers) {
    664                 if (l.isVisible()) {
     665            // This is set while we delay the addition of the active layer.
     666            boolean activeLayerDelayed = false;
     667            for (ListIterator<Layer> iterator = layers.listIterator(layers.size()); iterator.hasPrevious();) {
     668                Layer l = iterator.previous();
     669                if (!l.isVisible()) {
     670                    // ignored
     671                } else if (l == activeLayer && l instanceof OsmDataLayer) {
     672                    // delay and add after the current block of OsmDataLayer
     673                    activeLayerDelayed = true;
     674                } else {
     675                    if (activeLayerDelayed && !(l instanceof OsmDataLayer)) {
     676                        // add active layer before the current one.
     677                        ret.add(activeLayer);
     678                        activeLayerDelayed = false;
     679                    }
     680                    // Add this layer now
    665681                    ret.add(l);
    666682                }
    667683            }
    668             // sort according to position in the list of layers, with one exception:
    669             // an active data layer always becomes a higher Z-Order than all other data layers
    670             Collections.sort(
    671                     ret,
    672                     new Comparator<Layer>() {
    673                         @Override
    674                         public int compare(Layer l1, Layer l2) {
    675                             if (l1 instanceof OsmDataLayer && l2 instanceof OsmDataLayer) {
    676                                 if (l1 == getActiveLayer()) return -1;
    677                                 if (l2 == getActiveLayer()) return 1;
    678                                 return Integer.compare(layers.indexOf(l1), layers.indexOf(l2));
    679                             } else
    680                                 return Integer.compare(layers.indexOf(l1), layers.indexOf(l2));
    681                         }
    682                     }
    683             );
     684            if (activeLayerDelayed) {
     685                ret.add(activeLayer);
     686            }
    684687            Collections.reverse(ret);
    685688            return ret;
    686689        } finally {