diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/Workbench.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/Workbench.java index 5bc2f90cb1c..9a7aa487f35 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/Workbench.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/Workbench.java @@ -773,6 +773,13 @@ public static Display createDisplay() { setRescaleAtRuntimePropertyFromPreference(); + if (DPIUtil.isMonitorSpecificScalingActive() && !DPIUtil.isSetupCompatibleToMonitorSpecificScaling()) { + System.setProperty(SWT_RESCALE_AT_RUNTIME_PROPERTY, Boolean.toString(false)); + MessageDialog.openError(new Shell(Display.getDefault()), + WorkbenchMessages.RescaleAtRuntimeIncompatibilityTitle, NLS.bind( + WorkbenchMessages.RescaleAtRuntimeIncompatibilityDescription, DPIUtil.getAutoScaleValue())); + } + // create the display Display newDisplay = Display.getCurrent(); if (newDisplay == null) { diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java index 7f1f1435b4f..740d78a0db4 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java @@ -38,6 +38,12 @@ public class WorkbenchMessages extends NLS { public static String RescaleAtRuntimeDescription; + public static String RescaleAtRuntimeDisabledDescription; + + public static String RescaleAtRuntimeIncompatibilityTitle; + + public static String RescaleAtRuntimeIncompatibilityDescription; + public static String RescaleAtRuntimeEnabled; public static String RescaleAtRuntimeSettingChangeWarningTitle; diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java index af350f44b9b..c034c136739 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java @@ -53,6 +53,7 @@ import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.FieldDecorationRegistry; +import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.ArrayContentProvider; @@ -65,7 +66,9 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.internal.DPIUtil; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -222,7 +225,16 @@ private void createRescaleAtRuntimeCheckButton(Composite parent) { .getBoolean(IWorkbenchPreferenceConstants.RESCALING_AT_RUNTIME, true); rescaleAtRuntime = createCheckButton(parent, WorkbenchMessages.RescaleAtRuntimeEnabled, initialStateRescaleAtRuntime); - rescaleAtRuntime.setToolTipText(WorkbenchMessages.RescaleAtRuntimeDescription); + if (!DPIUtil.isSetupCompatibleToMonitorSpecificScaling()) { + rescaleAtRuntime.setEnabled(false); + Font font = parent.getFont(); + Composite note = createNoteComposite(font, parent, WorkbenchMessages.Preference_note, + WorkbenchMessages.RescaleAtRuntimeDisabledDescription); + note.setLayoutData(GridDataFactory.swtDefaults().span(2, 1).create()); + } else { + rescaleAtRuntime.setEnabled(true); + rescaleAtRuntime.setToolTipText(WorkbenchMessages.RescaleAtRuntimeDescription); + } } private void createThemeIndependentComposits(Composite comp) { diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties index aa3e02edf00..b6a65144981 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties @@ -504,7 +504,10 @@ RescaleAtRuntimeSettingChangeWarningTitle = DPI Setting Changed RescaleAtRuntimeSettingChangeWarningText = Restart for the DPI setting changes to take effect HiDpiSettingsGroupTitle = HiDPI settings RescaleAtRuntimeDescription = Activating this option will dynamically scale all windows according to the monitor they are currently in +RescaleAtRuntimeDisabledDescription = Incompatible autoscale value was defined via system property or ini RescaleAtRuntimeEnabled = Use monitor-specific UI &scaling +RescaleAtRuntimeIncompatibilityTitle = Scaling Configuration Error +RescaleAtRuntimeIncompatibilityDescription = Monitor-specific scaling is currently active with the wrong autoscale value (''{0}''). This combination may lead to unexpected UI scaling behavior, For this reason the monitor-specific scaling has been disabled. Please review your auto-scaling configuration. # --- Workbench ----- WorkbenchPreference_openMode=Open mode WorkbenchPreference_doubleClick=D&ouble click