--- a/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/support/TermOptions.java +++ a/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/support/TermOptions.java @@ -76,6 +76,11 @@ resetToDefault(); } + // Copy constructor + private TermOptions(TermOptions orig) { + assign(orig); + } + public final void resetToDefault() { final Font controlFont = UIManager.getFont("controlFont");// NOI18N fontSize = (controlFont == null)? 12: controlFont.getSize(); @@ -97,6 +102,7 @@ scrollOnOutput = true; lineWrap = true; ignoreKeymap = false; + markDirty(); } public synchronized static TermOptions getDefault(Preferences prefs) { @@ -111,20 +117,7 @@ * Make a copy of 'this'. */ public TermOptions makeCopy() { - TermOptions copy = new TermOptions(); - copy.font= this.font; - copy.fontSize = this.fontSize; - copy.tabSize = this.tabSize; - copy.historySize = this.historySize; - copy.foreground = new Color(this.foreground.getRGB()); - copy.background = new Color(this.background.getRGB()); - copy.selectionBackground = new Color(this.selectionBackground.getRGB()); - copy.clickToType = this.clickToType; - copy.scrollOnInput = this.scrollOnInput; - copy.scrollOnOutput = this.scrollOnOutput; - copy.lineWrap = this.lineWrap; - copy.ignoreKeymap = this.ignoreKeymap; - return copy; + return new TermOptions(this); } /** @@ -235,15 +228,10 @@ } public void setFont(Font font) { - if (this.font!= font) { - this.font = font; - dirty = true; - - // recalculate fontSize as well. - fontSize = this.font.getSize(); - - pcs.firePropertyChange(null, null, null); - } + this.font = font; + // recalculate fontSize as well. + fontSize = this.font.getSize(); + markDirty(); } /* @@ -258,16 +246,13 @@ } public void setFontSize(int fontSize) { - if (this.fontSize != fontSize) { - this.fontSize = fontSize; + this.fontSize = fontSize; - // recalculate font as well. - font = new Font(font.getFamily(), - font.getStyle(), - this.fontSize); - dirty = true; - pcs.firePropertyChange(null, null, null); - } + // recalculate font as well. + font = new Font(font.getFamily(), + font.getStyle(), + this.fontSize); + markDirty(); } /* @@ -282,8 +267,7 @@ } public void setForeground(Color foreground) { this.foreground = foreground; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } /* @@ -298,8 +282,7 @@ } public void setBackground(Color background) { this.background = background; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } /* @@ -315,8 +298,7 @@ } public void setSelectionBackground(Color selectionBackground) { this.selectionBackground = selectionBackground; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } /* @@ -330,11 +312,8 @@ return historySize; } public void setHistorySize(int historySize) { - if (this.historySize != historySize) { - dirty = true; - this.historySize = historySize; - pcs.firePropertyChange(null, null, null); - } + this.historySize = historySize; + markDirty(); } /* @@ -349,8 +328,7 @@ } public void setTabSize(int tabSize) { this.tabSize = tabSize; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } /* @@ -365,8 +343,7 @@ } public void setClickToType(boolean clickToType) { this.clickToType = clickToType; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } /* @@ -382,8 +359,7 @@ } public void setScrollOnInput(boolean scrollOnInput) { this.scrollOnInput = scrollOnInput; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } @@ -400,8 +376,7 @@ } public void setScrollOnOutput(boolean scrollOnOutput) { this.scrollOnOutput = scrollOnOutput; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } /* @@ -416,8 +391,7 @@ } public void setLineWrap(boolean lineWrap) { this.lineWrap = lineWrap; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } /* @@ -432,7 +406,11 @@ } public void setIgnoreKeymap(boolean ignoreKeymap) { this.ignoreKeymap = ignoreKeymap; - dirty = true; - pcs.firePropertyChange(null, null, null); + markDirty(); } + + private void markDirty() { + this.dirty = true; + pcs.firePropertyChange(null, null, null); + } } --- a/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/support/TermOptionsPanel.java +++ a/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/support/TermOptionsPanel.java @@ -45,7 +45,6 @@ import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Component; import java.awt.Font; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -100,6 +99,7 @@ private static final int MNM_WrapLines = Catalog.mnemonic("MNM_WrapLines"); //NOI18N private static final int MNM_IgnoreKeymap = Catalog.mnemonic("MNM_IgnoreKeymap"); //NOI18N private static final int MNM_Preview = Catalog.mnemonic("MNM_Preview"); //NOI18N + private boolean inApplyingModel; /** Creates new form TermOptionsPanel */ public TermOptionsPanel() { @@ -169,20 +169,25 @@ * Transfer model values to view widgets. */ private void applyTermOptions() { - fontSizeSpinner.setValue(termOptions.getFontSize()); - fontText.setText(termOptions.getFont().getFamily() + - " " + // NOI18N - termOptions.getFont().getSize()); - ColorComboBox.setColor(foregroundComboBox, termOptions.getForeground()); - ColorComboBox.setColor(backgroundComboBox, termOptions.getBackground()); - ColorComboBox.setColor(selectionComboBox, termOptions.getSelectionBackground()); - historySizeSpinner.setValue(termOptions.getHistorySize()); - tabSizeSpinner.setValue(termOptions.getTabSize()); - clickToTypeCheckBox.setSelected(termOptions.getClickToType()); - scrollOnInputCheckBox.setSelected(termOptions.getScrollOnInput()); - scrollOnOutputCheckBox.setSelected(termOptions.getScrollOnOutput()); - lineWrapCheckBox.setSelected(termOptions.getLineWrap()); - ignoreKeymapCheckBox.setSelected(termOptions.getIgnoreKeymap()); + inApplyingModel = true; + try { + fontSizeSpinner.setValue(termOptions.getFontSize()); + fontText.setText(termOptions.getFont().getFamily() + + " " + // NOI18N + termOptions.getFont().getSize()); + ColorComboBox.setColor(foregroundComboBox, termOptions.getForeground()); + ColorComboBox.setColor(backgroundComboBox, termOptions.getBackground()); + ColorComboBox.setColor(selectionComboBox, termOptions.getSelectionBackground()); + historySizeSpinner.setValue(termOptions.getHistorySize()); + tabSizeSpinner.setValue(termOptions.getTabSize()); + clickToTypeCheckBox.setSelected(termOptions.getClickToType()); + scrollOnInputCheckBox.setSelected(termOptions.getScrollOnInput()); + scrollOnOutputCheckBox.setSelected(termOptions.getScrollOnOutput()); + lineWrapCheckBox.setSelected(termOptions.getLineWrap()); + ignoreKeymapCheckBox.setSelected(termOptions.getIgnoreKeymap()); + } finally { + inApplyingModel = false; + } } /** @@ -558,32 +563,37 @@ private void restoreActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_restoreActionPerformed termOptions.resetToDefault(); - refreshView(); }//GEN-LAST:event_restoreActionPerformed private void fontSizeSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_fontSizeSpinnerStateChanged - int fontSize = termOptions.getFontSize(); + if (inApplyingModel) { + return; + } Object fontSizeObj = fontSizeSpinner.getValue(); if (fontSizeObj instanceof Integer) { - fontSize = ((Integer) fontSizeObj).intValue(); + int fontSize = ((Integer) fontSizeObj).intValue(); termOptions.setFontSize(fontSize); } }//GEN-LAST:event_fontSizeSpinnerStateChanged private void historySizeSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_historySizeSpinnerStateChanged - int historySize = termOptions.getHistorySize(); + if (inApplyingModel) { + return; + } Object historySizeObj = historySizeSpinner.getValue(); if (historySizeObj instanceof Integer) { - historySize = ((Integer) historySizeObj).intValue(); + int historySize = ((Integer) historySizeObj).intValue(); termOptions.setHistorySize(historySize); } }//GEN-LAST:event_historySizeSpinnerStateChanged private void tabSizeSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_tabSizeSpinnerStateChanged - int tabSize = termOptions.getTabSize(); + if (inApplyingModel) { + return; + } Object tabSizeObj = tabSizeSpinner.getValue(); if (tabSizeObj instanceof Integer) { - tabSize = ((Integer) tabSizeObj).intValue(); + int tabSize = ((Integer) tabSizeObj).intValue(); termOptions.setTabSize(tabSize); } }//GEN-LAST:event_tabSizeSpinnerStateChanged @@ -615,7 +625,6 @@ private void chooseFont(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chooseFont - /* PropertyEditor pe = PropertyEditorManager.findEditor(Font.class); JOptionPane.showOptionDialog(previewPanel, @@ -641,6 +650,9 @@ }//GEN-LAST:event_ignoreKeymapCheckBoxActionPerformed private void foregroundComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_foregroundComboBoxActionPerformed + if (inApplyingModel) { + return; + } Color c = ColorComboBox.getColor(foregroundComboBox); if (c != null) { termOptions.setForeground(c); @@ -648,6 +660,9 @@ }//GEN-LAST:event_foregroundComboBoxActionPerformed private void backgroundComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backgroundComboBoxActionPerformed + if (inApplyingModel) { + return; + } Color c = ColorComboBox.getColor(backgroundComboBox); if (c != null) { termOptions.setBackground(c); @@ -655,6 +670,9 @@ }//GEN-LAST:event_backgroundComboBoxActionPerformed private void selectionComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectionComboBoxActionPerformed + if (inApplyingModel) { + return; + } Color c = ColorComboBox.getColor(selectionComboBox); if (c != null) { termOptions.setSelectionBackground(c); --- a/terminal/src/org/netbeans/modules/terminal/TermAdvancedOption.java +++ a/terminal/src/org/netbeans/modules/terminal/TermAdvancedOption.java @@ -84,7 +84,6 @@ termOptions = TermOptions.getDefault(prefs); clonedTermOptions = termOptions.makeCopy(); panel.setTermOptions(clonedTermOptions); - } // implement OptionsPanelController @@ -130,7 +129,7 @@ // update wasn't called => no changes return false; } - clonedTermOptions = termOptions.makeCopy(); + if (clonedTermOptions == null) { return false; } else {