diff --git a/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF index cf50509..c99c018 100644 --- a/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF @@ -55,6 +55,7 @@ org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)", org.eclipse.ui.forms;bundle-version="[3.3.0,4.0.0)";resolution:=optional, org.eclipse.equinox.p2.engine;bundle-version="[2.0.0,3.0.0)", - org.eclipse.equinox.p2.metadata;bundle-version="[2.0.0,3.0.0)" + org.eclipse.equinox.p2.metadata;bundle-version="[2.0.0,3.0.0)", + org.eclipse.equinox.bidi;bundle-version="0.9.0" Import-Package: com.ibm.icu.text Bundle-RequiredExecutionEnvironment: J2SE-1.4 diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java index 35cd387..d02b0af 100644 --- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java +++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java @@ -18,6 +18,7 @@ import java.net.URI; import java.net.URISyntaxException; +import java.util.Locale; import org.eclipse.core.filesystem.IFileInfo; import org.eclipse.core.filesystem.URIUtil; @@ -25,11 +26,15 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; +import org.eclipse.equinox.bidi.STextTypeHandlerFactory; +import org.eclipse.equinox.bidi.advanced.ISTextExpert; +import org.eclipse.equinox.bidi.advanced.STextExpertFactory; import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.osgi.util.TextProcessor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SegmentEvent; +import org.eclipse.swt.events.SegmentListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; @@ -171,10 +176,9 @@ if (useDefaults) { userPath = locationPathField.getText(); - locationPathField.setText(TextProcessor - .process(getDefaultPathDisplayString())); + locationPathField.setText(getDefaultPathDisplayString()); } else { - locationPathField.setText(TextProcessor.process(userPath)); + locationPathField.setText(userPath); } String error = checkValidLocation(); errorReporter.reportError(error, @@ -213,6 +217,44 @@ data.widthHint = SIZING_TEXT_FIELD_WIDTH; data.horizontalSpan = 2; locationPathField.setLayoutData(data); + + boolean isBidiSupportNeeded = false; + + String lang = Locale.getDefault().getLanguage(); + if ("iw".equals(lang) || "he".equals(lang) || "ar".equals(lang) || "fa".equals(lang) || "ur".equals(lang)) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + String osName = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$ + if (osName.startsWith("windows") || osName.startsWith("linux") || osName.startsWith("mac")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + isBidiSupportNeeded = true; + } + } + if (isBidiSupportNeeded) { + locationPathField.addSegmentListener(new SegmentListener() { + final char LRE = 0x202A; + final char LRM = 0x200E; + final char PDF = 0x202C; + + public void getSegments(SegmentEvent event) { + int length = event.lineText.length(); + int segments[]; + ISTextExpert expert = + STextExpertFactory.getExpert(STextTypeHandlerFactory.FILE); + segments = expert.leanBidiCharOffsets(event.lineText); + + event.segments = new int[segments.length+2]; + event.segments[0] = 0; + System.arraycopy(segments, 0, event.segments, 1, segments.length); + event.segments[segments.length+1] = length; + + event.segmentsChars = new char[event.segments.length]; + event.segmentsChars[0] = LRE; + for (int i =1; i