Fix Roomlist Shortcuts

Fix the ctrl + pgup/pgdwn shortcuts for the room list so that they work with tree model

BUG: 485949
(cherry picked from commit 28c9d94457)
This commit is contained in:
James Graham
2024-04-22 22:01:46 +00:00
committed by Tobias Fella
parent 3786710d81
commit 4dfd4b68eb
3 changed files with 30 additions and 14 deletions

View File

@@ -205,4 +205,14 @@ void SortFilterRoomTreeModel::setMode(SortFilterRoomTreeModel::Mode mode)
invalidate(); invalidate();
} }
QModelIndex SortFilterRoomTreeModel::currentRoomIndex() const
{
const auto roomModel = dynamic_cast<RoomTreeModel *>(sourceModel());
if (roomModel == nullptr) {
return {};
}
return mapFromSource(roomModel->indexForRoom(RoomManager::instance().currentRoom()));
}
#include "moc_sortfilterroomtreemodel.cpp" #include "moc_sortfilterroomtreemodel.cpp"

View File

@@ -76,6 +76,8 @@ public:
Mode mode() const; Mode mode() const;
void setMode(Mode mode); void setMode(Mode mode);
Q_INVOKABLE QModelIndex currentRoomIndex() const;
protected: protected:
/** /**
* @brief Returns true if the value of source_left is less than source_right. * @brief Returns true if the value of source_left is less than source_right.

View File

@@ -40,41 +40,41 @@ Kirigami.Page {
} }
function goToNextRoomFiltered(condition) { function goToNextRoomFiltered(condition) {
let index = treeView.currentIndex; let index = treeView.rowAtIndex(RoomManager.sortFilterRoomTreeModel.currentRoomIndex());
while (index++ !== treeView.count - 1) { while (index++ < treeView.rows) {
if (condition(treeView.itemAtIndex(index))) { let item = treeView.itemAtIndex(treeView.index(index, 0))
treeView.currentIndex = index; if (condition(item)) {
treeView.currentItem.clicked(); RoomManager.resolveResource(item.currentRoom.id)
return; return;
} }
} }
} }
function goToPreviousRoomFiltered(condition) { function goToPreviousRoomFiltered(condition) {
let index = treeView.currentIndex; let index = treeView.rowAtIndex(RoomManager.sortFilterRoomTreeModel.currentRoomIndex());
while (index-- !== 0) { while (index-- > 0) {
if (condition(treeView.itemAtIndex(index))) { let item = treeView.itemAtIndex(treeView.index(index, 0))
treeView.currentIndex = index; if (condition(item)) {
treeView.currentItem.clicked(); RoomManager.resolveResource(item.currentRoom.id)
return; return;
} }
} }
} }
function goToNextRoom() { function goToNextRoom() {
goToNextRoomFiltered(item => item.visible); goToNextRoomFiltered(item => (item && item instanceof RoomDelegate));
} }
function goToPreviousRoom() { function goToPreviousRoom() {
goToPreviousRoomFiltered(item => item.visible); goToPreviousRoomFiltered(item => (item && item instanceof RoomDelegate));
} }
function goToNextUnreadRoom() { function goToNextUnreadRoom() {
goToNextRoomFiltered(item => (item.visible && item.hasUnread)); goToNextRoomFiltered(item => (item && item instanceof RoomDelegate && item.hasUnread));
} }
function goToPreviousUnreadRoom() { function goToPreviousUnreadRoom() {
goToPreviousRoomFiltered(item => (item.visible && item.hasUnread)); goToPreviousRoomFiltered(item => (item && item instanceof RoomDelegate && item.hasUnread));
} }
titleDelegate: Loader { titleDelegate: Loader {
@@ -89,6 +89,10 @@ Kirigami.Page {
function onCurrentSpaceChanged() { function onCurrentSpaceChanged() {
treeView.expandRecursively(); treeView.expandRecursively();
} }
function onCurrentRoomChanged() {
treeView.positionViewAtIndex(RoomManager.sortFilterRoomTreeModel.currentRoomIndex(), TableView.AlignVCenter)
}
} }
RowLayout { RowLayout {