Alt+Shift+Up/Down to switch to previous/next unread room

This is the same key combination as commonly used by other chat clients
such as Element, Slack and Discord. For consistency, also add the same
Alt+Up/Down shortcut as used in thes other clients as aliases for
switching rooms without considering the unread status.
This commit is contained in:
Kevin Wolf
2023-02-22 15:47:33 +01:00
committed by Tobias Fella
parent 12afa43d23
commit c0c86c67b6
2 changed files with 38 additions and 6 deletions

View File

@@ -131,10 +131,10 @@ Kirigami.ScrollablePage {
} }
} }
function goToNextRoom() { function goToNextRoomFiltered(condition) {
let index = listView.currentIndex; let index = listView.currentIndex;
while (index++ !== listView.count - 1) { while (index++ !== listView.count - 1) {
if (listView.itemAtIndex(index).visible) { if (condition(listView.itemAtIndex(index))) {
listView.currentIndex = index; listView.currentIndex = index;
listView.currentItem.action.trigger(); listView.currentItem.action.trigger();
return; return;
@@ -142,10 +142,10 @@ Kirigami.ScrollablePage {
} }
} }
function goToPreviousRoom() { function goToPreviousRoomFiltered(condition) {
let index = listView.currentIndex; let index = listView.currentIndex;
while (index-- !== 0) { while (index-- !== 0) {
if (listView.itemAtIndex(index).visible) { if (condition(listView.itemAtIndex(index))) {
listView.currentIndex = index; listView.currentIndex = index;
listView.currentItem.action.trigger(); listView.currentItem.action.trigger();
return; return;
@@ -153,6 +153,22 @@ Kirigami.ScrollablePage {
} }
} }
function goToNextRoom() {
goToNextRoomFiltered((item) => item.visible);
}
function goToPreviousRoom() {
goToPreviousRoomFiltered((item) => item.visible);
}
function goToNextUnreadRoom() {
goToNextRoomFiltered((item) => (item.visible && item.hasUnread));
}
function goToPreviousUnreadRoom() {
goToPreviousRoomFiltered((item) => (item.visible && item.hasUnread));
}
titleDelegate: collapsedMode ? empty : searchField titleDelegate: collapsedMode ? empty : searchField
Component { Component {
@@ -428,6 +444,8 @@ Kirigami.ScrollablePage {
}) })
menu.open() menu.open()
} }
readonly property bool hasUnread: unreadCount > 0
} }
} }
} }

View File

@@ -318,18 +318,32 @@ Kirigami.ApplicationWindow {
id: roomList id: roomList
Shortcut { Shortcut {
sequences: ["Ctrl+PgUp", "Ctrl+Backtab"] sequences: ["Ctrl+PgUp", "Ctrl+Backtab", "Alt+Up"]
onActivated: { onActivated: {
roomList.goToPreviousRoom(); roomList.goToPreviousRoom();
} }
} }
Shortcut { Shortcut {
sequences: ["Ctrl+PgDown", "Ctrl+Tab"] sequences: ["Ctrl+PgDown", "Ctrl+Tab", "Alt+Down"]
onActivated: { onActivated: {
roomList.goToNextRoom(); roomList.goToNextRoom();
} }
} }
Shortcut {
sequence: "Alt+Shift+Up"
onActivated: {
roomList.goToPreviousUnreadRoom();
}
}
Shortcut {
sequence: "Alt+Shift+Down"
onActivated: {
roomList.goToNextUnreadRoom();
}
}
} }
} }