Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 307199
Collapse All | Expand All

(-)src/org/eclipse/e4/workbench/ui/internal/PartServiceImpl.java (-1 / +1 lines)
Lines 298-304 Link Here
298
	 * .MPart)
298
	 * .MPart)
299
	 */
299
	 */
300
	public void activate(MPart part) {
300
	public void activate(MPart part) {
301
		if (!isInContainer(part)) {
301
		if (activePart == part || !isInContainer(part)) {
302
			return;
302
			return;
303
		}
303
		}
304
		IEclipseContext curContext = part.getContext();
304
		IEclipseContext curContext = part.getContext();
(-)src/org/eclipse/e4/workbench/ui/renderers/swt/LazyStackRenderer.java (-32 / +1 lines)
Lines 10-23 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.e4.workbench.ui.renderers.swt;
11
package org.eclipse.e4.workbench.ui.renderers.swt;
12
12
13
import org.eclipse.e4.core.services.events.IEventBroker;
14
15
import java.util.ArrayList;
13
import java.util.ArrayList;
16
import java.util.List;
14
import java.util.List;
15
import org.eclipse.e4.core.services.events.IEventBroker;
17
import org.eclipse.e4.ui.model.application.MElementContainer;
16
import org.eclipse.e4.ui.model.application.MElementContainer;
18
import org.eclipse.e4.ui.model.application.MGenericStack;
17
import org.eclipse.e4.ui.model.application.MGenericStack;
19
import org.eclipse.e4.ui.model.application.MPart;
20
import org.eclipse.e4.ui.model.application.MPartStack;
21
import org.eclipse.e4.ui.model.application.MPlaceholder;
18
import org.eclipse.e4.ui.model.application.MPlaceholder;
22
import org.eclipse.e4.ui.model.application.MUIElement;
19
import org.eclipse.e4.ui.model.application.MUIElement;
23
import org.eclipse.e4.ui.model.application.MWindow;
20
import org.eclipse.e4.ui.model.application.MWindow;
Lines 130-163 Link Here
130
	protected void createTab(MElementContainer<MUIElement> me, MUIElement part) {
127
	protected void createTab(MElementContainer<MUIElement> me, MUIElement part) {
131
	}
128
	}
132
129
133
	@Override
134
	public void hookControllerLogic(final MUIElement me) {
135
		super.hookControllerLogic(me);
136
137
		if (!(me instanceof MPartStack))
138
			return;
139
140
		final MPartStack sm = (MPartStack) me;
141
142
		// Detect activation...picks up cases where the user clicks on the
143
		// (already active) part
144
		if (sm.getWidget() instanceof Control) {
145
			Control ctrl = (Control) sm.getWidget();
146
			ctrl.addListener(SWT.Activate,
147
					new org.eclipse.swt.widgets.Listener() {
148
						public void handleEvent(
149
								org.eclipse.swt.widgets.Event event) {
150
							CTabFolder ctf = (CTabFolder) event.widget;
151
							MPartStack stack = (MPartStack) ctf
152
									.getData(OWNING_ME);
153
							MPart selPart = stack.getSelectedElement();
154
							if (selPart != null)
155
								activate(selPart);
156
						}
157
					});
158
		}
159
	}
160
161
	protected void showTab(MUIElement element) {
130
	protected void showTab(MUIElement element) {
162
		// Now process any newly visible elements
131
		// Now process any newly visible elements
163
		List<MUIElement> becomingVisible = new ArrayList<MUIElement>();
132
		List<MUIElement> becomingVisible = new ArrayList<MUIElement>();
(-)src/org/eclipse/e4/workbench/ui/renderers/swt/StackRenderer.java (-9 / +33 lines)
Lines 76-81 Link Here
76
76
77
	private boolean ignoreTabSelChanges = false;
77
	private boolean ignoreTabSelChanges = false;
78
78
79
	private class ActivationJob implements Runnable {
80
		public MElementContainer<MUIElement> stackToActivate = null;
81
82
		public void run() {
83
			activationJob = null;
84
			if (stackToActivate != null
85
					&& stackToActivate.getSelectedElement() != null) {
86
				activate((MPart) stackToActivate.getSelectedElement());
87
			}
88
		}
89
	}
90
91
	private ActivationJob activationJob = null;
92
93
	synchronized private void activateStack(MElementContainer<MUIElement> stack) {
94
		CTabFolder ctf = (CTabFolder) stack.getWidget();
95
		if (ctf == null || ctf.isDisposed())
96
			return;
97
98
		if (activationJob == null) {
99
			activationJob = new ActivationJob();
100
			activationJob.stackToActivate = stack;
101
			ctf.getDisplay().asyncExec(activationJob);
102
		} else {
103
			activationJob.stackToActivate = stack;
104
		}
105
	}
106
79
	public StackRenderer() {
107
	public StackRenderer() {
80
		super();
108
		super();
81
	}
109
	}
Lines 400-410 Link Here
400
					return;
428
					return;
401
429
402
				MPart newPart = (MPart) e.item.getData(OWNING_ME);
430
				MPart newPart = (MPart) e.item.getData(OWNING_ME);
403
				if (stack.getSelectedElement() != newPart) {
431
				newPart.getParent().setSelectedElement(newPart);
404
					activate(newPart);
432
				activateStack(stack);
405
				}
406
407
				showTab(newPart);
408
			}
433
			}
409
		});
434
		});
410
435
Lines 432-441 Link Here
432
		ctf.addListener(SWT.Activate, new org.eclipse.swt.widgets.Listener() {
457
		ctf.addListener(SWT.Activate, new org.eclipse.swt.widgets.Listener() {
433
			public void handleEvent(org.eclipse.swt.widgets.Event event) {
458
			public void handleEvent(org.eclipse.swt.widgets.Event event) {
434
				CTabFolder ctf = (CTabFolder) event.widget;
459
				CTabFolder ctf = (CTabFolder) event.widget;
435
				MPartStack stack = (MPartStack) ctf.getData(OWNING_ME);
460
				MElementContainer<MUIElement> stack = (MElementContainer<MUIElement>) ctf
436
				MPart part = stack.getSelectedElement();
461
						.getData(OWNING_ME);
437
				if (part != null)
462
				activateStack(stack);
438
					activate(part);
439
			}
463
			}
440
		});
464
		});
441
	}
465
	}

Return to bug 307199