fix: do not lose focus when switching channels, only trigger focus changes if a message was removed with the delete key

This commit is contained in:
2024-09-04 18:13:03 +02:00
parent 950a528b2b
commit 8d87f196cd
2 changed files with 14 additions and 9 deletions

View File

@@ -44,14 +44,13 @@ export class List extends UINode {
if (idx === this.focused) {
if (this.focused > 0) this.focused--;
this.calculateTabIndex();
this.children[this.focused].focus()
}
return this;
}
public _onFocus() {
super._onFocus();
this.children[this.focused].focus();
this.focusSelectedMessage();
return this;
}
@@ -75,14 +74,14 @@ export class List extends UINode {
this.children[this.focused].setTabbable(false);
this.focused = Math.max(0, this.focused - 1);
this.children[this.focused].setTabbable(true);
this.children[this.focused].focus();
this.focusSelectedMessage();
return true;
break;
case "ArrowDown":
this.children[this.focused].setTabbable(false);
this.focused = Math.min(this.children.length - 1, this.focused + 1);
this.children[this.focused].setTabbable(true);
this.children[this.focused].focus();
this.focusSelectedMessage();
return true;
break;
case "Enter":
@@ -93,14 +92,14 @@ export class List extends UINode {
this.children[this.focused].setTabbable(false);
this.focused = 0;
this.children[this.focused].setTabbable(true);
this.children[this.focused].focus();
this.focusSelectedMessage();
return true;
break;
case "End":
this.children[this.focused].setTabbable(false);
this.focused = this.children.length - 1;
this.children[this.focused].setTabbable(true);
this.children[this.focused].focus();
this.focusSelectedMessage();
return true;
break;
default:
@@ -169,4 +168,8 @@ export class List extends UINode {
this.children[this.focused].setTabbable(true);
return this;
}
public focusSelectedMessage() {
this.children[this.focused].focus()
}
}

View File

@@ -228,11 +228,13 @@ export class MainView extends View {
itm.onClick(() => {
this.openMessageDialog(message);
})
itm.onKeyDown((key: string, alt: boolean | undefined, shift: boolean | undefined, ctrl: boolean | undefined) => {
itm.onKeyDown(async(key: string, alt: boolean | undefined, shift: boolean | undefined, ctrl: boolean | undefined) => {
if (key === "Delete") {
this.removeMessage(message.id);
if (this.messageList.children.length === 1) {
await this.removeMessage(message.id);
if (this.messageList.children.length === 0) {
this.messageInput.focus()
} else {
this.messageList.focusSelectedMessage()
}
}
});