Use ItemSelectionModel to preserve room selection after sort

Fix #305
Fix #297
This commit is contained in:
Carl Schwan
2021-03-14 17:43:42 +01:00
parent 0289822e6c
commit 8f1f02fa22

View File

@@ -7,6 +7,7 @@
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls 2.12 as QQC2 import QtQuick.Controls 2.12 as QQC2
import QtQuick.Layouts 1.12 import QtQuick.Layouts 1.12
import QtQml.Models 2.15
import org.kde.kirigami 2.13 as Kirigami import org.kde.kirigami 2.13 as Kirigami
import org.kde.kitemmodels 1.0 import org.kde.kitemmodels 1.0
@@ -61,6 +62,14 @@ Kirigami.ScrollablePage {
} }
} }
ItemSelectionModel {
id: itemSelection
model: roomListModel
onCurrentChanged: {
listView.currentIndex = sortFilterRoomListModel.mapFromSource(current).row
}
}
model: SortFilterRoomListModel { model: SortFilterRoomListModel {
id: sortFilterRoomListModel id: sortFilterRoomListModel
sourceModel: RoomListModel { sourceModel: RoomListModel {
@@ -68,6 +77,9 @@ Kirigami.ScrollablePage {
connection: page.activeConnection connection: page.activeConnection
} }
roomSortOrder: Config.mergeRoomList ? SortFilterRoomListModel.LastActivity : SortFilterRoomListModel.Categories roomSortOrder: Config.mergeRoomList ? SortFilterRoomListModel.LastActivity : SortFilterRoomListModel.Categories
onLayoutChanged: {
listView.currentIndex = sortFilterRoomListModel.mapFromSource(itemSelection.currentIndex).row
}
} }
section.property: sortFilterRoomListModel.filterText.length === 0 && !Config.mergeRoomList ? "category" : null section.property: sortFilterRoomListModel.filterText.length === 0 && !Config.mergeRoomList ? "category" : null
@@ -76,6 +88,7 @@ Kirigami.ScrollablePage {
action: Kirigami.Action { action: Kirigami.Action {
onTriggered: roomListModel.setCategoryVisible(section, !roomListModel.categoryVisible(section)) onTriggered: roomListModel.setCategoryVisible(section, !roomListModel.categoryVisible(section))
} }
highlighted: sortFilterRoomListModel.mapFromSource(current).row == index
contentItem: RowLayout { contentItem: RowLayout {
implicitHeight: categoryName.implicitHeight implicitHeight: categoryName.implicitHeight
Kirigami.Heading { Kirigami.Heading {
@@ -106,6 +119,7 @@ Kirigami.ScrollablePage {
var roomItem = roomManager.enterRoom(currentRoom) var roomItem = roomManager.enterRoom(currentRoom)
roomListItem.KeyNavigation.right = roomItem roomListItem.KeyNavigation.right = roomItem
roomItem.focus = true; roomItem.focus = true;
itemSelection.setCurrentIndex(sortFilterRoomListModel.mapToSource(sortFilterRoomListModel.index(index, 0)), ItemSelectionModel.SelectCurrent)
} }
} }