| Summary: | Main toolbar not visible when Welcome closed via close box | ||
|---|---|---|---|
| Product: | [Eclipse Project] Platform | Reporter: | Markus Keller <markus.kell.r> |
| Component: | UI | Assignee: | Platform UI Triaged <platform-ui-triaged> |
| Status: | VERIFIED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | bsd, daniel_megert, emoffatt, pwebster |
| Version: | 4.2 | ||
| Target Milestone: | 4.2.1 | ||
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | |||
| Bug Depends on: | |||
| Bug Blocks: | 387197 | ||
|
Description
Markus Keller
Was OK in I20120806-2000 (toolbar was not hidden before bug 378835 comment 6). The problem is that the intro part restores the toolbars as part of its dispose, which is called as a result of PartRenderingEngine#removeGui(). Showing the toolbar calls into PartRenderingEngine#createGui() which exits removeRoot != null. Daemon Thread [Thread-1] (Suspended) PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 534 PartRenderingEngine$6.run() line: 518 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement, Object, IEclipseContext) line: 503 WorkbenchWindow.updateLayoutDataForContents() line: 2394 WorkbenchWindow.setCoolBarVisible(boolean) line: 2101 ViewIntroAdapterPart.setBarVisibility(boolean) line: 253 ViewIntroAdapterPart.dispose() line: 156 CompatibilityView(CompatibilityPart).invalidate() line: 209 CompatibilityView(CompatibilityPart).destroy() line: 374 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 MethodRequestor.execute() line: 56 InjectorImpl.processAnnotated(Class<Annotation>, Object, Class<?>, PrimaryObjectSupplier, PrimaryObjectSupplier, ArrayList<Class<?>>) line: 859 InjectorImpl.processAnnotated(Class<Annotation>, Object, Class<?>, PrimaryObjectSupplier, PrimaryObjectSupplier, ArrayList<Class<?>>) line: 839 InjectorImpl.uninject(Object, PrimaryObjectSupplier) line: 170 FieldRequestor(Requestor).uninject(Object, PrimaryObjectSupplier) line: 137 ContextObjectSupplier$ContextInjectionListener.update(IEclipseContext, int, Object[]) line: 82 TrackableComputationExt.update(ContextChangeEvent) line: 107 EclipseContext.removeListenersTo(Object) line: 449 ContextInjectionFactory.uninject(Object, IEclipseContext) line: 143 PartRenderingEngine.safeRemoveGui(MUIElement) line: 856 PartRenderingEngine.access$3(PartRenderingEngine, MUIElement) line: 775 PartRenderingEngine$8.run() line: 770 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.removeGui(MUIElement) line: 755 ElementReferenceRenderer.disposeWidget(MUIElement) line: 122 PartRenderingEngine.safeRemoveGui(MUIElement) line: 847 PartRenderingEngine.access$3(PartRenderingEngine, MUIElement) line: 775 PartRenderingEngine$8.run() line: 770 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.removeGui(MUIElement) line: 755 PartRenderingEngine$1.handleEvent(Event) line: 144 UIEventHandler$1.run() line: 41 UISynchronizer(Synchronizer).syncExec(Runnable) line: 180 UISynchronizer.syncExec(Runnable) line: 150 Display.syncExec(Runnable) line: 4605 E4Application$1.syncExec(Runnable) line: 187 UIEventHandler.handleEvent(Event) line: 38 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, EventDispatcher, int, Object) line: 230 ListenerQueue.dispatchEventSynchronous(int, Object) line: 148 EventAdminImpl.dispatchEvent(Event, boolean) line: 135 EventAdminImpl.sendEvent(Event) line: 78 EventComponent.sendEvent(Event) line: 39 EventBroker.send(String, Object) line: 81 UIEventPublisher.notifyChanged(Notification) line: 58 PlaceholderImpl(BasicNotifierImpl).eNotify(Notification) line: 374 PlaceholderImpl(UIElementImpl).setToBeRendered(boolean) line: 290 PartServiceImpl.hidePart(MPart, boolean) line: 1094 PartServiceImpl.hidePart(MPart) line: 1029 StackRenderer.closePart(Widget, boolean) line: 1087 StackRenderer.access$9(StackRenderer, Widget, boolean) line: 1069 StackRenderer$10.close(CTabFolderEvent) line: 952 CTabFolder.onMouse(Event) line: 1810 CTabFolder$1.handleEvent(Event) line: 275 EventTable.sendEvent(Event) line: 84 Display.sendEvent(EventTable, Event) line: 4134 CTabFolder(Widget).sendEvent(Event) line: 1458 CTabFolder(Widget).sendEvent(int, Event, boolean) line: 1481 CTabFolder(Widget).sendEvent(int, Event) line: 1466 CTabFolder(Widget).notifyListeners(int, Event) line: 1271 Display.runDeferredEvents() line: 3980 Display.readAndDispatch() line: 3619 PartRenderingEngine$9.run() line: 1029 Realm.runWithDefault(Realm, Runnable) line: 332 PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 923 E4Workbench.createAndRunUI(MApplicationElement) line: 86 Workbench$5.run() line: 592 Realm.runWithDefault(Realm, Runnable) line: 332 Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 547 PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 IDEApplication.start(IApplicationContext) line: 124 EclipseAppHandle.run(Object) line: 196 EclipseAppLauncher.runApplication(Object) line: 110 EclipseAppLauncher.start(Object) line: 79 EclipseStarter.run(Object) line: 353 EclipseStarter.run(String[], Runnable) line: 180 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Main.invokeFramework(String[], URL[]) line: 629 Main.basicRun(String[]) line: 584 Main.run(String[]) line: 1438 Main.main(String[]) line: 1414 Rather than toggle toBeRendered, we now toggle the visibility of the trim area. This found a bug in the TrimmedPartLayout (bug 387140). This revealed a different problem where the trim is actually shown when restoring from a saved-state with the trim hidden. The issue is that WBWRenderer#processContents() uses the three-argument variant of PartRenderingEngine#createGui() which does not reparent the non-visible trim to the limbo shell. Eric's suggestion to change WBWRenderer#processContents() to provide the limbo shell when a trimbar's visible=false unfortunately fails and the trim can never be restored by toggling visible alone. Toggling the trim's visibility within WBWRenderer#processContents() does work however. I've committed this workaround (commit 72b0ef42f7222d12f6a096231ea0cfc0a6c15ff6) and opened bug 387161 to remind us to fix the underlying issue. In testing, I also discovered that QuickAccessHandler depended on side-effects of the trim area being toggled through toBeRendered. And also that it was possible for the Hide/Show Toolbar command to get out of sync with the menu state. Fixed separately as commit a6224173af1e8b15706d80e75516898a52b90a0f. Verified in M20120822-1200. |