Skip to content

Commit bb26735

Browse files
committed
Style workspace selection dialog with default theme setting
1 parent bff29fd commit bb26735

File tree

5 files changed

+62
-2
lines changed

5 files changed

+62
-2
lines changed

bundles/org.eclipse.e4.ui.workbench.swt/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ Export-Package: org.eclipse.e4.ui.internal.workbench.swt;
3939
x-friends:="org.eclipse.e4.ui.workbench.addons.swt,
4040
org.eclipse.e4.ui.workbench.renderers.swt,
4141
org.eclipse.ui.workbench,
42-
org.eclipse.e4.ui.bindings.tests",
42+
org.eclipse.e4.ui.bindings.tests,
43+
org.eclipse.ui.ide.application",
4344
org.eclipse.e4.ui.internal.workbench.swt.handlers;x-internal:=true,
4445
org.eclipse.e4.ui.workbench.swt,
4546
org.eclipse.e4.ui.workbench.swt.factories;x-friends:="org.eclipse.e4.ui.workbench.renderers.swt,org.eclipse.ui.workbench",

bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.21.0,4.0.0)",
1919
org.eclipse.e4.core.services;bundle-version="2.4.0",
2020
org.eclipse.e4.core.contexts;bundle-version="[1.12.0,2.0.0)",
2121
org.eclipse.urischeme;bundle-version="[1.3.0,2.0.0)",
22-
org.eclipse.e4.ui.di
22+
org.eclipse.e4.ui.di,
23+
org.eclipse.e4.ui.css.swt.theme,
24+
org.eclipse.e4.ui.workbench.swt
2325
Export-Package: org.eclipse.ui.internal.ide.application;x-internal:=true,
2426
org.eclipse.ui.internal.ide.application.addons;x-internal:=true,
2527
org.eclipse.ui.internal.ide.application.dialogs;x-internal:=true

bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@
4242
import org.eclipse.core.runtime.Status;
4343
import org.eclipse.core.runtime.jobs.Job;
4444
import org.eclipse.core.runtime.preferences.ConfigurationScope;
45+
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
46+
import org.eclipse.e4.core.contexts.EclipseContextFactory;
47+
import org.eclipse.e4.core.contexts.IEclipseContext;
48+
import org.eclipse.e4.ui.css.swt.theme.IThemeEngine;
49+
import org.eclipse.e4.ui.css.swt.theme.IThemeManager;
50+
import org.eclipse.e4.ui.internal.workbench.swt.E4Application;
51+
import org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine;
4552
import org.eclipse.equinox.app.IApplication;
4653
import org.eclipse.equinox.app.IApplicationContext;
4754
import org.eclipse.jface.dialogs.IDialogConstants;
@@ -71,6 +78,9 @@
7178
import org.eclipse.ui.internal.ide.StatusUtil;
7279
import org.eclipse.ui.preferences.ScopedPreferenceStore;
7380
import org.osgi.framework.Bundle;
81+
import org.osgi.framework.BundleContext;
82+
import org.osgi.framework.FrameworkUtil;
83+
import org.osgi.framework.ServiceReference;
7484
import org.osgi.framework.Version;
7585

7686
/**
@@ -94,6 +104,8 @@ public class IDEApplication implements IApplication, IExecutableExtension {
94104

95105
private static final String USER_NAME = "user.name"; //$NON-NLS-1$
96106

107+
private IThemeEngine themeEngine;
108+
97109
// Use the branding plug-in of the platform feature since this is most likely
98110
// to change on an update of the IDE.
99111
private static final String WORKSPACE_CHECK_REFERENCE_BUNDLE_NAME = "org.eclipse.platform"; //$NON-NLS-1$
@@ -145,6 +157,9 @@ public Object start(IApplicationContext appContext) throws Exception {
145157
Job.getJobManager().suspend();
146158

147159
Display display = createDisplay();
160+
161+
initializeDefaultTheme(display);
162+
148163
// processor must be created before we start event loop
149164
DelayedEventsProcessor processor = new DelayedEventsProcessor(display);
150165

@@ -587,6 +602,14 @@ protected Shell getParentShell() {
587602
return null;
588603
}
589604

605+
@Override
606+
protected Control createContents(Composite parent) {
607+
Control contents = super.createContents(parent);
608+
if (themeEngine != null) {
609+
themeEngine.applyStyles(getShell(), true);
610+
}
611+
return contents;
612+
}
590613
}.prompt(force);
591614
}
592615

@@ -852,6 +875,36 @@ protected static Version toMajorMinorVersion(Version version) {
852875
return new Version(version.getMajor(), version.getMinor(), 0);
853876
}
854877

878+
protected void initializeDefaultTheme(Display display) {
879+
IEclipsePreferences configurationScopeNode = ConfigurationScope.INSTANCE
880+
.getNode("org.eclipse.e4.ui.css.swt.theme"); //$NON-NLS-1$
881+
String defaultThemeId = configurationScopeNode.get("themeid", null); //$NON-NLS-1$
882+
if (defaultThemeId != null) {
883+
IEclipseContext tempContext = EclipseContextFactory.create();
884+
tempContext.set(E4Application.THEME_ID, defaultThemeId);
885+
PartRenderingEngine.initializeStyling(display, tempContext);
886+
887+
Bundle bundle = FrameworkUtil.getBundle(IThemeManager.class);
888+
if (bundle != null) {
889+
BundleContext bundleContext = bundle.getBundleContext();
890+
ServiceReference<IThemeManager> ref = bundleContext.getServiceReference(IThemeManager.class);
891+
if (ref != null) {
892+
IThemeManager mgr = bundleContext.getService(ref);
893+
if (mgr != null) {
894+
themeEngine = mgr.getEngineForDisplay(display);
895+
if (themeEngine != null) {
896+
display.addListener(SWT.Show, event -> {
897+
if (event.widget instanceof Shell shell) {
898+
themeEngine.applyStyles(shell, true);
899+
}
900+
});
901+
}
902+
}
903+
}
904+
}
905+
}
906+
}
907+
855908
@Override
856909
public void stop() {
857910
final IWorkbench workbench = PlatformUI.getWorkbench();

bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceDialog.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.eclipse.jface.dialogs.IDialogConstants;
4040
import org.eclipse.jface.dialogs.IDialogSettings;
4141
import org.eclipse.jface.dialogs.TitleAreaDialog;
42+
import org.eclipse.jface.resource.JFaceColors;
4243
import org.eclipse.jface.util.Geometry;
4344
import org.eclipse.jface.window.Window;
4445
import org.eclipse.osgi.util.NLS;
@@ -319,6 +320,7 @@ private void createRecentWorkspacesComposite(final Composite composite) {
319320
recentWorkspacesForm.getBody().setLayout(new GridLayout());
320321
ExpandableComposite recentWorkspacesExpandable = toolkit.createExpandableComposite(recentWorkspacesForm.getBody(),
321322
ExpandableComposite.TWISTIE);
323+
recentWorkspacesExpandable.setTitleBarForeground(composite.getForeground());
322324
recentWorkspacesForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
323325
recentWorkspacesExpandable.setBackground(composite.getBackground());
324326
recentWorkspacesExpandable.setText(IDEWorkbenchMessages.ChooseWorkspaceDialog_recentWorkspaces);
@@ -352,6 +354,7 @@ public void expansionStateChanged(ExpansionEvent e) {
352354
final String recentWorkspace = uniqueWorkspaceEntry.getValue();
353355

354356
Link link = new Link(panel, SWT.WRAP);
357+
link.setForeground(JFaceColors.getHyperlink(composite.getDisplay()));
355358
link.setLayoutData(new RowData(SWT.DEFAULT, SWT.DEFAULT));
356359
link.setText("<a>" + uniqueWorkspaceEntry.getKey() + "</a>"); //$NON-NLS-1$ //$NON-NLS-2$
357360
link.setToolTipText(recentWorkspace);

bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ private void createSettingsControls(Composite workArea) {
128128

129129
copySettingsExpandable.setText(IDEWorkbenchMessages.ChooseWorkspaceWithSettingsDialog_SettingsGroupName);
130130
copySettingsExpandable.setBackground(workArea.getBackground());
131+
copySettingsExpandable.setTitleBarForeground(workArea.getForeground());
131132
copySettingsExpandable.setLayout(new GridLayout());
132133
copySettingsExpandable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
133134
copySettingsExpandable.addExpansionListener(new IExpansionListener() {

0 commit comments

Comments
 (0)