Ignore:
Timestamp:
2016-07-23T14:54:19+02:00 (10 years ago)
Author:
Don-vip
Message:

fix #12478, fix #12565, fix #11114 - Use ​Swing Copy/Paste instead of CopyAction/PasteAction with custom buffer (patch by michael2402, modified) - gsoc-core

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r10454 r10604  
    1212import java.awt.GridBagLayout;
    1313import java.awt.Window;
     14import java.awt.datatransfer.Clipboard;
     15import java.awt.datatransfer.FlavorListener;
    1416import java.awt.event.ActionEvent;
    1517import java.awt.event.FocusAdapter;
     
    6264import org.openstreetmap.josm.gui.DefaultNameFormatter;
    6365import org.openstreetmap.josm.gui.MainMenu;
     66import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
    6467import org.openstreetmap.josm.gui.dialogs.relation.actions.AddSelectedAfterSelection;
    6568import org.openstreetmap.josm.gui.dialogs.relation.actions.AddSelectedAtEndAction;
     
    153156     */
    154157    private final CancelAction cancelAction;
     158    /**
     159     * A list of listeners that need to be notified on clipboard content changes.
     160     */
     161    private final ArrayList<FlavorListener> clipboardListeners = new ArrayList<>();
    155162
    156163    /**
     
    274281        // CHECKSTYLE.ON: LineLength
    275282
    276         registerCopyPasteAction(new PasteMembersAction(memberTableModel, getLayer(), this) {
     283        registerCopyPasteAction(new PasteMembersAction(memberTable, getLayer(), this) {
    277284            @Override
    278285            public void actionPerformed(ActionEvent e) {
     
    743750        }
    744751        super.setVisible(visible);
     752        Clipboard clipboard = ClipboardUtils.getClipboard();
    745753        if (visible) {
    746754            leftButtonToolbar.sortBelowButton.setVisible(ExpertToggleAction.isExpert());
     
    750758            }
    751759            tagEditorPanel.requestFocusInWindow();
     760            for (FlavorListener listener : clipboardListeners) {
     761                clipboard.addFlavorListener(listener);
     762            }
    752763        } else {
    753764            // make sure all registered listeners are unregistered
     
    760771                Main.main.menu.windowMenu.remove(windowMenuItem);
    761772                windowMenuItem = null;
     773            }
     774            for (FlavorListener listener : clipboardListeners) {
     775                clipboard.removeFlavorListener(listener);
    762776            }
    763777            dispose();
     
    824838    }
    825839
    826     private static void registerCopyPasteAction(AbstractAction action, Object actionName, KeyStroke shortcut,
     840    private void registerCopyPasteAction(AbstractAction action, Object actionName, KeyStroke shortcut,
    827841            JRootPane rootPane, JTable... tables) {
    828842        int mods = shortcut.getModifiers();
     
    840854            table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(shortcut, actionName);
    841855            table.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(shortcut, actionName);
     856        }
     857        if (action instanceof FlavorListener) {
     858            clipboardListeners.add((FlavorListener) action);
    842859        }
    843860    }
Note: See TracChangeset for help on using the changeset viewer.