aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/ui/Window.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/itmill/toolkit/ui/Window.java')
-rw-r--r--src/com/itmill/toolkit/ui/Window.java47
1 files changed, 45 insertions, 2 deletions
diff --git a/src/com/itmill/toolkit/ui/Window.java b/src/com/itmill/toolkit/ui/Window.java
index 5a3f09a163..215a0c3d56 100644
--- a/src/com/itmill/toolkit/ui/Window.java
+++ b/src/com/itmill/toolkit/ui/Window.java
@@ -39,6 +39,7 @@ import com.itmill.toolkit.terminal.Terminal;
import com.itmill.toolkit.terminal.URIHandler;
import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
@@ -674,9 +675,8 @@ public class Window extends Panel implements URIHandler, ParameterHandler {
// Closing
Boolean close = (Boolean) variables.get("close");
if (close != null && close.booleanValue()) {
-
- // TODO We should also throw an event to listeners
this.setVisible(false);
+ fireClose();
}
}
@@ -767,4 +767,47 @@ public class Window extends Panel implements URIHandler, ParameterHandler {
public void setPositionY(int positionY) {
this.positionY = positionY;
}
+
+ private static final Method WINDOW_CLOSE_METHOD;
+ static {
+ try {
+ WINDOW_CLOSE_METHOD =
+ CloseListener.class.getDeclaredMethod(
+ "windowClose",
+ new Class[] { CloseEvent.class });
+ } catch (java.lang.NoSuchMethodException e) {
+ // This should never happen
+ throw new java.lang.RuntimeException();
+ }
+ }
+
+
+ public class CloseEvent extends Component.Event {
+ /**
+ * Serial generated by eclipse.
+ */
+ private static final long serialVersionUID = -7235770057344367327L;
+ public CloseEvent(Component source) {
+ super(source);
+ }
+ public Window getWindow() {
+ return (Window) getSource();
+ }
+ }
+
+ public interface CloseListener {
+ public void windowClose(CloseEvent e);
+ }
+
+ public void addListener(CloseListener listener) {
+ addListener(CloseEvent.class, listener, WINDOW_CLOSE_METHOD);
+ }
+
+ public void removeListener(CloseListener listener) {
+ addListener(CloseEvent.class, listener, WINDOW_CLOSE_METHOD);
+ }
+
+ protected void fireClose() {
+ fireEvent(new Window.CloseEvent(this));
+ }
}