handle storing the preferences on ok pressed
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/PreferencePageContainerDialog.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/PreferencePageContainerDialog.java
index 097aab8..24f7cb4 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/PreferencePageContainerDialog.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/PreferencePageContainerDialog.java
@@ -10,11 +10,14 @@
*******************************************************************************/
package org.eclipse.team.internal.ui.dialogs;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.IPreferencePageContainer;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceDialog;
@@ -43,6 +46,7 @@
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.team.internal.ui.Policy;
import org.eclipse.team.internal.ui.TeamUIPlugin;
public class PreferencePageContainerDialog extends Dialog implements IPreferencePageContainer {
@@ -120,14 +124,15 @@
protected void okPressed() {
final List changedProperties = new ArrayList(5);
getPreferenceStore().addPropertyChangeListener( new IPropertyChangeListener() {
- /**
- * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
- */
public void propertyChange(PropertyChangeEvent event) {
changedProperties.add(event.getProperty());
}
});
+
page.performOk();
+
+ handleSave();
+
super.okPressed();
}
@@ -383,4 +388,34 @@
fOkButton= createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
+
+ /**
+ * Save the values specified in the pages.
+ * <p>
+ * The default implementation of this framework method saves all
+ * pages of type <code>PreferencePage</code> (if their store needs saving
+ * and is a <code>PreferenceStore</code>).
+ * </p>
+ * <p>
+ * Subclasses may override.
+ * </p>
+ */
+ protected void handleSave() {
+ if (page instanceof PreferencePage) {
+ // Save now in case tbe workbench does not shutdown cleanly
+ IPreferenceStore store =
+ ((PreferencePage) page).getPreferenceStore();
+ if (store != null
+ && store.needsSaving()
+ && store instanceof IPersistentPreferenceStore) {
+ try {
+ ((IPersistentPreferenceStore) store).save();
+ } catch (IOException e) {
+ MessageDialog.openError(
+ getShell(), Policy.bind("saving"),
+ Policy.bind("saving", page.getTitle(), e.getMessage()));
+ }
+ }
+ }
+ }
}