Skip to content

Commit a3dba6e

Browse files
committed
Adopt RuntimeKeybinding
1 parent 2864733 commit a3dba6e

24 files changed

Lines changed: 261 additions & 325 deletions

File tree

build/monaco/monaco.d.ts.recipe

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ declare module monaco {
4040
#include(vs/base/common/cancellation): CancellationTokenSource, CancellationToken
4141
#include(vs/base/common/uri): URI
4242
#include(vs/editor/common/standalone/standaloneBase): KeyCode, KeyMod
43-
#include(vs/base/common/keyCodes): SimpleKeybinding
4443
#include(vs/base/common/htmlContent): MarkedString
4544
#include(vs/base/browser/keyboardEvent): IKeyboardEvent
4645
#include(vs/base/browser/mouseEvent): IMouseEvent

src/vs/base/browser/keyboardEvent.ts

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
'use strict';
77

8-
import { SimpleKeybinding, KeyCode, KeyCodeUtils, KeyMod } from 'vs/base/common/keyCodes';
8+
import { KeyCode, KeyCodeUtils, KeyMod, SimpleRuntimeKeybinding } from 'vs/base/common/keyCodes';
99
import * as platform from 'vs/base/common/platform';
1010
import * as browser from 'vs/base/browser/browser';
1111

@@ -175,7 +175,10 @@ export interface IKeyboardEvent {
175175
readonly metaKey: boolean;
176176
readonly keyCode: KeyCode;
177177

178-
toKeybinding(): SimpleKeybinding;
178+
/**
179+
* @internal
180+
*/
181+
toRuntimeKeybinding(): SimpleRuntimeKeybinding;
179182
equals(keybinding: number): boolean;
180183

181184
preventDefault(): void;
@@ -198,7 +201,8 @@ export class StandardKeyboardEvent implements IKeyboardEvent {
198201
public readonly metaKey: boolean;
199202
public readonly keyCode: KeyCode;
200203

201-
private _asKeybinding: SimpleKeybinding;
204+
private _asKeybinding: number;
205+
private _asRuntimeKeybinding: SimpleRuntimeKeybinding;
202206

203207
constructor(source: KeyboardEvent) {
204208
let e = <KeyboardEvent>source;
@@ -220,6 +224,7 @@ export class StandardKeyboardEvent implements IKeyboardEvent {
220224
this.metaKey = this.metaKey || this.keyCode === KeyCode.Meta;
221225

222226
this._asKeybinding = this._computeKeybinding();
227+
this._asRuntimeKeybinding = this._computeRuntimeKeybinding();
223228

224229
// console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);
225230
}
@@ -236,15 +241,15 @@ export class StandardKeyboardEvent implements IKeyboardEvent {
236241
}
237242
}
238243

239-
public toKeybinding(): SimpleKeybinding {
240-
return this._asKeybinding;
244+
public toRuntimeKeybinding(): SimpleRuntimeKeybinding {
245+
return this._asRuntimeKeybinding;
241246
}
242247

243248
public equals(other: number): boolean {
244-
return this._asKeybinding.value === other;
249+
return this._asKeybinding === other;
245250
}
246251

247-
private _computeKeybinding(): SimpleKeybinding {
252+
private _computeKeybinding(): number {
248253
let key = KeyCode.Unknown;
249254
if (this.keyCode !== KeyCode.Ctrl && this.keyCode !== KeyCode.Shift && this.keyCode !== KeyCode.Alt && this.keyCode !== KeyCode.Meta) {
250255
key = this.keyCode;
@@ -265,6 +270,14 @@ export class StandardKeyboardEvent implements IKeyboardEvent {
265270
}
266271
result |= key;
267272

268-
return new SimpleKeybinding(result);
273+
return result;
274+
}
275+
276+
private _computeRuntimeKeybinding(): SimpleRuntimeKeybinding {
277+
let key = KeyCode.Unknown;
278+
if (this.keyCode !== KeyCode.Ctrl && this.keyCode !== KeyCode.Shift && this.keyCode !== KeyCode.Alt && this.keyCode !== KeyCode.Meta) {
279+
key = this.keyCode;
280+
}
281+
return new SimpleRuntimeKeybinding(this.ctrlKey, this.shiftKey, this.altKey, this.metaKey, key);
269282
}
270283
}

src/vs/base/common/keyCodes.ts

Lines changed: 24 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -489,109 +489,6 @@ class BinaryKeybindings {
489489
}
490490
}
491491

492-
export function createKeybinding(keybinding: number): Keybinding {
493-
if (BinaryKeybindings.hasChord(keybinding)) {
494-
return new ChordKeybinding(keybinding);
495-
}
496-
return new SimpleKeybinding(keybinding);
497-
}
498-
499-
export class SimpleKeybinding {
500-
public readonly value: number;
501-
502-
constructor(keybinding: number) {
503-
this.value = keybinding;
504-
}
505-
506-
/**
507-
* @internal
508-
*/
509-
public isChord(): this is ChordKeybinding {
510-
return false;
511-
}
512-
513-
/**
514-
* @internal
515-
*/
516-
public equals(other: Keybinding): boolean {
517-
return (other && this.value === other.value);
518-
}
519-
520-
public hasCtrlCmd(): boolean {
521-
return BinaryKeybindings.hasCtrlCmd(this.value);
522-
}
523-
524-
public hasShift(): boolean {
525-
return BinaryKeybindings.hasShift(this.value);
526-
}
527-
528-
public hasAlt(): boolean {
529-
return BinaryKeybindings.hasAlt(this.value);
530-
}
531-
532-
public hasWinCtrl(): boolean {
533-
return BinaryKeybindings.hasWinCtrl(this.value);
534-
}
535-
536-
public isModifierKey(): boolean {
537-
return BinaryKeybindings.isModifierKey(this.value);
538-
}
539-
540-
public getKeyCode(): KeyCode {
541-
return BinaryKeybindings.extractKeyCode(this.value);
542-
}
543-
}
544-
545-
export class ChordKeybinding {
546-
public readonly value: number;
547-
548-
constructor(keybinding: number) {
549-
this.value = keybinding;
550-
}
551-
552-
public isChord(): this is ChordKeybinding {
553-
return true;
554-
}
555-
556-
public equals(other: Keybinding): boolean {
557-
return (other && this.value === other.value);
558-
}
559-
560-
public extractFirstPart(): SimpleKeybinding {
561-
return new SimpleKeybinding(BinaryKeybindings.extractFirstPart(this.value));
562-
}
563-
564-
public extractChordPart(): SimpleKeybinding {
565-
return new SimpleKeybinding(BinaryKeybindings.extractChordPart(this.value));
566-
}
567-
}
568-
569-
export type Keybinding = SimpleKeybinding | ChordKeybinding;
570-
571-
export function _createRuntimeKeybinding(keybinding: Keybinding, OS: OperatingSystem): RuntimeKeybinding {
572-
if (keybinding.isChord()) {
573-
return new ChordRuntimeKeybinding(
574-
_createSimpleRuntimeKeybinding(keybinding.extractFirstPart(), OS),
575-
_createSimpleRuntimeKeybinding(keybinding.extractChordPart(), OS),
576-
);
577-
}
578-
return _createSimpleRuntimeKeybinding(keybinding, OS);
579-
}
580-
581-
function _createSimpleRuntimeKeybinding(keybinding: SimpleKeybinding, OS: OperatingSystem): SimpleRuntimeKeybinding {
582-
const ctrlCmd = keybinding.hasCtrlCmd();
583-
const winCtrl = keybinding.hasWinCtrl();
584-
const ctrlKey = (OS === OperatingSystem.Macintosh ? winCtrl : ctrlCmd);
585-
const metaKey = (OS === OperatingSystem.Macintosh ? ctrlCmd : winCtrl);
586-
587-
const shiftKey = keybinding.hasShift();
588-
const altKey = keybinding.hasAlt();
589-
590-
const keyCode = keybinding.getKeyCode();
591-
592-
return new SimpleRuntimeKeybinding(ctrlKey, shiftKey, altKey, metaKey, keyCode);
593-
}
594-
595492
export function createRuntimeKeybinding(keybinding: number, OS: OperatingSystem): RuntimeKeybinding {
596493
if (keybinding === 0) {
597494
return null;
@@ -605,7 +502,7 @@ export function createRuntimeKeybinding(keybinding: number, OS: OperatingSystem)
605502
return createSimpleRuntimeKeybinding(keybinding, OS);
606503
}
607504

608-
function createSimpleRuntimeKeybinding(keybinding: number, OS: OperatingSystem): SimpleRuntimeKeybinding {
505+
export function createSimpleRuntimeKeybinding(keybinding: number, OS: OperatingSystem): SimpleRuntimeKeybinding {
609506

610507
const ctrlCmd = BinaryKeybindings.hasCtrlCmd(keybinding);
611508
const winCtrl = BinaryKeybindings.hasWinCtrl(keybinding);
@@ -641,6 +538,29 @@ export class SimpleRuntimeKeybinding {
641538
this.metaKey = metaKey;
642539
this.keyCode = keyCode;
643540
}
541+
542+
public equals(other: RuntimeKeybinding): boolean {
543+
if (other.type !== RuntimeKeybindingType.Simple) {
544+
return false;
545+
}
546+
return (
547+
this.ctrlKey === other.ctrlKey
548+
&& this.shiftKey === other.shiftKey
549+
&& this.altKey === other.altKey
550+
&& this.metaKey === other.metaKey
551+
&& this.keyCode === other.keyCode
552+
);
553+
}
554+
555+
public isModifierKey(): boolean {
556+
return (
557+
this.keyCode === KeyCode.Unknown
558+
|| this.keyCode === KeyCode.Ctrl
559+
|| this.keyCode === KeyCode.Meta
560+
|| this.keyCode === KeyCode.Alt
561+
|| this.keyCode === KeyCode.Shift
562+
);
563+
}
644564
}
645565

646566
export class ChordRuntimeKeybinding {

src/vs/base/parts/tree/browser/treeDefaults.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import dom = require('vs/base/browser/dom');
1414
import mouse = require('vs/base/browser/mouseEvent');
1515
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1616
import _ = require('vs/base/parts/tree/browser/tree');
17-
import { Keybinding, KeyCode, KeyMod } from 'vs/base/common/keyCodes';
17+
import { KeyCode, KeyMod, RuntimeKeybinding, createRuntimeKeybinding, SimpleRuntimeKeybinding } from 'vs/base/common/keyCodes';
1818

1919
export interface ILegacyTemplateData {
2020
root: HTMLElement;
@@ -97,7 +97,7 @@ export interface IControllerOptions {
9797
}
9898

9999
interface IKeybindingDispatcherItem {
100-
keybinding: number;
100+
keybinding: RuntimeKeybinding;
101101
callback: IKeyBindingCallback;
102102
}
103103

@@ -111,16 +111,16 @@ export class KeybindingDispatcher {
111111

112112
public set(keybinding: number, callback: IKeyBindingCallback) {
113113
this._arr.push({
114-
keybinding: keybinding,
114+
keybinding: createRuntimeKeybinding(keybinding, platform.OS),
115115
callback: callback
116116
});
117117
}
118118

119-
public dispatch(keybinding: Keybinding): IKeyBindingCallback {
119+
public dispatch(keybinding: SimpleRuntimeKeybinding): IKeyBindingCallback {
120120
// Loop from the last to the first to handle overwrites
121121
for (let i = this._arr.length - 1; i >= 0; i--) {
122122
let item = this._arr[i];
123-
if (keybinding.value === item.keybinding) {
123+
if (keybinding.equals(item.keybinding)) {
124124
return item.callback;
125125
}
126126
}
@@ -264,7 +264,7 @@ export class DefaultController implements _.IController {
264264
}
265265

266266
private onKey(bindings: KeybindingDispatcher, tree: _.ITree, event: IKeyboardEvent): boolean {
267-
var handler = bindings.dispatch(event.toKeybinding());
267+
var handler = bindings.dispatch(event.toRuntimeKeybinding());
268268
if (handler) {
269269
if (handler(tree, event)) {
270270
event.preventDefault();

0 commit comments

Comments
 (0)