Merge from vscode a234f13c45b40a0929777cb440ee011b7549eed2 (#8911)

* Merge from vscode a234f13c45b40a0929777cb440ee011b7549eed2

* update distro

* fix layering

* update distro

* fix tests
This commit is contained in:
Anthony Dresser
2020-01-22 13:42:37 -08:00
committed by GitHub
parent 977111eb21
commit bd7aac8ee0
895 changed files with 24651 additions and 14520 deletions

View File

@@ -44,7 +44,7 @@ import { IKeymapService } from 'vs/workbench/services/keybinding/common/keymapIn
import { getDispatchConfig } from 'vs/workbench/services/keybinding/common/dispatchConfig';
import { isArray } from 'vs/base/common/types';
import { INavigatorWithKeyboard, IKeyboard } from 'vs/workbench/services/keybinding/browser/navigatorKeyboard';
import { ScanCodeUtils, IMMUTABLE_CODE_TO_KEY_CODE } from 'vs/base/common/scanCode';
import { ScanCode, ScanCodeUtils, IMMUTABLE_CODE_TO_KEY_CODE } from 'vs/base/common/scanCode';
import { flatten } from 'vs/base/common/arrays';
import { BrowserFeatures, KeyboardSupport } from 'vs/base/browser/canIUse';
@@ -143,6 +143,24 @@ const keybindingsExtPoint = ExtensionsRegistry.registerExtensionPoint<Contribute
}
});
const NUMPAD_PRINTABLE_SCANCODES = [
ScanCode.NumpadDivide,
ScanCode.NumpadMultiply,
ScanCode.NumpadSubtract,
ScanCode.NumpadAdd,
ScanCode.Numpad1,
ScanCode.Numpad2,
ScanCode.Numpad3,
ScanCode.Numpad4,
ScanCode.Numpad5,
ScanCode.Numpad6,
ScanCode.Numpad7,
ScanCode.Numpad8,
ScanCode.Numpad9,
ScanCode.Numpad0,
ScanCode.NumpadDecimal
];
export class WorkbenchKeybindingService extends AbstractKeybindingService {
private _keyboardMapper: IKeyboardMapper;
@@ -559,6 +577,21 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
return false;
}
const code = ScanCodeUtils.toEnum(event.code);
if (NUMPAD_PRINTABLE_SCANCODES.indexOf(code) !== -1) {
// This is a numpad key that might produce a printable character based on NumLock.
// Let's check if NumLock is on or off based on the event's keyCode.
// e.g.
// - when NumLock is off, ScanCode.Numpad4 produces KeyCode.LeftArrow
// - when NumLock is on, ScanCode.Numpad4 produces KeyCode.NUMPAD_4
// However, ScanCode.NumpadAdd always produces KeyCode.NUMPAD_ADD
if (event.keyCode === IMMUTABLE_CODE_TO_KEY_CODE[code]) {
// NumLock is on or this is /, *, -, + on the numpad
return true;
}
return false;
}
const keycode = IMMUTABLE_CODE_TO_KEY_CODE[code];
if (keycode !== -1) {
// https://github.com/microsoft/vscode/issues/74934

View File

@@ -38,7 +38,6 @@ import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editor
import { KeybindingsEditingService } from 'vs/workbench/services/keybinding/common/keybindingEditing';
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
import { TextModelResolverService } from 'vs/workbench/services/textmodelResolver/common/textModelResolverService';
import { IUntitledTextEditorService, UntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
import { TestBackupFileService, TestContextService, TestEditorGroupsService, TestEditorService, TestLifecycleService, TestTextFileService, TestTextResourcePropertiesService, TestWorkingCopyService } from 'vs/workbench/test/workbenchTestServices';
import { FileService } from 'vs/platform/files/common/fileService';
import { Schemas } from 'vs/base/common/network';
@@ -105,7 +104,6 @@ suite.skip('KeybindingsEditing', () => {
fileService.registerProvider(Schemas.file, diskFileSystemProvider);
fileService.registerProvider(Schemas.userData, new FileUserDataProvider(environmentService.appSettingsHome, environmentService.backupHome, diskFileSystemProvider, environmentService));
instantiationService.stub(IFileService, fileService);
instantiationService.stub(IUntitledTextEditorService, instantiationService.createInstance(UntitledTextEditorService));
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
instantiationService.stub(IBackupFileService, new TestBackupFileService());