mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-13 19:48:37 -05:00
Merge from vscode 709a07d51919d3266ca71699c6ddfb2d3547c0e1 (#6575)
This commit is contained in:
@@ -195,6 +195,7 @@ export class Dialog extends Disposable {
|
||||
|
||||
this.applyStyles();
|
||||
|
||||
this.element.setAttribute('aria-label', this.message);
|
||||
show(this.element);
|
||||
|
||||
// Focus first element
|
||||
|
||||
@@ -647,12 +647,15 @@ export class MouseController<T> implements IDisposable {
|
||||
}
|
||||
|
||||
const newSelection = disjunction(rangeSelection, relativeComplement(selection, contiguousRange));
|
||||
this.list.setFocus([focus]);
|
||||
this.list.setSelection(newSelection, e.browserEvent);
|
||||
|
||||
} else if (this.isSelectionSingleChangeEvent(e)) {
|
||||
const selection = this.list.getSelection();
|
||||
const newSelection = selection.filter(i => i !== focus);
|
||||
|
||||
this.list.setFocus([focus]);
|
||||
|
||||
if (selection.length === newSelection.length) {
|
||||
this.list.setSelection([...newSelection, focus], e.browserEvent);
|
||||
} else {
|
||||
|
||||
@@ -626,8 +626,11 @@ class SubmenuMenuActionViewItem extends BaseMenuActionViewItem {
|
||||
|
||||
this._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {
|
||||
let event = new StandardKeyboardEvent(e);
|
||||
if (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {
|
||||
EventHelper.stop(e, true);
|
||||
|
||||
if (document.activeElement === this.item) {
|
||||
if (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {
|
||||
EventHelper.stop(e, true);
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -802,4 +805,4 @@ export function cleanMnemonic(label: string): string {
|
||||
const mnemonicInText = matches[0].charAt(0) === '&';
|
||||
|
||||
return label.replace(regex, mnemonicInText ? '$2' : '').trim();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ class TreeRenderer<T, TFilterData, TTemplateData> implements IListRenderer<ITree
|
||||
|
||||
private _renderIndentGuides: RenderIndentGuides = RenderIndentGuides.None;
|
||||
private renderedIndentGuides = new SetMap<ITreeNode<T, TFilterData>, HTMLDivElement>();
|
||||
private activeParentNodes = new Set<ITreeNode<T, TFilterData>>();
|
||||
private activeIndentNodes = new Set<ITreeNode<T, TFilterData>>();
|
||||
private indentGuidesDisposable: IDisposable = Disposable.None;
|
||||
|
||||
private disposables: IDisposable[] = [];
|
||||
@@ -353,6 +353,7 @@ class TreeRenderer<T, TFilterData, TTemplateData> implements IListRenderer<ITree
|
||||
}
|
||||
|
||||
this.renderTwistie(node, data.templateData);
|
||||
this._onDidChangeActiveNodes(this.activeNodes.elements);
|
||||
this.renderIndentGuides(node, data.templateData);
|
||||
}
|
||||
|
||||
@@ -386,7 +387,7 @@ class TreeRenderer<T, TFilterData, TTemplateData> implements IListRenderer<ITree
|
||||
const parent = node.parent;
|
||||
const guide = $<HTMLDivElement>('.indent-guide', { style: `width: ${this.indent}px` });
|
||||
|
||||
if (this.activeParentNodes.has(parent)) {
|
||||
if (this.activeIndentNodes.has(parent)) {
|
||||
addClass(guide, 'active');
|
||||
}
|
||||
|
||||
@@ -413,24 +414,26 @@ class TreeRenderer<T, TFilterData, TTemplateData> implements IListRenderer<ITree
|
||||
const set = new Set<ITreeNode<T, TFilterData>>();
|
||||
|
||||
nodes.forEach(node => {
|
||||
if (node.parent) {
|
||||
if (node.collapsible && node.children.length > 0 && !node.collapsed) {
|
||||
set.add(node);
|
||||
} else if (node.parent) {
|
||||
set.add(node.parent);
|
||||
}
|
||||
});
|
||||
|
||||
this.activeParentNodes.forEach(node => {
|
||||
this.activeIndentNodes.forEach(node => {
|
||||
if (!set.has(node)) {
|
||||
this.renderedIndentGuides.forEach(node, line => removeClass(line, 'active'));
|
||||
}
|
||||
});
|
||||
|
||||
set.forEach(node => {
|
||||
if (!this.activeParentNodes.has(node)) {
|
||||
if (!this.activeIndentNodes.has(node)) {
|
||||
this.renderedIndentGuides.forEach(node, line => addClass(line, 'active'));
|
||||
}
|
||||
});
|
||||
|
||||
this.activeParentNodes = set;
|
||||
this.activeIndentNodes = set;
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
||||
@@ -477,7 +477,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
|
||||
// View
|
||||
|
||||
rerender(element?: T): void {
|
||||
if (element === undefined) {
|
||||
if (element === undefined || element === this.root.element) {
|
||||
this.tree.rerender();
|
||||
return;
|
||||
}
|
||||
@@ -602,9 +602,9 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
|
||||
return nodes.map(n => n!.element as T);
|
||||
}
|
||||
|
||||
open(elements: T[]): void {
|
||||
open(elements: T[], browserEvent?: UIEvent): void {
|
||||
const nodes = elements.map(e => this.getDataNode(e));
|
||||
this.tree.open(nodes);
|
||||
this.tree.open(nodes, browserEvent);
|
||||
}
|
||||
|
||||
reveal(element: T, relativeTop?: number): void {
|
||||
|
||||
Reference in New Issue
Block a user