@Override protected void handleWidgetDispose(Event event) { if (event.widget == widget) { if (unreferenceRunnable != null) { unreferenceRunnable.run(); unreferenceRunnable = null; } unhookCheckListener(); ToolItemUpdater updater = getUpdater(); if (updater != null) { updater.removeItem(this); } if (infoContext != null) { infoContext.dispose(); infoContext = null; } widget.removeListener(SWT.Selection, getItemListener()); widget.removeListener(SWT.Dispose, getItemListener()); widget.removeListener(SWT.DefaultSelection, getItemListener()); widget.removeListener(SWT.Help, getItemListener()); widget = null; getModel().setWidget(null); disposeOldImages(); } }