mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 06:15:26 +00:00
First deselect, then select
For reasons I still don't understand, sometimes (but not always) when clicking on a trip header we appear to get a select notification for the trip and at the same time deselect notifications for every dive in the trip. This seems wrong but I can't seem to figure out why it happens - and of course it causes us to have a mixed up interpretation of what is selected in our internal selection tracking. Simply acting on the new selection after the newly deselected items are handled appears to fix the issue, but I do worry about this change. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
5e51d1e354
commit
d8c5f366c8
1 changed files with 17 additions and 18 deletions
|
@ -245,6 +245,23 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS
|
|||
disconnect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(selectionChanged(QItemSelection,QItemSelection)));
|
||||
disconnect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(currentChanged(QModelIndex,QModelIndex)));
|
||||
|
||||
Q_FOREACH(const QModelIndex& index, newDeselected.indexes()) {
|
||||
if (index.column() != 0)
|
||||
continue;
|
||||
const QAbstractItemModel *model = index.model();
|
||||
struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value<void*>();
|
||||
if (!dive) { // it's a trip!
|
||||
if (model->rowCount(index)) {
|
||||
struct dive *child = (struct dive*) model->data(index.child(0,0), TreeItemDT::DIVE_ROLE).value<void*>();
|
||||
while (child) {
|
||||
deselect_dive(get_index_for_dive(child));
|
||||
child = child->next;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
deselect_dive(get_index_for_dive(dive));
|
||||
}
|
||||
}
|
||||
Q_FOREACH(const QModelIndex& index, newSelected.indexes()) {
|
||||
if (index.column() != 0)
|
||||
continue;
|
||||
|
@ -269,24 +286,6 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS
|
|||
select_dive(get_index_for_dive(dive));
|
||||
}
|
||||
}
|
||||
Q_FOREACH(const QModelIndex& index, newDeselected.indexes()) {
|
||||
if (index.column() != 0)
|
||||
continue;
|
||||
const QAbstractItemModel *model = index.model();
|
||||
struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value<void*>();
|
||||
if (!dive) { // it's a trip!
|
||||
if (model->rowCount(index)) {
|
||||
struct dive *child = (struct dive*) model->data(index.child(0,0), TreeItemDT::DIVE_ROLE).value<void*>();
|
||||
while (child) {
|
||||
deselect_dive(get_index_for_dive(child));
|
||||
child = child->next;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
deselect_dive(get_index_for_dive(dive));
|
||||
}
|
||||
}
|
||||
|
||||
QTreeView::selectionChanged(selectionModel()->selection(), newDeselected);
|
||||
connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(selectionChanged(QItemSelection,QItemSelection)));
|
||||
connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(currentChanged(QModelIndex,QModelIndex)));
|
||||
|
|
Loading…
Add table
Reference in a new issue