Bug 324730 CleanupAddon causes parts to be unrendered while performing DND operations
1. Move the 'Package Explorer' to the right below the 'Outline' view so it spawns a new stack. 2. Now drag it and move it to the same stack as the 'Outline'. 3. It will get disposed although it may not be obvious from looking at the part. Thread [main] (Suspended (breakpoint at line 488 in PartImpl)) PartImpl.setWidget(Object) line: 488 ContributedPartRenderer(SWTPartRenderer).unbindWidget(MUIElement) line: 112 ContributedPartRenderer(SWTPartRenderer).disposeWidget(MUIElement) line: 131 PartRenderingEngine.removeGui(MUIElement) line: 532 ElementReferenceRenderer.disposeWidget(MUIElement) line: 108 PartRenderingEngine.removeGui(MUIElement) line: 532 PartRenderingEngine.removeGui(MUIElement) line: 528 PartRenderingEngine.removeGui(MUIElement) line: 528 PartRenderingEngine$1.handleEvent(Event) line: 128 UIEventHandler.handleEvent(Event) line: 41 EventHandlerWrapper.handleEvent(Event, Permission) line: 188 EventHandlerTracker.dispatchEvent(Object, Object, int, Object) line: 198 EventManager.dispatchEvent(Set, EventDispatcher, int, Object) line: 227 ListenerQueue.dispatchEventSynchronous(int, Object) line: 149 EventAdminImpl.dispatchEvent(Event, boolean) line: 139 EventAdminImpl.sendEvent(Event) line: 78 EventComponent.sendEvent(Event) line: 39 EventBroker.send(String, Object) line: 73 UIEventPublisher.notifyChanged(Notification) line: 58 PartSashContainerImpl(BasicNotifierImpl).eNotify(Notification) line: 380 PartSashContainerImpl(UIElementImpl).setToBeRendered(boolean) line: 267 CleanupAddon$1$1.run() line: 108 RunnableLock.run() line: 35 UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 134
bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/cleanupaddon/CleanupAddon.java
container.setToBeRendered(false);
									parent.getChildren().remove(container);
								} else if (container instanceof MWindow) {
									
									MUIElement eParent = (MUIElement) ((EObjectImpl) container)
											.eContainer();
									if (eParent instanceof MPerspective) {
										((MPerspective) eParent).getWindows().remove(container);
									} else if (eParent instanceof MWindow) {
										((MWindow) eParent).getWindows().remove(container);
									}
								}
							} else if (container.getChildren().size() == 1
									&& container instanceof MPartSashContainer) {
								
								
								MUIElement theChild = container.getChildren().get(0);
								MElementContainer<MUIElement> parentContainer = container
										.getParent();
								if (parentContainer != null) {
									int index = parentContainer.getChildren().indexOf(container);
									theChild.setContainerData(container.getContainerData());
									container.setToBeRendered(false);
									parentContainer.getChildren().remove(container);
									container.getChildren().remove(theChild);
									parentContainer.getChildren().add(index, theChild);
								}
							}
						}
					});