From 27f6637d3f14b6ad860eb0db36cfedbc588ca5e3 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Thu, 27 May 2021 01:31:51 -0400 Subject: [PATCH] Bug 573796: Warn user if not using UTF-8 on Windows The PTY, in case of ConPTY, operates always in UTF-8. This is suggested back to the user with a decorated combo if they try to change the default. Change-Id: Iaf4c13e256ea7ee3469eecab4a0ec3df1ceb19a4 --- .../META-INF/MANIFEST.MF | 2 +- .../LocalWizardConfigurationPanel.java | 17 ++++++++++++ .../connector/local/controls/Messages.java | 27 +++++++++++++++++++ .../local/controls/Messages.properties | 10 +++++++ .../META-INF/MANIFEST.MF | 2 +- .../AbstractExtendedConfigurationPanel.java | 18 +++++++++++++ 6 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/Messages.java create mode 100644 terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/Messages.properties diff --git a/terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/MANIFEST.MF b/terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/MANIFEST.MF index e64b7e5f9e9..d6a0bb7396b 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/MANIFEST.MF +++ b/terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.tm.terminal.connector.local;singleton:=true -Bundle-Version: 4.7.100.qualifier +Bundle-Version: 4.7.200.qualifier Bundle-Activator: org.eclipse.tm.terminal.connector.local.activator.UIPlugin Bundle-Vendor: %providerName Import-Package: org.eclipse.cdt.utils.pty;mandatory:=native diff --git a/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/LocalWizardConfigurationPanel.java b/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/LocalWizardConfigurationPanel.java index 7b2ad0a6fa4..fd7d49911aa 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/LocalWizardConfigurationPanel.java +++ b/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/LocalWizardConfigurationPanel.java @@ -16,10 +16,13 @@ import java.util.Map; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.fieldassist.ControlDecoration; +import org.eclipse.jface.fieldassist.FieldDecorationRegistry; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; @@ -83,6 +86,20 @@ public class LocalWizardConfigurationPanel extends AbstractExtendedConfiguration setControl(panel); } + @Override + protected void decorateEncoding(ControlDecoration encodingComboDecorator, String encoding) { + if ((Platform.OS_MACOSX.equals(Platform.getOS()) || Platform.OS_WIN32.equals(Platform.getOS())) + && !"UTF-8".equals(encoding)) { //$NON-NLS-1$ + Image decorationImage = FieldDecorationRegistry.getDefault() + .getFieldDecoration(FieldDecorationRegistry.DEC_WARNING).getImage(); + encodingComboDecorator.setImage(decorationImage); + encodingComboDecorator.setDescriptionText(Messages.LocalWizardConfigurationPanel_encoding_does_not_match); + encodingComboDecorator.show(); + } else { + super.decorateEncoding(encodingComboDecorator, encoding); + } + } + @Override public void setupData(Map data) { if (data == null) diff --git a/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/Messages.java b/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/Messages.java new file mode 100644 index 00000000000..e579af85dd0 --- /dev/null +++ b/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/Messages.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2021 Kichwa Coders Canada Inc. and others. + * + * This program and the accompanying materials are made available under the terms + * of the Eclipse Public License 2.0 which accompanies this distribution, and is + * available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.tm.terminal.connector.local.controls; + +import org.eclipse.osgi.util.NLS; + +/** + * @noreference This class is not intended to be referenced by clients. + */ +public class Messages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.connector.local.controls.Messages"; //$NON-NLS-1$ + public static String LocalWizardConfigurationPanel_encoding_does_not_match; + static { + // initialize resource bundle + NLS.initializeMessages(BUNDLE_NAME, Messages.class); + } + + private Messages() { + } +} diff --git a/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/Messages.properties b/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/Messages.properties new file mode 100644 index 00000000000..3b02208cad2 --- /dev/null +++ b/terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/Messages.properties @@ -0,0 +1,10 @@ +############################################################################### +# Copyright (c) 2021 Kichwa Coders Canada Inc. and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +LocalWizardConfigurationPanel_encoding_does_not_match=The selected encoding does not match the terminal being connected to. Recommended encoding is UTF-8. diff --git a/terminal/plugins/org.eclipse.tm.terminal.view.ui/META-INF/MANIFEST.MF b/terminal/plugins/org.eclipse.tm.terminal.view.ui/META-INF/MANIFEST.MF index d269bd9643f..30b47f72fca 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.view.ui/META-INF/MANIFEST.MF +++ b/terminal/plugins/org.eclipse.tm.terminal.view.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.tm.terminal.view.ui;singleton:=true -Bundle-Version: 4.9.0.qualifier +Bundle-Version: 4.10.0.qualifier Bundle-Activator: org.eclipse.tm.terminal.view.ui.activator.UIPlugin Bundle-Vendor: %providerName Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400", diff --git a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractExtendedConfigurationPanel.java b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractExtendedConfigurationPanel.java index 3b331237b08..f372a47314f 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractExtendedConfigurationPanel.java +++ b/terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractExtendedConfigurationPanel.java @@ -28,6 +28,7 @@ import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; @@ -454,6 +455,7 @@ public abstract class AbstractExtendedConfigurationPanel extends AbstractConfigu label.setText(Messages.AbstractConfigurationPanel_encoding); encodingCombo = new Combo(panel, SWT.READ_ONLY); + ControlDecoration encodingComboDecorator = new ControlDecoration(encodingCombo, SWT.TOP | SWT.LEFT); encodingCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); encodingCombo.addSelectionListener(new SelectionAdapter() { @Override @@ -494,6 +496,8 @@ public abstract class AbstractExtendedConfigurationPanel extends AbstractConfigu encodingCombo.select(encodingCombo.indexOf(lastSelectedEncoding)); } } + + decorateEncoding(encodingComboDecorator, encodingCombo.getText()); } }); @@ -506,6 +510,20 @@ public abstract class AbstractExtendedConfigurationPanel extends AbstractConfigu } } + /** + * Allow the encoding combo box to be decorated with a warning or similar in case user selects + * inappropriate encoding. + * + * @param encodingComboDecorator control decoration on the encoding combo box + * @param encoding the encoding the user has selected + * @since 4.10 + */ + protected void decorateEncoding(ControlDecoration encodingComboDecorator, String encoding) { + // by default don't warn users + encodingComboDecorator.hide(); + encodingComboDecorator.hideHover(); + } + /** * Fill the encoding combo. */