From 194639413e59294ecd16e63312577a9cd2e1e779 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Mon, 16 Jun 2014 17:17:37 +0400 Subject: [PATCH] resource bundle editor: selection changed not save previous property values fix --- .../properties/editor/ResourceBundleEditor.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java index 5abeb70cf985..dc3937d42f63 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java @@ -84,6 +84,7 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit private final StructureViewComponent myStructureViewComponent; private final Map myEditors; + private String myOldPropertyName; private final ResourceBundle myResourceBundle; private final Map myTitledPanels; private final JComponent myNoPropertySelectedPanel = new NoPropertySelectedPanel().getComponent(); @@ -271,7 +272,9 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit private void writeEditorPropertyValue(final Editor editor, final PropertiesFile propertiesFile) { final String currentValue = editor.getDocument().getText(); - final String selectedProperty = getSelectedPropertyName(); + final String currentSelectedProperty = getSelectedPropertyName(); + final String selectedProperty = myOldPropertyName == null ? currentSelectedProperty : myOldPropertyName; + assert selectedProperty != null; ApplicationManager.getApplication().runWriteAction(new Runnable() { @@ -505,10 +508,18 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit } private void selectionChanged() { myBackSlashPressed.clear(); + final String currentSelectedPropertyName = getSelectedPropertyName(); + UIUtil.invokeLaterIfNeeded(new Runnable() { @Override public void run() { + if (myOldPropertyName != null && !myOldPropertyName.equals(currentSelectedPropertyName)) { + for (final Map.Entry entry : myEditors.entrySet()) { + writeEditorPropertyValue(entry.getValue(), entry.getKey()); + } + } updateEditorsFromProperties(); + myOldPropertyName = currentSelectedPropertyName; } }); }