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:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user