Skip to content
Snippets Groups Projects
Commit 82b1cc4e authored by Guillaume Girol's avatar Guillaume Girol
Browse files

add Alt+A keybinding to switch to next room with unread messages

parent 7bb1b1c6
No related branches found
No related tags found
No related merge requests found
Pipeline #1791 failed
...@@ -120,6 +120,11 @@ Page { ...@@ -120,6 +120,11 @@ Page {
} }
} }
Shortcut {
sequence: "Alt+A"
onActivated: Rooms.nextRoomWithActivity()
}
Shortcut { Shortcut {
sequence: "Ctrl+Down" sequence: "Ctrl+Down"
onActivated: Rooms.nextRoom() onActivated: Rooms.nextRoom()
......
...@@ -899,6 +899,52 @@ FilteredRoomlistModel::toggleTag(QString roomid, QString tag, bool on) ...@@ -899,6 +899,52 @@ FilteredRoomlistModel::toggleTag(QString roomid, QString tag, bool on)
} }
} }
void
FilteredRoomlistModel::nextRoomWithActivity()
{
int roomWithMention = -1;
int roomWithNotification = -1;
int roomWithUnreadMessage = -1;
auto r = currentRoom();
int currentRoomIdx = r ? roomidToIndex(r->roomId()) : -1;
// first look for mentions
for (int i = 0; i < (int)roomlistmodel->roomids.size(); i++) {
if (i == currentRoomIdx)
continue;
if (this->data(index(i, 0), RoomlistModel::HasLoudNotification).toBool()) {
roomWithMention = i;
break;
}
if (roomWithNotification == -1 &&
this->data(index(i, 0), RoomlistModel::NotificationCount).toInt() > 0) {
roomWithNotification = i;
// don't break, we must continue looking for rooms with mentions
}
if (roomWithNotification == -1 && roomWithUnreadMessage == -1 &&
this->data(index(i, 0), RoomlistModel::HasUnreadMessages).toBool()) {
roomWithUnreadMessage = i;
// don't break, we must continue looking for rooms with mentions
}
}
QString targetRoomId = nullptr;
if (roomWithMention != -1) {
targetRoomId =
this->data(index(roomWithMention, 0), RoomlistModel::RoomId).toString();
nhlog::ui()->debug("choosing {} for mentions", targetRoomId.toStdString());
} else if (roomWithNotification != -1) {
targetRoomId =
this->data(index(roomWithNotification, 0), RoomlistModel::RoomId).toString();
nhlog::ui()->debug("choosing {} for notifications", targetRoomId.toStdString());
} else if (roomWithUnreadMessage != -1) {
targetRoomId =
this->data(index(roomWithUnreadMessage, 0), RoomlistModel::RoomId).toString();
nhlog::ui()->debug("choosing {} for unread messages", targetRoomId.toStdString());
}
if (targetRoomId != nullptr) {
setCurrentRoom(targetRoomId);
}
}
void void
FilteredRoomlistModel::nextRoom() FilteredRoomlistModel::nextRoom()
{ {
......
...@@ -170,6 +170,7 @@ public slots: ...@@ -170,6 +170,7 @@ public slots:
void setCurrentRoom(QString roomid) { roomlistmodel->setCurrentRoom(std::move(roomid)); } void setCurrentRoom(QString roomid) { roomlistmodel->setCurrentRoom(std::move(roomid)); }
void resetCurrentRoom() { roomlistmodel->resetCurrentRoom(); } void resetCurrentRoom() { roomlistmodel->resetCurrentRoom(); }
void nextRoomWithActivity();
void nextRoom(); void nextRoom();
void previousRoom(); void previousRoom();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment