Ticket #19196: 19196.2.patch

File 19196.2.patch, 3.0 KB (added by taylor.smock, 4 years ago)

Fix an issue where the preference listener could be called twice in the same preference change invocation

  • src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java

     
    2323import org.openstreetmap.josm.io.CachedFile;
    2424import org.openstreetmap.josm.io.FileWatcher;
    2525import org.openstreetmap.josm.spi.preferences.Config;
     26import org.openstreetmap.josm.spi.preferences.IPreferences;
     27import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
     28import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
    2629import org.openstreetmap.josm.tools.ImageProvider;
    2730import org.openstreetmap.josm.tools.ListenerList;
    2831import org.openstreetmap.josm.tools.Logging;
     
    4447
    4548    private static final ListenerList<MapPaintSylesUpdateListener> listeners = ListenerList.createUnchecked();
    4649
     50    private static final class MapPaintStylesPreferenceListener implements PreferenceChangedListener {
     51        private IPreferences pref;
     52        public MapPaintStylesPreferenceListener(IPreferences pref) {
     53            this.pref = pref;
     54        }
     55
     56        @Override
     57        public void preferenceChanged(PreferenceChangeEvent e) {
     58            if (e.getKey().contains("mappaint")) {
     59                // We need to remove this from the listeners, so that we don't recursively call ourselves.
     60                pref.removePreferenceChangeListener(this);
     61                MapPaintStyles.readFromPreferences();
     62                pref.addPreferenceChangeListener(this);
     63            }
     64        }
     65
     66    }
    4767    static {
    4868        listeners.addListener(new MapPaintSylesUpdateListener() {
    4969            @Override
     
    5676                mapPaintStylesUpdated();
    5777            }
    5878        });
     79        Config.getPref().addPreferenceChangeListener(new MapPaintStylesPreferenceListener(Config.getPref()));
    5980    }
    6081
    6182    private static ElemStyles styles = new ElemStyles();
  • src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java

     
    390390
    391391    @Override
    392392    public boolean ok() {
    393         boolean ret = false;
    394393        for (ColorEntry d : tableModel.getDeleted()) {
    395394            d.toProperty().remove();
    396395        }
    397396        for (ColorEntry e : tableModel.getData()) {
    398             if (e.info.getValue() != null && e.toProperty().put(e.info.getValue())
    399                     && NamedColorProperty.COLOR_CATEGORY_MAPPAINT.equals(e.info.getCategory())) {
    400                 ret = true;
     397            if (e.info.getValue() != null) {
     398                e.toProperty().put(e.info.getValue());
    401399            }
    402400        }
    403401        OsmDataLayer.createHatchTexture();
    404         return ret;
     402        return false;
    405403    }
    406404
    407405    @Override