mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-09 18:56:02 +02:00
[172492] patch from Uwe to make tree viewer safe
This commit is contained in:
parent
461e061e8f
commit
fa408d21d5
3 changed files with 153 additions and 4 deletions
|
@ -51,7 +51,6 @@ import org.eclipse.jface.viewers.ITreeViewerListener;
|
|||
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
import org.eclipse.jface.viewers.TreeExpansionEvent;
|
||||
import org.eclipse.jface.viewers.TreeViewer;
|
||||
import org.eclipse.jface.viewers.ViewerFilter;
|
||||
import org.eclipse.jface.window.SameShellProvider;
|
||||
import org.eclipse.rse.core.SystemAdapterHelpers;
|
||||
|
@ -149,7 +148,7 @@ import org.eclipse.ui.views.framelist.GoIntoAction;
|
|||
/*
|
||||
* At one time implemented the following as well: MenuListener, IDoubleClickListener, ArmListener, IWireEventTarget
|
||||
*/
|
||||
public class SystemView extends TreeViewer implements ISystemTree, ISystemResourceChangeListener, ISystemRemoteChangeListener, IMenuListener,
|
||||
public class SystemView extends SystemViewSafeTreeViewer implements ISystemTree, ISystemResourceChangeListener, ISystemRemoteChangeListener, IMenuListener,
|
||||
ISelectionChangedListener, ISelectionProvider, ITreeViewerListener, ISystemResourceChangeEvents, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelectAllTarget
|
||||
{
|
||||
|
||||
|
|
|
@ -51,7 +51,6 @@ import org.eclipse.jface.viewers.ITreeViewerListener;
|
|||
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
import org.eclipse.jface.viewers.TreeExpansionEvent;
|
||||
import org.eclipse.jface.viewers.TreeViewer;
|
||||
import org.eclipse.jface.viewers.ViewerFilter;
|
||||
import org.eclipse.jface.window.SameShellProvider;
|
||||
import org.eclipse.rse.core.SystemAdapterHelpers;
|
||||
|
@ -149,7 +148,7 @@ import org.eclipse.ui.views.framelist.GoIntoAction;
|
|||
/*
|
||||
* At one time implemented the following as well: MenuListener, IDoubleClickListener, ArmListener, IWireEventTarget
|
||||
*/
|
||||
public class SystemView extends TreeViewer implements ISystemTree, ISystemResourceChangeListener, ISystemRemoteChangeListener, IMenuListener,
|
||||
public class SystemView extends SystemViewSafeTreeViewer implements ISystemTree, ISystemResourceChangeListener, ISystemRemoteChangeListener, IMenuListener,
|
||||
ISelectionChangedListener, ISelectionProvider, ITreeViewerListener, ISystemResourceChangeEvents, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelectAllTarget
|
||||
{
|
||||
|
||||
|
|
|
@ -0,0 +1,151 @@
|
|||
/********************************************************************************
|
||||
* Copyright (c) 2007 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Uwe Stieber (Wind River) - initial API and implementation.
|
||||
********************************************************************************/
|
||||
package org.eclipse.rse.ui.view;
|
||||
|
||||
import org.eclipse.jface.viewers.TreeViewer;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Item;
|
||||
import org.eclipse.swt.widgets.Tree;
|
||||
import org.eclipse.swt.widgets.Widget;
|
||||
|
||||
/**
|
||||
* Delayed label provider can trigger tree item updates called in the
|
||||
* viewer after the tree item itself got disposed. This happens especially
|
||||
* if items appear and disappear very fast within the tree which then will
|
||||
* lead to nasty SWT Widget already disposed exceptions.
|
||||
*/
|
||||
public class SystemViewSafeTreeViewer extends TreeViewer {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param parent The parant control.
|
||||
*/
|
||||
public SystemViewSafeTreeViewer(Composite parent) {
|
||||
super(parent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param tree The tree control.
|
||||
*/
|
||||
public SystemViewSafeTreeViewer(Tree tree) {
|
||||
super(tree);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param parent The parent control.
|
||||
* @param style The SWT style bits passed to the tree creation.
|
||||
*/
|
||||
public SystemViewSafeTreeViewer(Composite parent, int style) {
|
||||
super(parent, style);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#doUpdateItem(org.eclipse.swt.widgets.Item, java.lang.Object)
|
||||
*/
|
||||
protected void doUpdateItem(Item item, Object element) {
|
||||
if (item != null && item.isDisposed()) return;
|
||||
super.doUpdateItem(item, element);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.AbstractTreeViewer#doUpdateItem(org.eclipse.swt.widgets.Widget, java.lang.Object, boolean)
|
||||
*/
|
||||
protected void doUpdateItem(Widget widget, Object element, boolean fullMap) {
|
||||
if (widget != null && widget.isDisposed()) return;
|
||||
super.doUpdateItem(widget, element, fullMap);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#getItemCount(org.eclipse.swt.widgets.Control)
|
||||
*/
|
||||
protected int getItemCount(Control widget) {
|
||||
if (widget != null && widget.isDisposed()) return 0;
|
||||
return super.getItemCount(widget);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#getItemCount(org.eclipse.swt.widgets.Item)
|
||||
*/
|
||||
protected int getItemCount(Item item) {
|
||||
if (item != null && item.isDisposed()) return 0;
|
||||
return super.getItemCount(item);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#showItem(org.eclipse.swt.widgets.Item)
|
||||
*/
|
||||
protected void showItem(Item item) {
|
||||
if (item != null && item.isDisposed()) return;
|
||||
super.showItem(item);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#updatePlus(org.eclipse.swt.widgets.Item, java.lang.Object)
|
||||
*/
|
||||
protected void updatePlus(Item item, Object element) {
|
||||
if (item != null && item.isDisposed()) return;
|
||||
super.updatePlus(item, element);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#createChildren(org.eclipse.swt.widgets.Widget)
|
||||
*/
|
||||
protected void createChildren(Widget widget) {
|
||||
if (widget != null && widget.isDisposed()) return;
|
||||
super.createChildren(widget);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#getChild(org.eclipse.swt.widgets.Widget, int)
|
||||
*/
|
||||
protected Item getChild(Widget widget, int index) {
|
||||
if (widget != null && widget.isDisposed()) return null;
|
||||
return super.getChild(widget, index);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#getChildren(org.eclipse.swt.widgets.Widget)
|
||||
*/
|
||||
protected Item[] getChildren(Widget widget) {
|
||||
if (widget != null && widget.isDisposed()) return new Item[0];
|
||||
return super.getChildren(widget);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#getExpanded(org.eclipse.swt.widgets.Item)
|
||||
*/
|
||||
protected boolean getExpanded(Item item) {
|
||||
if (item != null && item.isDisposed()) return false;
|
||||
return super.getExpanded(item);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#getItems(org.eclipse.swt.widgets.Item)
|
||||
*/
|
||||
protected Item[] getItems(Item item) {
|
||||
if (item != null && item.isDisposed()) return new Item[0];
|
||||
return super.getItems(item);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.TreeViewer#getParentItem(org.eclipse.swt.widgets.Item)
|
||||
*/
|
||||
protected Item getParentItem(Item item) {
|
||||
if (item != null && item.isDisposed()) return null;
|
||||
return super.getParentItem(item);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue