29package com.jogamp.nativewindow.awt;
31import java.awt.Component;
32import java.awt.Window;
33import java.awt.event.WindowAdapter;
34import java.awt.event.WindowEvent;
35import java.awt.event.WindowListener;
37import com.jogamp.nativewindow.WindowClosingProtocol;
39import jogamp.nativewindow.awt.AWTMisc;
43 private final Component comp;
44 private Window listenTo;
45 private final Runnable closingOperationClose;
46 private final Runnable closingOperationNOP;
47 private final Object closingListenerLock =
new Object();
49 private boolean defaultCloseOperationSetByUser =
false;
56 public AWTWindowClosingProtocol(
final Component comp,
final Runnable closingOperationClose,
final Runnable closingOperationNOP) {
59 this.closingOperationClose = closingOperationClose;
60 this.closingOperationNOP = closingOperationNOP;
63 class WindowClosingAdapter
extends WindowAdapter {
65 public void windowClosing(
final WindowEvent e) {
68 if( WindowClosingMode.DISPOSE_ON_CLOSE == op ) {
71 closingOperationClose.run();
72 }
else if(
null != closingOperationNOP ){
73 closingOperationNOP.run();
77 WindowListener windowClosingAdapter =
new WindowClosingAdapter();
89 synchronized(closingListenerLock) {
90 if(
null != listenTo) {
91 throw new IllegalStateException(
"WindowClosingListener already set");
93 listenTo = AWTMisc.getWindow(comp);
95 listenTo.addWindowListener(windowClosingAdapter);
103 synchronized(closingListenerLock) {
104 if(
null != listenTo) {
105 listenTo.removeWindowListener(windowClosingAdapter);
121 synchronized(closingListenerLock) {
122 if(defaultCloseOperationSetByUser) {
123 return defaultCloseOperation;
127 return AWTMisc.getNWClosingOperation(comp);
132 synchronized(closingListenerLock) {
134 defaultCloseOperation = op;
135 defaultCloseOperationSetByUser =
true;
AWTWindowClosingProtocol(final Component comp, final Runnable closingOperationClose, final Runnable closingOperationNOP)
final WindowClosingMode setDefaultCloseOperation(final WindowClosingMode op)
final WindowClosingMode getDefaultCloseOperation()
final boolean removeClosingListener()
final boolean addClosingListener()
Adds this closing listener to the components Window if exist and only one time.
Window closing mode if triggered by toolkit close operation.
DISPOSE_ON_CLOSE
Dispose resources on native window close operation.
Protocol for handling window closing events.