aboutsummaryrefslogtreecommitdiff
path: root/src/windows/classes/sun/awt/windows/WChoicePeer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows/classes/sun/awt/windows/WChoicePeer.java')
-rw-r--r--src/windows/classes/sun/awt/windows/WChoicePeer.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/windows/classes/sun/awt/windows/WChoicePeer.java b/src/windows/classes/sun/awt/windows/WChoicePeer.java
index 20ab610ff..b72e6f741 100644
--- a/src/windows/classes/sun/awt/windows/WChoicePeer.java
+++ b/src/windows/classes/sun/awt/windows/WChoicePeer.java
@@ -27,6 +27,10 @@ package sun.awt.windows;
import java.awt.*;
import java.awt.peer.*;
import java.awt.event.ItemEvent;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.awt.event.WindowAdapter;
+import sun.awt.SunToolkit;
class WChoicePeer extends WComponentPeer implements ChoicePeer {
@@ -70,6 +74,8 @@ class WChoicePeer extends WComponentPeer implements ChoicePeer {
public synchronized native void reshape(int x, int y, int width, int height);
+ private WindowListener windowListener;
+
// Toolkit & peer internals
WChoicePeer(Choice target) {
@@ -91,9 +97,38 @@ class WChoicePeer extends WComponentPeer implements ChoicePeer {
select(opt.getSelectedIndex());
}
}
+
+ Window parentWindow = SunToolkit.getContainingWindow((Component)target);
+ if (parentWindow != null) {
+ WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+ if (wpeer != null) {
+ windowListener = new WindowAdapter() {
+ public void windowIconified(WindowEvent e) {
+ closeList();
+ }
+ public void windowClosing(WindowEvent e) {
+ closeList();
+ }
+ };
+ wpeer.addWindowListener(windowListener);
+ }
+ }
super.initialize();
}
+ protected void disposeImpl() {
+ // TODO: we should somehow reset the listener when the choice
+ // is moved to another toplevel without destroying its peer.
+ Window parentWindow = SunToolkit.getContainingWindow((Component)target);
+ if (parentWindow != null) {
+ WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+ if (wpeer != null) {
+ wpeer.removeWindowListener(windowListener);
+ }
+ }
+ super.disposeImpl();
+ }
+
// native callbacks
void handleAction(final int index) {
@@ -121,4 +156,5 @@ class WChoicePeer extends WComponentPeer implements ChoicePeer {
return getMinimumSize();
}
+ native void closeList();
}