提交 8877119b 编写于 作者: I isidor

debug: move more logic to call stack controller

上级 8a3a8d0f
......@@ -13,7 +13,7 @@ import errors = require('vs/base/common/errors');
import strings = require('vs/base/common/strings');
import { isMacintosh } from 'vs/base/common/platform';
import dom = require('vs/base/browser/dom');
import mouse = require('vs/base/browser/mouseEvent');
import {IMouseEvent} from 'vs/base/browser/mouseEvent';
import labels = require('vs/base/common/labels');
import actions = require('vs/base/common/actions');
import actionbar = require('vs/base/browser/ui/actionbar/actionbar');
......@@ -195,10 +195,13 @@ export class BaseDebugController extends treedefaults.DefaultController {
export class CallStackController extends BaseDebugController {
protected onLeftClick(tree: tree.ITree, element: any, event: mouse.IMouseEvent): boolean {
protected onLeftClick(tree: tree.ITree, element: any, event: IMouseEvent): boolean {
if (typeof element === 'number') {
return this.showMoreStackFrames(tree, element);
}
if (element instanceof model.StackFrame) {
this.focusStackFrame(element, event, true);
}
return super.onLeftClick(tree, element, event);
}
......@@ -208,6 +211,9 @@ export class CallStackController extends BaseDebugController {
if (typeof element === 'number') {
return this.showMoreStackFrames(tree, element);
}
if (element instanceof model.StackFrame) {
this.focusStackFrame(element, event, false);
}
return super.onEnter(tree, event);
}
......@@ -222,6 +228,13 @@ export class CallStackController extends BaseDebugController {
return true;
}
private focusStackFrame(stackFrame: debug.IStackFrame, event: IKeyboardEvent|IMouseEvent, preserveFocus: boolean): void {
this.debugService.setFocusedStackFrameAndEvaluate(stackFrame).done(null, errors.onUnexpectedError);
const sideBySide = (event && (event.ctrlKey || event.metaKey));
this.debugService.openOrRevealSource(stackFrame.source, stackFrame.lineNumber, preserveFocus, sideBySide).done(null, errors.onUnexpectedError);
}
}
......@@ -804,7 +817,7 @@ export class WatchExpressionsController extends BaseDebugController {
}
}
protected onLeftClick(tree: tree.ITree, element: any, event: mouse.IMouseEvent): boolean {
protected onLeftClick(tree: tree.ITree, element: any, event: IMouseEvent): boolean {
// double click on primitive value: open input box to be able to select and copy value.
if (element instanceof model.Expression && event.detail === 2) {
const expression = <debug.IExpression>element;
......@@ -1088,7 +1101,7 @@ export class BreakpointsAccessibilityProvider implements tree.IAccessibilityProv
export class BreakpointsController extends BaseDebugController {
protected onLeftClick(tree: tree.ITree, element: any, event: mouse.IMouseEvent): boolean {
protected onLeftClick(tree: tree.ITree, element: any, event: IMouseEvent): boolean {
if (element instanceof model.FunctionBreakpoint && event.detail === 2) {
this.debugService.getViewModel().setSelectedFunctionBreakpoint(element);
return true;
......
......@@ -227,32 +227,6 @@ export class CallStackView extends viewlet.CollapsibleViewletView {
controller: new viewer.CallStackController(this.debugService, this.contextMenuService, actionProvider)
}, debugTreeOptions(nls.localize({ comment: ['Debug is a noun in this context, not a verb.'], key: 'callStackAriaLabel'}, "Debug Call Stack")));
this.toDispose.push(this.tree.addListener2('selection', (e: tree.ISelectionEvent) => {
if (!e.selection.length || !e.payload) {
// Ignore the event if it was not initated by user.
// Debug sometimes automaticaly sets the selected frame, and those events we need to ignore.
return;
}
const element = e.selection[0];
if (element instanceof StackFrame) {
const stackFrame = <debug.IStackFrame> element;
this.debugService.setFocusedStackFrameAndEvaluate(stackFrame).done(null, errors.onUnexpectedError);
const isMouse = (e.payload && e.payload.origin === 'mouse');
let preserveFocus = isMouse;
const originalEvent:KeyboardEvent|MouseEvent = e && e.payload && e.payload.originalEvent;
if (originalEvent && isMouse && originalEvent.detail === 2) {
preserveFocus = false;
originalEvent.preventDefault(); // focus moves to editor, we need to prevent default
}
const sideBySide = (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey));
this.debugService.openOrRevealSource(stackFrame.source, stackFrame.lineNumber, preserveFocus, sideBySide).done(null, errors.onUnexpectedError);
}
}));
this.toDispose.push(this.tree.addListener2(events.EventType.FOCUS, (e: tree.IFocusEvent) => {
const isMouseClick = (e.payload && e.payload.origin === 'mouse');
const isStackFrameType = (e.focus instanceof StackFrame);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册