Skip to content

Commit 9e7f21f

Browse files
trancexpressfedejeanne
authored andcommitted
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 1be8c2c commit 9e7f21f

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)