diff options
Diffstat (limited to 'src/com/itmill/toolkit/ui/Window.java')
-rw-r--r-- | src/com/itmill/toolkit/ui/Window.java | 47 |
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)); + } } |