diff options
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java index 11b02f58..70270ff0 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java @@ -1,6 +1,8 @@ package org.openslx.dozmod.gui; import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; import java.awt.KeyEventDispatcher; import java.awt.KeyboardFocusManager; import java.awt.Window; @@ -50,6 +52,7 @@ import org.openslx.dozmod.gui.helper.CompositePage; import org.openslx.dozmod.gui.helper.DebugWindow; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.gui.helper.MessageType; +import org.openslx.dozmod.gui.helper.QuitNotification; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.CheckUpdateWindow; import org.openslx.dozmod.gui.window.ConfigWindow; @@ -65,9 +68,9 @@ import org.openslx.dozmod.thrift.GuiErrorCallback; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.ThriftActions; import org.openslx.dozmod.util.ClientVersion; -import org.openslx.dozmod.util.FormatHelper; import org.openslx.dozmod.util.DesktopEnvironment; import org.openslx.dozmod.util.DesktopEnvironment.Link; +import org.openslx.dozmod.util.FormatHelper; import org.openslx.thrifthelper.ThriftManager; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; @@ -303,30 +306,52 @@ public abstract class MainWindow { * confirmation. */ protected static void askApplicationQuit() { - boolean open = false; + boolean keepOpen = false; for (ActivityPanel activity : activities) { if (activity.wantConfirmQuit()) { - open = true; + keepOpen = true; break; } } - if (!open) { - Window[] windows = Window.getWindows(); + Window[] windows = null; + if (!keepOpen) { + windows = Window.getWindows(); for (Window window : windows) { if (window.isVisible() && window instanceof UiFeedback && ((UiFeedback) window).wantConfirmQuit()) { - open = true; + keepOpen = true; break; } } } - if (!open + if (!keepOpen || Gui.showMessageBox(mainWindow, "Möchten Sie das Programm wirklich beenden?", MessageType.QUESTION_YESNO, null, null)) { + if (windows == null) { + windows = Window.getWindows(); + } + for (Window window : windows) { + sendQuitEvent(window); + } Gui.exit(0); } isQuitQuestionOpen = false; } + + private static void sendQuitEvent(Container c) { + if (c instanceof QuitNotification) { + ((QuitNotification) c).onApplicationQuit(); + } + Component[] components; + synchronized (c.getTreeLock()) { + components = c.getComponents(); + } + for (Component component : components) { + if (component instanceof Container) { + sendQuitEvent((Container) component); + } + } + } /** * Register a page that can be displayed in the main window. |