Community
Participate
Working Groups
The hidden toolbar state is not persisted. This is probably due to the general trim persistance issues, so if there is a generic bug for that please feel free to mark this as a duplicate.
Hmm, the "Top" MTrimBar is never persisted to the deltas.xml, regardless of other changes made (e.g., tag addition).
Created attachment 209293 [details] First cut at patch There are two issues: 1. WorkbenchWindow#removeTopTrimChildren() removes the top trimbar (with elementId = 'org.eclipse.ui.main.toolbar') from the trimbars collection 2. CoolBarToTrimManager creates a new MTrimBar for the window regardless of whether an appropriate trimbar exists. The attached patch relaxes the above and appears, in preliminary testing, to have the desired effect.
your patch it just a workaround to the fact that the main menu and toolbar are generated by the Workbench in 4.2 and so they can't be saved and restored (without writing some reconciler code to match the saved-out model to the newly generated workbench objects). PW
(In reply to comment #3) > your patch it just a workaround to the fact that the main menu and toolbar are > generated by the Workbench in 4.2 and so they can't be saved and restored > (without writing some reconciler code to match the saved-out model to the newly > generated workbench objects). I don't disagree that the patch is a hack. But it's still an improvement from our current state! Looking at WorkbenchWindow some more, WW does seem to properly manage its contributions to the top trimbar: populateTopTrimContributions() records the elements added to a field 'workbenchTrimElements', which is used by removeTrimContributions() to remove the elements when the window is disposed. From observation within the debugger, the top trim bar contents is correctly clear at the conclusion of removeTrimContributions(). This could imply that the call to clear its children in removeTopTrimChildren() could be unnecessary, though I don't know how/when other elements might be contributed to the trim. (The window's menu on the other hand, is not being managed.) So this patch is really no worse than what was there before, but at least ensures that any settings on the trimbar are correctly persisted.
(In reply to comment #4) > > I don't disagree that the patch is a hack. But it's still an improvement from > our current state! Yes, I agree, and it's worth going forward with it. As Eric works on the Trim DND we would probably have to revisit this issue, as he needs to remember trim order and we delete it at the moment. PW
Patch committed to master. http://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=5bc1cbc5cf850776aaa27017f5de52dcd7503be1
(In reply to comment #6) > Patch committed to master. > > > http://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=5bc1cbc5cf850776aaa27017f5de52dcd7503be1 I'm getting some strange behaviour on Windows 7 with this change set. My inner no longer runs properly after a simple restart (so the deltas.xml file has been generated). Brian says he doesn't see this so it may be something specific to win32. A layout is causing an MPSC to have its widget set to non-null. Because the widget is non-null, the rendering engine skips the element and doesn't render anymore of its children (child part stacks) and leaves the workbench half up (only the left side's 'Package Explorer' part is rendered). Thread [main] (Suspended (breakpoint at line 247 in UIElementImpl)) PartSashContainerImpl(UIElementImpl).setWidget(Object) line: 247 SashLayout.setRectangle(MUIElement, Rectangle) line: 307 SashLayout.tileSubNodes(Rectangle, MUIElement) line: 248 SashLayout.tileSubNodes(Rectangle, MUIElement) line: 291 SashLayout.layout(Composite, boolean) line: 158 Composite.updateLayout(boolean, boolean) line: 1263 Composite.sendResize() line: 980 Composite.setBounds(int, int, int, int, int, boolean) line: 1025 Composite(Control).setBounds(int, int, int, int, int) line: 3085 Composite(Control).setBounds(int, int, int, int) line: 3081 FillLayout.layout(Composite, boolean) line: 201 Composite.updateLayout(boolean, boolean) line: 1263 Composite.WM_SIZE(long, long) line: 1673 Composite(Control).windowProc(long, int, long, long) line: 4603 Display.windowProc(long, long, long, long) line: 4972 OS.DefWindowProcW(long, int, long, long) line: not available [native method] OS.DefWindowProc(long, int, long, long) line: 2540 Composite(Scrollable).callWindowProc(long, int, long, long) line: 80 Composite(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408 Composite(Control).windowProc(long, int, long, long) line: 4616 Display.windowProc(long, long, long, long) line: 4972 OS.SetWindowPos(long, long, int, int, int, int, int) line: not available [native method] Composite(Widget).SetWindowPos(long, long, int, int, int, int, int) line: 1457 Composite(Control).setBounds(int, int, int, int, int, boolean) line: 3124 Composite.setBounds(int, int, int, int, int, boolean) line: 1019 Composite(Control).setBounds(int, int, int, int, int) line: 3085 Composite(Control).setBounds(int, int, int, int) line: 3081 Composite(Control).setBounds(Rectangle) line: 3148 StackLayout.layout(Composite, boolean) line: 120 Composite.updateLayout(boolean, boolean) line: 1263 Composite.WM_SIZE(long, long) line: 1673 Composite(Control).windowProc(long, int, long, long) line: 4603 Display.windowProc(long, long, long, long) line: 4972 OS.DefWindowProcW(long, int, long, long) line: not available [native method] OS.DefWindowProc(long, int, long, long) line: 2540 Composite(Scrollable).callWindowProc(long, int, long, long) line: 80 Composite(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408 Composite(Control).windowProc(long, int, long, long) line: 4616 Display.windowProc(long, long, long, long) line: 4972 OS.SetWindowPos(long, long, int, int, int, int, int) line: not available [native method] Composite(Widget).SetWindowPos(long, long, int, int, int, int, int) line: 1457 Composite(Control).setBounds(int, int, int, int, int, boolean) line: 3124 Composite.setBounds(int, int, int, int, int, boolean) line: 1019 Composite(Control).setBounds(int, int, int, int, int) line: 3085 Composite(Control).setBounds(int, int, int, int) line: 3081 Composite(Control).setBounds(Rectangle) line: 3148 SashLayout.setRectangle(MUIElement, Rectangle) line: 303 SashLayout.tileSubNodes(Rectangle, MUIElement) line: 248 SashLayout.tileSubNodes(Rectangle, MUIElement) line: 291 SashLayout.layout(Composite, boolean) line: 158 Composite.updateLayout(boolean, boolean) line: 1263 Composite.WM_SIZE(long, long) line: 1673 Composite(Control).windowProc(long, int, long, long) line: 4603 Display.windowProc(long, long, long, long) line: 4972 OS.DefWindowProcW(long, int, long, long) line: not available [native method] OS.DefWindowProc(long, int, long, long) line: 2540 Composite(Scrollable).callWindowProc(long, int, long, long) line: 80 Composite(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408 Composite(Control).windowProc(long, int, long, long) line: 4616 Display.windowProc(long, long, long, long) line: 4972 OS.SetWindowPos(long, long, int, int, int, int, int) line: not available [native method] Composite(Widget).SetWindowPos(long, long, int, int, int, int, int) line: 1457 Composite(Control).setBounds(int, int, int, int, int, boolean) line: 3124 Composite.setBounds(int, int, int, int, int, boolean) line: 1019 Composite(Control).setBounds(int, int, int, int, int) line: 3085 Composite(Control).setBounds(int, int, int, int) line: 3081 FillLayout.layout(Composite, boolean) line: 201 Composite.updateLayout(boolean, boolean) line: 1263 Composite.WM_SIZE(long, long) line: 1673 Composite(Control).windowProc(long, int, long, long) line: 4603 Display.windowProc(long, long, long, long) line: 4972 OS.DefWindowProcW(long, int, long, long) line: not available [native method] OS.DefWindowProc(long, int, long, long) line: 2540 Composite(Scrollable).callWindowProc(long, int, long, long) line: 80 Composite(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408 Composite(Control).windowProc(long, int, long, long) line: 4616 Display.windowProc(long, long, long, long) line: 4972 OS.SetWindowPos(long, long, int, int, int, int, int) line: not available [native method] Composite(Widget).SetWindowPos(long, long, int, int, int, int, int) line: 1457 Composite(Control).setBounds(int, int, int, int, int, boolean) line: 3124 Composite.setBounds(int, int, int, int, int, boolean) line: 1019 Composite(Control).setBounds(int, int, int, int, int) line: 3085 Composite(Control).setBounds(int, int, int, int) line: 3081 Composite(Control).setBounds(Rectangle) line: 3148 TrimmedPartLayout.layout(Composite, boolean) line: 183 Shell(Composite).updateLayout(boolean, boolean) line: 1263 Shell(Composite).WM_SIZE(long, long) line: 1673 Shell(Canvas).WM_SIZE(long, long) line: 454 Shell(Decorations).WM_SIZE(long, long) line: 1808 Shell(Control).windowProc(long, int, long, long) line: 4603 Shell(Canvas).windowProc(long, int, long, long) line: 341 Shell(Decorations).windowProc(long, int, long, long) line: 1627 Shell.windowProc(long, int, long, long) line: 2069 Display.windowProc(long, long, long, long) line: 4972 OS.DefWindowProcW(long, int, long, long) line: not available [native method] OS.DefWindowProc(long, int, long, long) line: 2540 Shell.callWindowProc(long, int, long, long) line: 498 Shell(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408 Shell(Canvas).WM_WINDOWPOSCHANGED(long, long) line: 460 Shell(Control).windowProc(long, int, long, long) line: 4616 Shell(Canvas).windowProc(long, int, long, long) line: 341 Shell(Decorations).windowProc(long, int, long, long) line: 1627 Shell.windowProc(long, int, long, long) line: 2069 Display.windowProc(long, long, long, long) line: 4972 OS.SetMenu(long, long) line: not available [native method] Shell(Decorations).setMenuBar(Menu) line: 1175 MenuManagerRenderer.createWidget(MUIElement, Object) line: 275 PartRenderingEngine.createWidget(MUIElement, Object) line: 866 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 616 PartRenderingEngine$6.run() line: 505 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement, Object, IEclipseContext) line: 490 WorkbenchWindow.setup() line: 551 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 88 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 55 Method.invoke(Object, Object...) line: 613 MethodRequestor.execute() line: 56 InjectorImpl.processAnnotated(Class<Annotation>, Object, Class<?>, PrimaryObjectSupplier, PrimaryObjectSupplier, ArrayList<Class<?>>) line: 838 InjectorImpl.inject(Object, PrimaryObjectSupplier, PrimaryObjectSupplier) line: 110 InjectorImpl.inject(Object, PrimaryObjectSupplier) line: 80 ContextInjectionFactory.inject(Object, IEclipseContext) line: 72 Workbench.createWorkbenchWindow(IAdaptable, IPerspectiveDescriptor, MWindow, boolean) line: 1233 Workbench.openWorkbenchWindow(IAdaptable, IPerspectiveDescriptor, MWindow, boolean) line: 2244 Workbench.getWorkbenchPage(MPart) line: 1704 Workbench.setReference(MPart, IEclipseContext) line: 1723 Workbench.access$21(Workbench, MPart, IEclipseContext) line: 1720 Workbench$32.handleEvent(Event) line: 1671 UIEventHandler$1.run() line: 41 UISynchronizer(Synchronizer).syncExec(Runnable) line: 180 UISynchronizer.syncExec(Runnable) line: 150 Display.syncExec(Runnable) line: 4683 E4Application$1.syncExec(Runnable) line: 177 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<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: 81 UIEventPublisher.notifyChanged(Notification) line: 55 PartImpl(BasicNotifierImpl).eNotify(Notification) line: 380 PartImpl.setContext(IEclipseContext) line: 422 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 595 PartRenderingEngine$6.run() line: 505 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement, Object, IEclipseContext) line: 490 ElementReferenceRenderer.createWidget(MUIElement, Object) line: 74 PartRenderingEngine.createWidget(MUIElement, Object) line: 866 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 616 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 StackRenderer.showTab(MUIElement) line: 786 StackRenderer(LazyStackRenderer).postProcess(MUIElement) line: 97 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 632 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 SashRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 SashRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 PerspectiveRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59 PerspectiveRenderer.processContents(MElementContainer<MUIElement>) line: 59 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 PerspectiveStackRenderer.showTab(MUIElement) line: 103 PerspectiveStackRenderer(LazyStackRenderer).postProcess(MUIElement) line: 97 PerspectiveStackRenderer.postProcess(MUIElement) line: 77 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 632 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 SashRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 WBWRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59 WBWRenderer.processContents(MElementContainer<MUIElement>) line: 584 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 PartRenderingEngine$9.run() line: 938 Realm.runWithDefault(Realm, Runnable) line: 332 PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 893 E4Workbench.createAndRunUI(MApplicationElement) line: 85 Workbench$4.run() line: 577 Realm.runWithDefault(Realm, Runnable) line: 332 Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 532 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: 352 EclipseStarter.run(String[], Runnable) line: 179 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 88 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 55 Method.invoke(Object, Object...) line: 613 Main.invokeFramework(String[], URL[]) line: 624 Main.basicRun(String[]) line: 579 Main.run(String[]) line: 1433 Main.main(String[]) line: 1409
Reverted the commit — Remy discovered a some strange interaction that shows up on Win7: rcjsuen (4:44) the problem is that it sets a widget into the MPSC before the rendering engine got to it
(In reply to comment #8) > rcjsuen (4:44) the problem is that it sets a widget into the MPSC before the > rendering engine got to it I've opened bug 369229 for this problem.
I get an NPE if the Welcome view is on-screen in PerspectiveStackRenderer#showTab(MUIElement) line 114: // relayout the perspective Composite psComp = ctrl.getParent(); StackLayout sl = (StackLayout) psComp.getLayout(); 114: sl.topControl = ctrl; psComp.layout(); It seems to work happily if I change the code to: // relayout the perspective Composite psComp = ctrl.getParent(); StackLayout sl = (StackLayout) psComp.getLayout(); if (sl != null) { sl.topControl = ctrl; psComp.layout(); } Eric, can you verify that this is correct? Steps to repeat: 1. Open to the Welcome / Intro (Help > Welcome) 2. Quit, and then restart. You should get the NPE below on startup. Daemon Thread [Thread-1] (Suspended (exception NullPointerException)) PerspectiveStackRenderer.showTab(MUIElement) line: 114 PerspectiveStackRenderer(LazyStackRenderer).postProcess(MUIElement) line: 97 PerspectiveStackRenderer.postProcess(MUIElement) line: 77 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 632 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 SashRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 WBWRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59 WBWRenderer.processContents(MElementContainer<MUIElement>) line: 584 PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628 PartRenderingEngine.safeCreateGui(MUIElement) line: 718 PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689 PartRenderingEngine$7.run() line: 683 SafeRunner.run(ISafeRunnable) line: 42 PartRenderingEngine.createGui(MUIElement) line: 668 PartRenderingEngine$9.run() line: 938 Realm.runWithDefault(Realm, Runnable) line: 332 PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 893 E4Workbench.createAndRunUI(MApplicationElement) line: 85 Workbench$4.run() line: 577 Realm.runWithDefault(Realm, Runnable) line: 332 Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 532 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: 352 EclipseStarter.run(String[], Runnable) line: 179 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: 624 Main.basicRun(String[]) line: 579 Main.run(String[]) line: 1433 Main.main(String[]) line: 1409
Problem in comment #10 is independent and reported in bug 369434. Fix re-applied and committed as 52b277357edcb5df00f8aae1e7436a2c8be021b4
Verified in I20120123-2200.