package org.javabuilders.swt.worker;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeSupport;
import org.eclipse.swt.widgets.Display;
/**
* SWT Property change support that fires events on the event dispatching thread only
* @author Jacek Furmankiewicz
*
*/
public class SWTPropertyChangeSupport extends PropertyChangeSupport {
/**
* Serialization
*/
private static final long serialVersionUID = -1913653933006243847L;
private Display display;
/**
* @param sourceBean
*/
public SWTPropertyChangeSupport(Object sourceBean, Display display) {
super(sourceBean);
this.display = display;
}
/* (non-Javadoc)
* @see java.beans.PropertyChangeSupport#firePropertyChange(java.beans.PropertyChangeEvent)
*/
@Override
public void firePropertyChange(final PropertyChangeEvent evt) {
if (Thread.currentThread().equals(this.display.getThread())) {
//already on EDT thread
super.firePropertyChange(evt);
} else {
Runnable doFirePropertyChange = new Runnable() {
public void run() {
firePropertyChange(evt);
}
};
//fire on EDT thread
this.display.asyncExec(doFirePropertyChange);
}
}
}