Skip to content

Commit 872a821

Browse files
committed
Make ExtensionsViewContainer widget navigatable
1 parent 5e9ea7e commit 872a821

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
1212
import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';
1313
import { Event } from 'vs/base/common/event';
1414
import { Action } from 'vs/base/common/actions';
15-
import { append, $, Dimension, hide, show, DragAndDropObserver } from 'vs/base/browser/dom';
15+
import { append, $, Dimension, hide, show, DragAndDropObserver, trackFocus } from 'vs/base/browser/dom';
1616
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
1717
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
1818
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
@@ -61,6 +61,7 @@ import { extractEditorsAndFilesDropData } from 'vs/platform/dnd/browser/dnd';
6161
import { extname } from 'vs/base/common/resources';
6262
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
6363
import { ILocalizedString } from 'vs/platform/action/common/action';
64+
import { registerNavigatableContainer } from 'vs/workbench/browser/actions/widgetNavigationCommands';
6465

6566
export const DefaultViewsContext = new RawContextKey<boolean>('defaultExtensionViews', true);
6667
export const ExtensionsSortByContext = new RawContextKey<string>('extensionsSortByValue', '');
@@ -610,6 +611,22 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
610611
}));
611612

612613
super.create(append(this.root, $('.extensions')));
614+
615+
const focusTracker = this._register(trackFocus(this.root));
616+
const isSearchBoxFocused = () => this.searchBox?.inputWidget.hasWidgetFocus();
617+
this._register(registerNavigatableContainer({
618+
focusNotifiers: [focusTracker],
619+
focusNextWidget: () => {
620+
if (isSearchBoxFocused()) {
621+
this.focusListView();
622+
}
623+
},
624+
focusPreviousWidget: () => {
625+
if (!isSearchBoxFocused()) {
626+
this.searchBox?.focus();
627+
}
628+
}
629+
}));
613630
}
614631

615632
override focus(): void {

0 commit comments

Comments
 (0)