Skip to content

Commit 3bad3ed

Browse files
committed
Prevent shutdown hang when changing theme and disabling theming
When changing the current theme via the Appearance preference page, and disabling theming, two calls to IWorkbench.restart() are triggered during ViewsPreferencePage.performOk(). This results in a hang at shutdown, during the second restart call. This change ensures only one restart is triggered, preventing the hang. Fixes: #2950 Signed-off-by: Simeon Andreev <[email protected]>
1 parent ef61869 commit 3bad3ed

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,10 @@ public boolean performOk() {
381381
WorkbenchPlugin.log("Failed to set SWT renderer preferences", e); //$NON-NLS-1$
382382
}
383383

384+
boolean showRestartDialog = false;
385+
String restartDialogTitle = null;
386+
String restartDialogMessage = null;
387+
384388
if (engine != null) {
385389
ITheme theme = getSelectedTheme();
386390
boolean themeChanged = theme != null && !theme.equals(currentTheme);
@@ -400,15 +404,24 @@ public boolean performOk() {
400404
colorFontsDecorator.hide();
401405

402406
if (themeChanged || colorsAndFontsThemeChanged) {
403-
showRestartDialog(WorkbenchMessages.ThemeChangeWarningTitle, WorkbenchMessages.ThemeChangeWarningText);
407+
showRestartDialog = true;
408+
restartDialogTitle = WorkbenchMessages.ThemeChangeWarningTitle;
409+
restartDialogMessage = WorkbenchMessages.ThemeChangeWarningText;
404410
}
405411
}
406412
if (themingEnabledChanged) {
407-
showRestartDialog(WorkbenchMessages.ThemeChangeWarningTitle, WorkbenchMessages.ThemeChangeWarningText);
413+
showRestartDialog = true;
414+
restartDialogTitle = WorkbenchMessages.ThemeChangeWarningTitle;
415+
restartDialogMessage = WorkbenchMessages.ThemeChangeWarningText;
408416
}
409417
if (isRescaleAtRuntimeChanged) {
410-
showRestartDialog(WorkbenchMessages.RescaleAtRuntimeSettingChangeWarningTitle,
411-
WorkbenchMessages.RescaleAtRuntimeSettingChangeWarningText);
418+
showRestartDialog = true;
419+
restartDialogTitle = WorkbenchMessages.RescaleAtRuntimeSettingChangeWarningTitle;
420+
restartDialogMessage = WorkbenchMessages.RescaleAtRuntimeSettingChangeWarningText;
421+
}
422+
423+
if (showRestartDialog) {
424+
showRestartDialog(restartDialogTitle, restartDialogMessage);
412425
}
413426

414427
return super.performOk();

0 commit comments

Comments
 (0)