Changeset 18943 in josm for trunk/src/org


Ignore:
Timestamp:
2024-01-19T09:17:04+01:00 (9 months ago)
Author:
GerdP
Message:

fix #23417: Load images from Wikimedia Commons can cause crash report

  • disable the action when last layer was closed

This requires special action in layerRemoving(), so default listeners in JosmAction are no longer needed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/WikimediaCommonsLoader.java

    r18036 r18943  
    1616import org.openstreetmap.josm.gui.MainApplication;
    1717import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     18import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
     19import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
     20import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
     21import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
    1822import org.openstreetmap.josm.io.OsmTransferException;
    1923import org.openstreetmap.josm.tools.Logging;
     
    6670     * @since 18021
    6771     */
    68     public static class WikimediaCommonsLoadImagesAction extends JosmAction {
     72    public static class WikimediaCommonsLoadImagesAction extends JosmAction implements LayerChangeListener {
    6973        /**
    7074         * Constructs a new {@code WikimediaCommonsLoadImagesAction}
    7175         */
    7276        public WikimediaCommonsLoadImagesAction() {
    73             super(tr("Load images from Wikimedia Commons"), "wikimedia_commons", null, null, false);
     77            super(tr("Load images from Wikimedia Commons"), "wikimedia_commons", null, null, false, false);
     78            MainApplication.getLayerManager().addLayerChangeListener(this);
     79            initEnabledState();
    7480        }
    7581
     
    8490            setEnabled(MainApplication.isDisplayingMapView());
    8591        }
     92
     93        @Override
     94        public void layerAdded(LayerAddEvent e) {
     95            updateEnabledState();
     96        }
     97
     98        @Override
     99        public void layerRemoving(LayerRemoveEvent e) {
     100            if (e.isLastLayer())
     101                setEnabled(false);
     102        }
     103
     104        @Override
     105        public void layerOrderChanged(LayerOrderChangeEvent e) {
     106            // not used
     107        }
     108
     109        @Override
     110        public void destroy() {
     111            MainApplication.getLayerManager().removeLayerChangeListener(this);
     112            super.destroy();
     113        }
    86114    }
    87115}
Note: See TracChangeset for help on using the changeset viewer.