1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-03 07:05:24 +02:00

[243263] Use WorkbenchListener for unregistering WindowListener properly

This commit is contained in:
Martin Oberhuber 2008-08-27 20:51:24 +00:00
parent 5de65b0325
commit 76511fb65c

View file

@ -42,6 +42,7 @@ import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWindowListener;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchListener;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;
@ -68,6 +69,7 @@ public abstract class SystemBasePlugin extends AbstractUIPlugin
private static volatile IWorkbenchWindow activeWindow = null;
private static volatile IWorkbenchWindow previousActiveWindow = null;
private static IWindowListener windowListener = null;
private static IWorkbenchListener workbenchListener = null;
// instance variables
private Hashtable imageDescriptorRegistry = null;
@ -183,6 +185,22 @@ public abstract class SystemBasePlugin extends AbstractUIPlugin
}
}
private static class WorkbenchListener implements IWorkbenchListener {
public boolean preShutdown(IWorkbench workbench, boolean forced) {
return true;
}
public void postShutdown(IWorkbench workbench) {
synchronized (WindowListener.class) {
assert windowListener != null;
workbench.removeWindowListener(windowListener);
workbench.removeWorkbenchListener(workbenchListener);
workbenchListener = null;
windowListener = null;
}
}
}
private static void addWindowListener() {
synchronized (WindowListener.class) {
if (windowListener == null) {
@ -190,6 +208,8 @@ public abstract class SystemBasePlugin extends AbstractUIPlugin
IWorkbench wb = PlatformUI.getWorkbench();
windowListener = new WindowListener();
wb.addWindowListener(windowListener);
workbenchListener = new WorkbenchListener();
wb.addWorkbenchListener(workbenchListener);
} catch (IllegalStateException e) {
/* will try again later when workbench becomes available */
System.out.println("Workbench not yet available"); //$NON-NLS-1$
@ -198,19 +218,6 @@ public abstract class SystemBasePlugin extends AbstractUIPlugin
}
}
private static void removeWindowListener() {
synchronized (WindowListener.class) {
if (windowListener != null) {
try {
IWorkbench wb = PlatformUI.getWorkbench();
wb.removeWindowListener(windowListener);
} finally {
windowListener = null;
}
}
}
}
/**
* Returns the workspace root.
* @return the workspace root.
@ -619,7 +626,6 @@ public abstract class SystemBasePlugin extends AbstractUIPlugin
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
removeWindowListener();
logDebugMessage(this.getClass().getName(), "SHUTDOWN"); //$NON-NLS-1$
LoggerFactory.freeLogger(this);
super.stop(context);