diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java index 2dd0ecdb7a4..a9ddd8e4246 100644 --- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java +++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java @@ -34,6 +34,7 @@ import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.FieldDecorationRegistry; import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.util.Util; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; @@ -153,6 +154,20 @@ private void createSettingsControls(Composite workArea) { clientData.exclude = !expanded; toggle.setText(expanded ? "\u25BE" : "\u25B8"); //$NON-NLS-1$ //$NON-NLS-2$ + // On macOS Cocoa, setBackground/setForeground on a hidden widget is dropped + // once the widget is realized. Re-apply colors to the check buttons when + // the section first becomes visible. + if (Util.isMac()) { + sectionClient.addListener(SWT.Show, e -> { + for (Control child : sectionClient.getChildren()) { + if (child instanceof Button button && (button.getStyle() & SWT.CHECK) != 0) { + button.setBackground(workArea.getBackground()); + button.setForeground(workArea.getForeground()); + } + } + }); + } + Listener toggleListener = e -> { boolean newState = !sectionClient.getVisible(); sectionClient.setVisible(newState);