diff --git a/src/qml/Page/RoomListPage.qml b/src/qml/Page/RoomListPage.qml index 0dfaa7282..2c5ccee1b 100644 --- a/src/qml/Page/RoomListPage.qml +++ b/src/qml/Page/RoomListPage.qml @@ -131,10 +131,10 @@ Kirigami.ScrollablePage { } } - function goToNextRoom() { + function goToNextRoomFiltered(condition) { let index = listView.currentIndex; while (index++ !== listView.count - 1) { - if (listView.itemAtIndex(index).visible) { + if (condition(listView.itemAtIndex(index))) { listView.currentIndex = index; listView.currentItem.action.trigger(); return; @@ -142,10 +142,10 @@ Kirigami.ScrollablePage { } } - function goToPreviousRoom() { + function goToPreviousRoomFiltered(condition) { let index = listView.currentIndex; while (index-- !== 0) { - if (listView.itemAtIndex(index).visible) { + if (condition(listView.itemAtIndex(index))) { listView.currentIndex = index; listView.currentItem.action.trigger(); 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 Component { @@ -428,6 +444,8 @@ Kirigami.ScrollablePage { }) menu.open() } + + readonly property bool hasUnread: unreadCount > 0 } } } diff --git a/src/qml/main.qml b/src/qml/main.qml index 7d903525c..9975dab72 100644 --- a/src/qml/main.qml +++ b/src/qml/main.qml @@ -318,18 +318,32 @@ Kirigami.ApplicationWindow { id: roomList Shortcut { - sequences: ["Ctrl+PgUp", "Ctrl+Backtab"] + sequences: ["Ctrl+PgUp", "Ctrl+Backtab", "Alt+Up"] onActivated: { roomList.goToPreviousRoom(); } } Shortcut { - sequences: ["Ctrl+PgDown", "Ctrl+Tab"] + sequences: ["Ctrl+PgDown", "Ctrl+Tab", "Alt+Down"] onActivated: { roomList.goToNextRoom(); } } + + Shortcut { + sequence: "Alt+Shift+Up" + onActivated: { + roomList.goToPreviousUnreadRoom(); + } + } + + Shortcut { + sequence: "Alt+Shift+Down" + onActivated: { + roomList.goToNextUnreadRoom(); + } + } } }