Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 330803

Summary: SWTException from tool item dropdowns after closing/reopening perspectives
Product: [Eclipse Project] e4 Reporter: Remy Suen <remy.suen>
Component: UIAssignee: Remy Suen <remy.suen>
Status: VERIFIED FIXED QA Contact: Paul Webster <pwebster>
Severity: major    
Priority: P3 CC: Olivier_Thomann
Version: 1.0   
Target Milestone: 4.1 M4   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
ToolItemRenderer patch v1 none

Description Remy Suen CLA 2010-11-22 09:36:16 EST
1. Click the 'Run' tool item's dropdown arrow.
2. Window > Close Perspective
3. Window > Open Perspective > Other... > Java
4. Repeat step 1.

org.eclipse.swt.SWTException: Widget is disposed
	at org.eclipse.swt.SWT.error(SWT.java:4091)
	at org.eclipse.swt.SWT.error(SWT.java:4006)
	at org.eclipse.swt.SWT.error(SWT.java:3977)
	at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
	at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
	at org.eclipse.swt.widgets.Menu.setLocation(Menu.java:1427)
	at org.eclipse.e4.ui.workbench.renderers.swt.ToolItemRenderer$5.widgetSelected(ToolItemRenderer.java:315)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4084)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3675)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$6.run(PartRenderingEngine.java:780)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:696)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:91)
Comment 1 Remy Suen CLA 2010-11-22 09:38:12 EST
This is where we dispose the menu.

Thread [main] (Suspended (breakpoint at line 1130 in Menu))	
	Menu.releaseHandle() line: 1130	
	Menu.destroyWidget() line: 599	
	Menu(Widget).release(boolean) line: 818	
	Menu(Widget).dispose() line: 446	
	RunToolbarAction(AbstractLaunchHistoryAction).setMenu(Menu) line: 323	
	RunToolbarAction(AbstractLaunchHistoryAction).dispose() line: 260	
	ActionDelegateHandlerProxy.disposeDelegate() line: 250	
	ActionDelegateHandlerProxy.dispose() line: 240	
	MenuHelper$3$1.dispose() line: 558	
	ToolItemRenderer$9.widgetDisposed(DisposeEvent) line: 452	
	TypedListener.handleEvent(Event) line: 123	
	EventTable.sendEvent(Event) line: 84	
	ToolItem(Widget).sendEvent(Event) line: 1053	
	ToolItem(Widget).sendEvent(int, Event, boolean) line: 1077	
	ToolItem(Widget).sendEvent(int) line: 1058	
	ToolItem(Widget).release(boolean) line: 808	
	ToolItem(Widget).dispose() line: 446	
	ToolBarRenderer.hideChild(MElementContainer<MUIElement>, MUIElement) line: 138	
	PartRenderingEngine.safeRemoveGui(MUIElement) line: 603	
	PartRenderingEngine.access$1(PartRenderingEngine, MUIElement) line: 592	
	PartRenderingEngine$5.run() line: 587	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.removeGui(MUIElement) line: 573	
	PartRenderingEngine$1.handleEvent(Event) line: 133	
	UIEventHandler.handleEvent(Event) line: 41	
	EventHandlerWrapper.handleEvent(Event, Permission) line: 197	
	EventHandlerTracker.dispatchEvent(EventHandlerWrapper, Permission, int, Event) line: 197	
	EventHandlerTracker.dispatchEvent(Object, Object, int, Object) line: 1	
	EventManager.dispatchEvent(Set<Entry<K,V>>, EventDispatcher<K,V,E>, int, E) line: 230	
	ListenerQueue<K,V,E>.dispatchEventSynchronous(int, E) line: 148	
	EventAdminImpl.dispatchEvent(Event, boolean) line: 135	
	EventAdminImpl.sendEvent(Event) line: 78	
	EventComponent.sendEvent(Event) line: 39	
	EventBroker.send(String, Object) line: 73	
	UIEventPublisher.notifyChanged(Notification) line: 58	
	HandledToolItemImpl(BasicNotifierImpl).eNotify(Notification) line: 380	
	HandledToolItemImpl(UIElementImpl).setToBeRendered(boolean) line: 288	
	ToolBarRenderer$2.changed(IEclipseContext) line: 240	
	TrackableComputationExt.update(ContextChangeEvent) line: 91	
	EclipseContext.processScheduled(List<Scheduled>) line: 326	
	EclipseContext.set(String, Object) line: 343	
	ContextContextService.deactivateContext(String) line: 72	
	WorkbenchPage$2.handleEvent(Event) line: 2032	
	UIEventHandler.handleEvent(Event) line: 41	
	EventHandlerWrapper.handleEvent(Event, Permission) line: 197	
	EventHandlerTracker.dispatchEvent(EventHandlerWrapper, Permission, int, Event) line: 197	
	EventHandlerTracker.dispatchEvent(Object, Object, int, Object) line: 1	
	EventManager.dispatchEvent(Set<Entry<K,V>>, EventDispatcher<K,V,E>, int, E) line: 230	
	ListenerQueue<K,V,E>.dispatchEventSynchronous(int, E) line: 148	
	EventAdminImpl.dispatchEvent(Event, boolean) line: 135	
	EventAdminImpl.sendEvent(Event) line: 78	
	EventComponent.sendEvent(Event) line: 39	
	EventBroker.send(String, Object) line: 73	
	UIEventPublisher.notifyChanged(Notification) line: 58	
	PerspectiveStackImpl(BasicNotifierImpl).eNotify(Notification) line: 380	
	PerspectiveStackImpl.setSelectedElement(MPerspective) line: 144	
	PerspectiveStackImpl.setSelectedElement(MUIElement) line: 1	
	ModelServiceImpl.removePerspectiveModel(MPerspective, MWindow) line: 656	
	WorkbenchPage.close(boolean, boolean) line: 1228	
	WorkbenchPage.closeAllPerspectives(boolean, boolean) line: 1209	
	WorkbenchPage.closePerspective(IPerspectiveDescriptor, String, boolean, boolean) line: 1196	
	WorkbenchPage.closePerspective(IPerspectiveDescriptor, boolean, boolean) line: 1185	
	ClosePerspectiveHandler.execute(ExecutionEvent) line: 39
Comment 2 Remy Suen CLA 2010-11-22 09:42:25 EST
This is the 3.x trace. So calling dispose() seems appropriate in this context.

Thread [main] (Suspended (breakpoint at line 260 in AbstractLaunchHistoryAction))	
	RunHistoryMenuAction(AbstractLaunchHistoryAction).dispose() line: 260	
	WWinPluginPulldown(PluginAction).disposeDelegate() line: 354	
	WWinPluginPulldown(PluginAction).dispose() line: 368	
	WWinPluginPulldown(WWinPluginAction).dispose() line: 203	
	PluginActionSet.dispose() line: 75	
	ActionPresentation.removeActionSet(IActionSetDescriptor) line: 88	
	ActionPresentation.clearActionSets() line: 69	
	WorkbenchWindow.updateActionSets() line: 3257	
	WorkbenchWindow$27.run() line: 3014	
	BusyIndicator.showWhile(Display, Runnable) line: 70	
	WorkbenchWindow.setActivePage(IWorkbenchPage) line: 2975	
	WorkbenchWindow.closePage(IWorkbenchPage, boolean) line: 898	
	WorkbenchPage$4.run() line: 1155	
	BusyIndicator.showWhile(Display, Runnable) line: 70	
	WorkbenchPage.close() line: 1153	
	WorkbenchPage.closePerspective(Perspective, Perspective, boolean, boolean) line: 1589	
	WorkbenchPage.closePerspective(Perspective, boolean, boolean) line: 1504	
	WorkbenchPage.closePerspective(IPerspectiveDescriptor, boolean, boolean) line: 1459	
	ClosePerspectiveHandler.execute(ExecutionEvent) line: 40
Comment 3 Remy Suen CLA 2010-11-22 09:47:12 EST
1. Click the 'Run' tool item's dropdown arrow.
2. Window > Open Perspective > Other... > CVS Repository Exploring
3. Window > Open Perspective > Other... > Java
4. Repeat step 1. Same thing.
Comment 4 Remy Suen CLA 2010-11-22 09:59:06 EST
Created attachment 183570 [details]
ToolItemRenderer patch v1
Comment 5 Remy Suen CLA 2010-11-22 10:12:38 EST
(In reply to comment #4)
> Created an attachment (id=183570) [details]
> ToolItemRenderer patch v1

Patch released to CVS HEAD.
Comment 6 Remy Suen CLA 2010-11-25 12:06:43 EST
*** Bug 331136 has been marked as a duplicate of this bug. ***
Comment 7 Remy Suen CLA 2010-12-07 13:18:24 EST
Verified with I20101207-0250 on Windows XP.