diff options
author | Thomas Fitzsimmons <fitzsim@redhat.com> | 2003-10-24 19:40:30 +0000 |
---|---|---|
committer | Thomas Fitzsimmons <fitzsim@gcc.gnu.org> | 2003-10-24 19:40:30 +0000 |
commit | f2d0e05d4ea16b313d4779b1a00311da98ffe178 (patch) | |
tree | cd8f1d68f257446a36e215191eeda195cd3e3c63 /libjava/java | |
parent | 65455962455f9902b21088d73d2b0c30611a4861 (diff) | |
download | gcc-f2d0e05d4ea16b313d4779b1a00311da98ffe178.zip gcc-f2d0e05d4ea16b313d4779b1a00311da98ffe178.tar.gz gcc-f2d0e05d4ea16b313d4779b1a00311da98ffe178.tar.bz2 |
GtkDialogPeer.java (handleEvent): Remove method.
2003-10-24 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkDialogPeer.java (handleEvent):
Remove method.
* gnu/java/awt/peer/gtk/GtkWindowPeer.java (postWindowEvent):
New method.
* java/awt/Window.java (Window(Window,GraphicsConfiguration),
show, hide, dispose, getOwnedWindows): Synchronize on tree lock.
(dispose): Post WINDOW_CLOSED event.
(addWindowFocusListener, addWindowStateListener): Assign result
of multicaster add back to window listener.
(removeWindowFocusListener, removeWindowStateListener): Assign
result of multicaster remove back to window listener.
(dispatchEventImpl): Add null checks for focus and state
listeners.
(processWindowEvent): Handle case where windowListener is null
but state or focus listeners exist.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Add JNI
glue for postWindowEvent.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(window_delete_cb, window_destroy_cb, window_show_cb,
window_focus_in_cb, window_focus_out_cb, window_window_state_cb,
window_get_new_state): New functions.
* jni/gtk-peer/gtkpeer.h: Define window event and frame state
macros. Declare postWindowEventID.
From-SVN: r72906
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/awt/Window.java | 119 |
1 files changed, 68 insertions, 51 deletions
diff --git a/libjava/java/awt/Window.java b/libjava/java/awt/Window.java index ad4aec7..70d452b 100644 --- a/libjava/java/awt/Window.java +++ b/libjava/java/awt/Window.java @@ -144,13 +144,12 @@ public class Window extends Container implements Accessible { this (); - if (owner == null) - throw new IllegalArgumentException ("owner must not be null"); - - parent = owner; - - synchronized (owner.ownedWindows) + synchronized (getTreeLock()) { + if (owner == null) + throw new IllegalArgumentException ("owner must not be null"); + + parent = owner; owner.ownedWindows.add(new WeakReference(this)); } @@ -220,7 +219,7 @@ public class Window extends Container implements Accessible addNotify(); // Show visible owned windows. - synchronized (ownedWindows) + synchronized (getTreeLock()) { Iterator e = ownedWindows.iterator(); while(e.hasNext()) @@ -247,7 +246,7 @@ public class Window extends Container implements Accessible public void hide() { // Hide visible owned windows. - synchronized (ownedWindows) + synchronized (getTreeLock ()) { Iterator e = ownedWindows.iterator(); while(e.hasNext()) @@ -280,7 +279,7 @@ public class Window extends Container implements Accessible { hide(); - synchronized (ownedWindows) + synchronized (getTreeLock ()) { Iterator e = ownedWindows.iterator(); while(e.hasNext()) @@ -292,11 +291,15 @@ public class Window extends Container implements Accessible // Remove null weak reference from ownedWindows. e.remove(); } - } - for (int i = 0; i < ncomponents; ++i) - component[i].removeNotify(); - this.removeNotify(); + for (int i = 0; i < ncomponents; ++i) + component[i].removeNotify(); + this.removeNotify(); + + // Post a WINDOW_CLOSED event. + WindowEvent we = new WindowEvent(this, WindowEvent.WINDOW_CLOSED); + getToolkit().getSystemEventQueue().postEvent(we); + } } /** @@ -386,7 +389,7 @@ public class Window extends Container implements Accessible public Window[] getOwnedWindows() { Window [] trimmedList; - synchronized (ownedWindows) + synchronized (getTreeLock ()) { // Windows with non-null weak references in ownedWindows. Window [] validList = new Window [ownedWindows.size()]; @@ -479,7 +482,7 @@ public class Window extends Container implements Accessible */ public void addWindowFocusListener (WindowFocusListener wfl) { - AWTEventMulticaster.add (windowFocusListener, wfl); + windowFocusListener = AWTEventMulticaster.add (windowFocusListener, wfl); } /** @@ -489,7 +492,7 @@ public class Window extends Container implements Accessible */ public void addWindowStateListener (WindowStateListener wsl) { - AWTEventMulticaster.add (windowStateListener, wsl); + windowStateListener = AWTEventMulticaster.add (windowStateListener, wsl); } /** @@ -497,7 +500,7 @@ public class Window extends Container implements Accessible */ public void removeWindowFocusListener (WindowFocusListener wfl) { - AWTEventMulticaster.remove (windowFocusListener, wfl); + windowFocusListener = AWTEventMulticaster.remove (windowFocusListener, wfl); } /** @@ -507,7 +510,7 @@ public class Window extends Container implements Accessible */ public void removeWindowStateListener (WindowStateListener wsl) { - AWTEventMulticaster.remove (windowStateListener, wsl); + windowStateListener = AWTEventMulticaster.remove (windowStateListener, wsl); } /** @@ -532,7 +535,9 @@ public class Window extends Container implements Accessible // Make use of event id's in order to avoid multiple instanceof tests. if (e.id <= WindowEvent.WINDOW_LAST && e.id >= WindowEvent.WINDOW_FIRST - && (windowListener != null + && (windowListener != null + || windowFocusListener != null + || windowStateListener != null || (eventMask & AWTEvent.WINDOW_EVENT_MASK) != 0)) processEvent(e); else @@ -565,39 +570,51 @@ public class Window extends Container implements Accessible */ protected void processWindowEvent(WindowEvent evt) { - if (windowListener != null) + int id = evt.getID(); + + if (id == WindowEvent.WINDOW_GAINED_FOCUS + || id == WindowEvent.WINDOW_LOST_FOCUS) + processWindowFocusEvent (evt); + else if (id == WindowEvent.WINDOW_STATE_CHANGED) + processWindowStateEvent (evt); + else { - switch (evt.getID()) - { - case WindowEvent.WINDOW_ACTIVATED: - windowListener.windowActivated(evt); - break; - case WindowEvent.WINDOW_CLOSED: - windowListener.windowClosed(evt); - break; - case WindowEvent.WINDOW_CLOSING: - windowListener.windowClosing(evt); - break; - case WindowEvent.WINDOW_DEACTIVATED: - windowListener.windowDeactivated(evt); - break; - case WindowEvent.WINDOW_DEICONIFIED: - windowListener.windowDeiconified(evt); - break; - case WindowEvent.WINDOW_ICONIFIED: - windowListener.windowIconified(evt); - break; - case WindowEvent.WINDOW_OPENED: - windowListener.windowOpened(evt); - break; - case WindowEvent.WINDOW_GAINED_FOCUS: - case WindowEvent.WINDOW_LOST_FOCUS: - processWindowFocusEvent (evt); - break; - case WindowEvent.WINDOW_STATE_CHANGED: - processWindowStateEvent (evt); - break; - } + if (windowListener != null) + { + switch (evt.getID()) + { + case WindowEvent.WINDOW_ACTIVATED: + windowListener.windowActivated(evt); + break; + + case WindowEvent.WINDOW_CLOSED: + windowListener.windowClosed(evt); + break; + + case WindowEvent.WINDOW_CLOSING: + windowListener.windowClosing(evt); + break; + + case WindowEvent.WINDOW_DEACTIVATED: + windowListener.windowDeactivated(evt); + break; + + case WindowEvent.WINDOW_DEICONIFIED: + windowListener.windowDeiconified(evt); + break; + + case WindowEvent.WINDOW_ICONIFIED: + windowListener.windowIconified(evt); + break; + + case WindowEvent.WINDOW_OPENED: + windowListener.windowOpened(evt); + break; + + default: + break; + } + } } } |