Lines 16-21
Link Here
|
16 |
import org.eclipse.ui.IWorkbenchPart; |
16 |
import org.eclipse.ui.IWorkbenchPart; |
17 |
import org.eclipse.ui.IWorkbenchPartReference; |
17 |
import org.eclipse.ui.IWorkbenchPartReference; |
18 |
import org.eclipse.ui.internal.misc.UIListenerLogging; |
18 |
import org.eclipse.ui.internal.misc.UIListenerLogging; |
|
|
19 |
import org.eclipse.ui.part.MultiEditor; |
19 |
|
20 |
|
20 |
public class PartService implements IPartService { |
21 |
public class PartService implements IPartService { |
21 |
private PartListenerList listeners = new PartListenerList(); |
22 |
private PartListenerList listeners = new PartListenerList(); |
Lines 67-73
Link Here
|
67 |
* @param ref |
68 |
* @param ref |
68 |
*/ |
69 |
*/ |
69 |
private void firePartActivated(IWorkbenchPartReference ref) { |
70 |
private void firePartActivated(IWorkbenchPartReference ref) { |
70 |
IWorkbenchPart part = ref.getPart(false); |
71 |
IWorkbenchPart part = getPart(ref); |
71 |
if(part != null) { |
72 |
if(part != null) { |
72 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_ACTIVATED); |
73 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_ACTIVATED); |
73 |
listeners.firePartActivated(part); |
74 |
listeners.firePartActivated(part); |
Lines 81-87
Link Here
|
81 |
* @param ref |
82 |
* @param ref |
82 |
*/ |
83 |
*/ |
83 |
public void firePartBroughtToTop(IWorkbenchPartReference ref) { |
84 |
public void firePartBroughtToTop(IWorkbenchPartReference ref) { |
84 |
IWorkbenchPart part = ref.getPart(false); |
85 |
IWorkbenchPart part = getPart(ref); |
85 |
if(part != null) { |
86 |
if(part != null) { |
86 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_PART_BROUGHT_TO_TOP); |
87 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_PART_BROUGHT_TO_TOP); |
87 |
listeners.firePartBroughtToTop(part); |
88 |
listeners.firePartBroughtToTop(part); |
Lines 94-100
Link Here
|
94 |
* @param ref |
95 |
* @param ref |
95 |
*/ |
96 |
*/ |
96 |
public void firePartClosed(IWorkbenchPartReference ref) { |
97 |
public void firePartClosed(IWorkbenchPartReference ref) { |
97 |
IWorkbenchPart part = ref.getPart(false); |
98 |
IWorkbenchPart part = getPart(ref); |
98 |
if(part != null) { |
99 |
if(part != null) { |
99 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_PART_CLOSED); |
100 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_PART_CLOSED); |
100 |
listeners.firePartClosed(part); |
101 |
listeners.firePartClosed(part); |
Lines 107-113
Link Here
|
107 |
* @param ref |
108 |
* @param ref |
108 |
*/ |
109 |
*/ |
109 |
private void firePartDeactivated(IWorkbenchPartReference ref) { |
110 |
private void firePartDeactivated(IWorkbenchPartReference ref) { |
110 |
IWorkbenchPart part = ref.getPart(false); |
111 |
IWorkbenchPart part = getPart(ref); |
111 |
if(part != null) { |
112 |
if(part != null) { |
112 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_PART_DEACTIVATED); |
113 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_PART_DEACTIVATED); |
113 |
listeners.firePartDeactivated(part); |
114 |
listeners.firePartDeactivated(part); |
Lines 135-141
Link Here
|
135 |
* @param ref |
136 |
* @param ref |
136 |
*/ |
137 |
*/ |
137 |
public void firePartOpened(IWorkbenchPartReference ref) { |
138 |
public void firePartOpened(IWorkbenchPartReference ref) { |
138 |
IWorkbenchPart part = ref.getPart(false); |
139 |
IWorkbenchPart part = getPart(ref); |
139 |
if(part != null) { |
140 |
if(part != null) { |
140 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_PART_OPENED); |
141 |
UIListenerLogging.logPartListenerEvent(debugListenersKey, this, part, UIListenerLogging.PE_PART_OPENED); |
141 |
listeners.firePartOpened(part); |
142 |
listeners.firePartOpened(part); |
Lines 157-163
Link Here
|
157 |
IWorkbenchPartReference oldRef = activePart; |
158 |
IWorkbenchPartReference oldRef = activePart; |
158 |
|
159 |
|
159 |
// Filter out redundant activation events |
160 |
// Filter out redundant activation events |
160 |
if (oldRef == ref) { |
161 |
if (oldRef == ref && !isMultiReference(ref)) { |
161 |
return; |
162 |
return; |
162 |
} |
163 |
} |
163 |
|
164 |
|
Lines 172-175
Link Here
|
172 |
} |
173 |
} |
173 |
} |
174 |
} |
174 |
|
175 |
|
|
|
176 |
/** |
177 |
* Try and deal with the MultiEditor ... which has implications for |
178 |
* which "part" the partListeners should be notified about. |
179 |
* |
180 |
* @param ref The reference that might contain a MultiEditor. |
181 |
* @return the workbench part, or the inner part if it's a MultiEditor |
182 |
*/ |
183 |
private IWorkbenchPart getPart(IWorkbenchPartReference ref) { |
184 |
if (ref==null) { |
185 |
return null; |
186 |
} |
187 |
IWorkbenchPart part = ref.getPart(false); |
188 |
if (part != null && part instanceof MultiEditor) { |
189 |
part = ((MultiEditor) part).getActiveEditor(); |
190 |
} |
191 |
return part; |
192 |
} |
193 |
|
194 |
/** |
195 |
* Check a reference to see if it's a ref to a MultiEditor. |
196 |
* @param ref the reference to check. |
197 |
* @return true if the reference is to a MultiEditor. |
198 |
*/ |
199 |
private boolean isMultiReference(IWorkbenchPartReference ref) { |
200 |
return ref instanceof EditorReference |
201 |
&& ((EditorReference) ref).isMultiReference(); |
202 |
} |
175 |
} |
203 |
} |