Ticket #19789: 19789-v1.patch

File 19789-v1.patch, 3.3 KB (added by GerdP, 4 years ago)
  • src/org/openstreetmap/josm/gui/layer/AutosaveTask.java

     
    316316                noteLayer.getNoteData().removeNoteDataUpdateListener(this);
    317317                cleanupLayer(noteLayer);
    318318            }
     319        } else if (e.getRemovedLayer() instanceof AbstractModifiableLayer) {
     320            synchronized (layersLock) {
     321                cleanupLayer((AbstractModifiableLayer) e.getRemovedLayer());
     322            }
    319323        }
    320324    }
    321325
  • src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java

     
    3131import org.openstreetmap.josm.gui.MapView;
    3232import org.openstreetmap.josm.gui.layer.GpxLayer;
    3333import org.openstreetmap.josm.gui.preferences.display.GPXSettingsPanel;
     34import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
     35import org.openstreetmap.josm.tools.Destroyable;
    3436import org.openstreetmap.josm.tools.ImageProvider;
    3537import org.openstreetmap.josm.tools.Logging;
    3638import org.openstreetmap.josm.tools.template_engine.ParseError;
     
    7375 *
    7476 * @author Frederik Ramm
    7577 */
    76 public class Marker implements TemplateEngineDataProvider, ILatLon {
     78public class Marker implements TemplateEngineDataProvider, ILatLon, Destroyable {
    7779
    7880    /**
    7981     * Plugins can add their Marker creation stuff at the bottom or top of this list
     
    147149    private String cachedDefaultTemplate;
    148150
    149151    private CachedLatLon coor;
     152    private PreferenceChangedListener listener = l -> updateText();
    150153
    151154    private boolean erroneous;
    152155
     
    174177        this.dataProvider = dataProvider;
    175178        this.text = text;
    176179
    177         Preferences.main().addKeyPreferenceChangeListener("draw.rawgps." + getTextTemplateKey(), l -> updateText());
     180        Preferences.main().addKeyPreferenceChangeListener(getPreferenceKey(), listener);
    178181    }
    179182
    180183    /**
     
    369372    public void updateText() {
    370373        cachedText = null;
    371374        cachedDefaultTemplate = null;
    372         cachedTemplates = new HashMap<>();
     375        cachedTemplates.clear();
    373376    }
    374377
    375378    @Override
     
    432435            redSymbol = null;
    433436        }
    434437    }
     438
     439    @Override
     440    public void destroy() {
     441        cachedTemplates.clear();
     442        Preferences.main().removeKeyPreferenceChangeListener(getPreferenceKey(), listener);
     443    }
     444
     445    private String getPreferenceKey() {
     446        return "draw.rawgps." + getTextTemplateKey();
     447    }
    435448}
  • src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java

     
    171171        syncAudioMarker = null;
    172172        currentMarker = null;
    173173        fromLayer = null;
     174        data.forEach(Marker::destroy);
    174175        data.clear();
    175176        super.destroy();
    176177    }