fix: base keyboard modifier state on latest event
This commit is contained in:
@@ -87,27 +87,37 @@ export class IOService {
|
|||||||
this.activeModifiers.delete(modifier);
|
this.activeModifiers.delete(modifier);
|
||||||
};
|
};
|
||||||
|
|
||||||
handleKeyDown = (event: KeyboardEvent): void => {
|
public handleComponentKeyDown = (
|
||||||
for (const modifier of this.modifiersForEvent(event)) {
|
modifier: KeyboardModifier | undefined
|
||||||
this.addActiveModifier(modifier);
|
): void => {
|
||||||
}
|
|
||||||
this.notifyObserver(event, KeyboardKeyEvent.Down);
|
|
||||||
};
|
|
||||||
|
|
||||||
handleComponentKeyDown = (modifier: KeyboardModifier | undefined): void => {
|
|
||||||
this.addActiveModifier(modifier);
|
this.addActiveModifier(modifier);
|
||||||
};
|
};
|
||||||
|
|
||||||
handleKeyUp = (event: KeyboardEvent): void => {
|
public handleComponentKeyUp = (
|
||||||
for (const modifier of this.modifiersForEvent(event)) {
|
modifier: KeyboardModifier | undefined
|
||||||
this.removeActiveModifier(modifier);
|
): void => {
|
||||||
}
|
this.removeActiveModifier(modifier);
|
||||||
|
};
|
||||||
|
|
||||||
|
private handleKeyDown = (event: KeyboardEvent): void => {
|
||||||
|
this.updateAllModifiersFromEvent(event);
|
||||||
|
this.notifyObserver(event, KeyboardKeyEvent.Down);
|
||||||
|
};
|
||||||
|
|
||||||
|
private handleKeyUp = (event: KeyboardEvent): void => {
|
||||||
|
this.updateAllModifiersFromEvent(event);
|
||||||
this.notifyObserver(event, KeyboardKeyEvent.Up);
|
this.notifyObserver(event, KeyboardKeyEvent.Up);
|
||||||
};
|
};
|
||||||
|
|
||||||
handleComponentKeyUp = (modifier: KeyboardModifier | undefined): void => {
|
private updateAllModifiersFromEvent(event: KeyboardEvent): void {
|
||||||
this.removeActiveModifier(modifier);
|
for (const modifier of Object.values(KeyboardModifier)) {
|
||||||
};
|
if (event.getModifierState(modifier)) {
|
||||||
|
this.addActiveModifier(modifier);
|
||||||
|
} else {
|
||||||
|
this.removeActiveModifier(modifier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handleWindowBlur = (): void => {
|
handleWindowBlur = (): void => {
|
||||||
for (const modifier of this.activeModifiers) {
|
for (const modifier of this.activeModifiers) {
|
||||||
@@ -136,7 +146,7 @@ export class IOService {
|
|||||||
return eventModifiers;
|
return eventModifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
eventMatchesKeyAndModifiers(
|
private eventMatchesKeyAndModifiers(
|
||||||
event: KeyboardEvent,
|
event: KeyboardEvent,
|
||||||
key: KeyboardKey | string,
|
key: KeyboardKey | string,
|
||||||
modifiers: KeyboardModifier[] = []
|
modifiers: KeyboardModifier[] = []
|
||||||
|
|||||||
@@ -114,42 +114,43 @@ export class NotesState {
|
|||||||
|
|
||||||
async selectNote(uuid: UuidString, userTriggered?: boolean): Promise<void> {
|
async selectNote(uuid: UuidString, userTriggered?: boolean): Promise<void> {
|
||||||
const note = this.application.findItem(uuid) as SNNote;
|
const note = this.application.findItem(uuid) as SNNote;
|
||||||
|
if (!note) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const hasMeta = this.io.activeModifiers.has(KeyboardModifier.Meta);
|
const hasMeta = this.io.activeModifiers.has(KeyboardModifier.Meta);
|
||||||
const hasCtrl = this.io.activeModifiers.has(KeyboardModifier.Ctrl);
|
const hasCtrl = this.io.activeModifiers.has(KeyboardModifier.Ctrl);
|
||||||
const hasShift = this.io.activeModifiers.has(KeyboardModifier.Shift);
|
const hasShift = this.io.activeModifiers.has(KeyboardModifier.Shift);
|
||||||
|
|
||||||
if (note) {
|
if (userTriggered && (hasMeta || hasCtrl)) {
|
||||||
if (userTriggered && (hasMeta || hasCtrl)) {
|
if (this.selectedNotes[uuid]) {
|
||||||
if (this.selectedNotes[uuid]) {
|
delete this.selectedNotes[uuid];
|
||||||
delete this.selectedNotes[uuid];
|
} else if (await this.application.authorizeNoteAccess(note)) {
|
||||||
} else if (await this.application.authorizeNoteAccess(note)) {
|
runInAction(() => {
|
||||||
runInAction(() => {
|
this.selectedNotes[uuid] = note;
|
||||||
this.selectedNotes[uuid] = note;
|
this.lastSelectedNote = note;
|
||||||
this.lastSelectedNote = note;
|
});
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (userTriggered && hasShift) {
|
|
||||||
await this.selectNotesRange(note);
|
|
||||||
} else {
|
|
||||||
const shouldSelectNote =
|
|
||||||
this.selectedNotesCount > 1 || !this.selectedNotes[uuid];
|
|
||||||
if (
|
|
||||||
shouldSelectNote &&
|
|
||||||
(await this.application.authorizeNoteAccess(note))
|
|
||||||
) {
|
|
||||||
runInAction(() => {
|
|
||||||
this.selectedNotes = {
|
|
||||||
[note.uuid]: note,
|
|
||||||
};
|
|
||||||
this.lastSelectedNote = note;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else if (userTriggered && hasShift) {
|
||||||
|
await this.selectNotesRange(note);
|
||||||
|
} else {
|
||||||
|
const shouldSelectNote =
|
||||||
|
this.selectedNotesCount > 1 || !this.selectedNotes[uuid];
|
||||||
|
if (
|
||||||
|
shouldSelectNote &&
|
||||||
|
(await this.application.authorizeNoteAccess(note))
|
||||||
|
) {
|
||||||
|
runInAction(() => {
|
||||||
|
this.selectedNotes = {
|
||||||
|
[note.uuid]: note,
|
||||||
|
};
|
||||||
|
this.lastSelectedNote = note;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (this.selectedNotesCount === 1) {
|
if (this.selectedNotesCount === 1) {
|
||||||
await this.openNote(Object.keys(this.selectedNotes)[0]);
|
await this.openNote(Object.keys(this.selectedNotes)[0]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user