Ticket #17270: 17270-focus-and-count.patch

File 17270-focus-and-count.patch, 3.2 KB (added by GerdP, 4 years ago)
  • src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java

     
    22package org.openstreetmap.josm.gui.history;
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
     5import static org.openstreetmap.josm.tools.I18n.trn;
    56
    67import java.awt.Component;
    78import java.awt.Dimension;
     
    89import java.awt.Point;
    910import java.util.ArrayList;
    1011import java.util.Collection;
    11 import java.util.HashMap;
    1212import java.util.Iterator;
     13import java.util.LinkedHashMap;
     14import java.util.LinkedList;
    1315import java.util.List;
    14 import java.util.Map;
    1516import java.util.Map.Entry;
    1617import java.util.Objects;
    1718import java.util.function.Predicate;
     
    2829import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
    2930import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
    3031import org.openstreetmap.josm.gui.util.WindowGeometry;
     32import org.openstreetmap.josm.spi.preferences.Config;
    3133import org.openstreetmap.josm.tools.JosmRuntimeException;
    3234import org.openstreetmap.josm.tools.Logging;
    3335import org.openstreetmap.josm.tools.SubclassFilteredCollection;
     
    5860
    5961    private static HistoryBrowserDialogManager instance;
    6062
    61     private final Map<Long, HistoryBrowserDialog> dialogs = new HashMap<>();
     63    private final LinkedHashMap<Long, HistoryBrowserDialog> dialogs = new LinkedHashMap<>();
    6264
    6365    private final Predicate<PrimitiveId> unloadedHistoryPredicate = new UnloadedHistoryPredicate();
    6466
     
    143145        }
    144146        dialog.setVisible(false);
    145147        dialog.dispose();
     148
     149        if (!dialogs.isEmpty()) {
     150            // see #17270: set focus to last dialog
     151            new LinkedList<>(dialogs.values()).getLast().toFront();
     152        }
    146153    }
    147154
    148155    /**
     
    224231     * @since 16123
    225232     */
    226233    public void showHistory(Component parent, final Collection<? extends PrimitiveId> primitives) {
     234        if (primitives.size() > Config.getPref().getInt("warn.open.maxhistory", 5) &&
     235                /* I18N english text for value 1 makes no real sense, never called for values <= maxhistory (usually 5) */
     236                JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(MainApplication.getMainFrame(),
     237                        "<html>" + trn(
     238                                "You are about to open <b>{0}</b> different history dialog simultaneously.<br/>Do you want to continue?",
     239                                "You are about to open <b>{0}</b> different history dialogs simultaneously.<br/>Do you want to continue?",
     240                                primitives.size(), primitives.size()) + "</html>",
     241                        tr("Confirmation"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE)) {
     242            return;
     243        }
     244
    227245        final List<PrimitiveId> realPrimitives = new ArrayList<>(primitives);
    228246        hooks.forEach(h -> h.modifyRequestedIds(realPrimitives));
    229247        final Collection<? extends PrimitiveId> notNewPrimitives = SubclassFilteredCollection.filter(realPrimitives, notNewPredicate);