summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
diff options
context:
space:
mode:
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.java39
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.