Not sure if there's a better way, but you can ask any control to be reskinned by using:
IThemeEngine themeEngine = (IThemeEngine) Display.getDefault().getData("org.eclipse.e4.ui.css.swt.theme");
themeEngine.applyStyles(control, applyToChildren);
On PyDev I have a utility method that does:
@SuppressWarnings("restriction")
public static void setCssId(Object control, String id, boolean applyToChildren) {
IStylingEngine engine = (IStylingEngine) UIUtils.getActiveWorkbenchWindow().
getService(IStylingEngine.class);
if (engine != null) {
engine.setId(control, id);
IThemeEngine themeEngine = (IThemeEngine) Display.getDefault().getData(
"org.eclipse.e4.ui.css.swt.theme");
themeEngine.applyStyles(control, applyToChildren);
}
}
So, you can set a given id to some widget (so that you can use specific selectors on the css theme) and ask it to be reskinned...
The only annoying thing is that org.eclipse.e4.ui.css.swt.theme.IThemeEngine is not considered to be an API... when I added that code back in 2013 I'm sure there wasn't a better way, but maybe someone else can provide a better API today?
Cheers,
Fabio