From 586f49b788803e509ec0e04368d036017f83bd82 Mon Sep 17 00:00:00 2001
From: Brian de Alwis
Date: Wed, 22 Feb 2012 16:33:36 -0500
Subject: Bug 372077 - Context debug view not plumbed in properly
---
.../org.eclipse.e4.core.contexts.debug/plugin.xml | 10 ++++
.../contexts/debug/ui/FindTargetAction.java | 54 +++++++++++-----------
.../debug/ui/legacy/ContextTraceLegacyView.java | 7 ++-
3 files changed, 41 insertions(+), 30 deletions(-)
diff --git a/bundles/org.eclipse.e4.core.contexts.debug/plugin.xml b/bundles/org.eclipse.e4.core.contexts.debug/plugin.xml
index 8038d718472..4198b735403 100644
--- a/bundles/org.eclipse.e4.core.contexts.debug/plugin.xml
+++ b/bundles/org.eclipse.e4.core.contexts.debug/plugin.xml
@@ -10,4 +10,14 @@
class="org.eclipse.e4.core.internal.contexts.debug.ui.e4.ContextsDebugProcessor">
+
+
+
+
diff --git a/bundles/org.eclipse.e4.core.contexts.debug/src/org/eclipse/e4/core/internal/contexts/debug/ui/FindTargetAction.java b/bundles/org.eclipse.e4.core.contexts.debug/src/org/eclipse/e4/core/internal/contexts/debug/ui/FindTargetAction.java
index 663cf9a1e3f..d1233a2a1b6 100644
--- a/bundles/org.eclipse.e4.core.contexts.debug/src/org/eclipse/e4/core/internal/contexts/debug/ui/FindTargetAction.java
+++ b/bundles/org.eclipse.e4.core.contexts.debug/src/org/eclipse/e4/core/internal/contexts/debug/ui/FindTargetAction.java
@@ -12,6 +12,7 @@ package org.eclipse.e4.core.internal.contexts.debug.ui;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.List;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
@@ -20,16 +21,14 @@ import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.core.di.extensions.EventUtils;
import org.eclipse.e4.core.internal.contexts.EclipseContext;
import org.eclipse.e4.ui.model.application.ui.MContext;
-import org.eclipse.e4.ui.model.application.ui.menu.MItem;
+import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
import org.osgi.service.event.EventAdmin;
public class FindTargetAction {
@@ -58,29 +57,22 @@ public class FindTargetAction {
}
@Execute
- public void doFindTarget(IEclipseContext context) {
- MItem item = context.get(MItem.class);
- ToolItem toolItem = (ToolItem) item.getWidget();
- final ToolBar toolBar = toolItem.getParent();
- final Display display = toolItem.getDisplay();
+ public void doFindTarget(MWindow win) {
+ final Control windowWidget = (Control) win.getWidget();
+ final Display display = windowWidget.getDisplay();
- displayCursor = toolBar.getCursor();
- toolBar.setCursor(targetCursor);
- toolBar.setCapture(true);
+ displayCursor = windowWidget.getCursor();
+ windowWidget.setCursor(targetCursor);
+ windowWidget.setCapture(true);
- toolBar.addMouseListener(new MouseListener() {
- public void mouseDoubleClick(MouseEvent e) {
- // nothing
- }
-
- public void mouseDown(MouseEvent e) {
- // nothing
- }
-
- public void mouseUp(MouseEvent e) {
+ // This filter list is necessary to avoid not-initialized-errors within the
+ // actual listener. The filter approach is required as some platforms (e.g.,
+ // MacOS X) don't support setCapture().
+ // FIXME: should possible set this up for MouseUp, not MouseDown?
+ final LinkedList filters = new LinkedList();
+ filters.add(new Listener() {
+ public void handleEvent(Event event) {
Control control = display.getCursorControl();
- if (toolBar == control) // ignore click on the trigger button
- return;
IEclipseContext targetContext = null;
while (control != null) {
Object data = control.getData(OWNING_ME);
@@ -101,11 +93,17 @@ public class FindTargetAction {
TreePath path = new TreePath(contexts.toArray());
EventUtils.send(eventAdmin, ContextsView.SELECT_EVENT, path);
}
- toolBar.setCapture(false);
- toolBar.removeMouseListener(this);
- toolBar.setCursor(displayCursor);
+ windowWidget.setCapture(false);
+ windowWidget.setCursor(displayCursor);
+ for (Listener f : filters) {
+ display.removeFilter(SWT.MouseDown, f);
+ }
+ filters.clear();
}
});
+ for (Listener f : filters) {
+ display.addFilter(SWT.MouseDown, f);
+ }
}
}
diff --git a/bundles/org.eclipse.e4.core.contexts.debug/src/org/eclipse/e4/core/internal/contexts/debug/ui/legacy/ContextTraceLegacyView.java b/bundles/org.eclipse.e4.core.contexts.debug/src/org/eclipse/e4/core/internal/contexts/debug/ui/legacy/ContextTraceLegacyView.java
index 443196d4931..8f3228ba1c5 100644
--- a/bundles/org.eclipse.e4.core.contexts.debug/src/org/eclipse/e4/core/internal/contexts/debug/ui/legacy/ContextTraceLegacyView.java
+++ b/bundles/org.eclipse.e4.core.contexts.debug/src/org/eclipse/e4/core/internal/contexts/debug/ui/legacy/ContextTraceLegacyView.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.e4.core.internal.contexts.debug.ui.legacy;
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.internal.contexts.debug.ui.ContextsView;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
@@ -35,7 +37,8 @@ public class ContextTraceLegacyView extends ViewPart {
}
public void createPartControl(Composite parent) {
- viewer = new ContextsView(parent, null);
+ IEclipseContext context = (IEclipseContext) getSite().getService(IEclipseContext.class);
+ viewer = ContextInjectionFactory.make(ContextsView.class, context);
// PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "org.eclipse.e4.core.contexts.debug.view");
}
--
cgit v1.2.3