Ticket #21124: 21124.patch

File 21124.patch, 2.2 KB (added by marcello@…, 4 years ago)
  • src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java

     
    2121import javax.swing.JLabel;
    2222import javax.swing.JPanel;
    2323import javax.swing.JToggleButton;
    24 import javax.swing.SwingUtilities;
    2524
    2625import org.openstreetmap.josm.data.osm.Tag;
    2726import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
     
    249248    }
    250249
    251250    private void setupListeners(AutoCompletingTextField textField, TaggingPresetItemGuiSupport support) {
    252         textField.getDocument().addDocumentListener(DocumentAdapter.create(ignore ->
    253                 support.fireItemValueModified(this, key, textField.getText())));
    254 
    255         if (valueTemplate != null) {
     251        // don't fire on calculated fields because you can easily get into a loop
     252        if (valueTemplate == null) {
     253            textField.getDocument().addDocumentListener(DocumentAdapter.create(event ->
     254                    support.fireItemValueModified(this, key, textField.getText())));
     255        } else {
    256256            textField.setForeground(Color.BLUE);
    257257            support.addListener((source, key, newValue) -> {
    258                 if (source != this) {
    259                     String valueTemplateText = valueTemplate.getText(support);
    260                     Logging.trace("Evaluating value_template {0} for key {1} from {2} with new value {3} => {4}",
    261                             valueTemplate, key, source, newValue, valueTemplateText);
    262                     if (!textField.getText().equals(valueTemplateText)) {
    263                         SwingUtilities.invokeLater(() -> textField.setItem(valueTemplateText));
    264                     }
    265                 }
     258                String valueTemplateText = valueTemplate.getText(support);
     259                Logging.trace("Evaluating value_template {0} for key {1} from {2} with new value {3} => {4}",
     260                        valueTemplate, key, source, newValue, valueTemplateText);
     261                textField.setItem(valueTemplateText);
    266262            });
    267263        }
    268264    }