Cleanup: avoid spurious updateDiveInfo() calls
In 2e230da3610dd1fc61badaf328a084512895fb90 the dive-selection signals were unified. Sadly, this was done in a suboptimal way resulting in numerous calls to updateDiveInfo(), which refreshes the main-tab. Firstly, the MainWindow connected to selection changes from both, the undo-command and the divelist. Secondly, every selected dive in the divelist caused a single signal. Thus, connect only to the divelist (this is necessary for user-initiated selection changes) and only send a single signal in the divelist per selection-reset. This is still less than perfect as updateDiveInfo() is called even if the current dive doesn't change. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
5c1446a87a
commit
57c22d3dcc
@ -194,6 +194,10 @@ void DiveListView::reset()
|
||||
// If items were selected, inform the selection model
|
||||
void DiveListView::diveSelectionChanged(const QVector<QModelIndex> &indexes)
|
||||
{
|
||||
// Since dives are selected dive-by-dive, send only a single signal at the
|
||||
// end, not one for every dive.
|
||||
dontEmitDiveChangedSignal = true;
|
||||
|
||||
clearSelection();
|
||||
MultiFilterSortModel *m = MultiFilterSortModel::instance();
|
||||
QItemSelectionModel *s = selectionModel();
|
||||
@ -217,6 +221,9 @@ void DiveListView::diveSelectionChanged(const QVector<QModelIndex> &indexes)
|
||||
setAnimated(true);
|
||||
}
|
||||
}
|
||||
|
||||
dontEmitDiveChangedSignal = false;
|
||||
emit divesSelected();
|
||||
}
|
||||
|
||||
void DiveListView::currentDiveChanged(QModelIndex index)
|
||||
|
||||
@ -191,7 +191,6 @@ MainWindow::MainWindow() : QMainWindow(),
|
||||
if (!QIcon::hasThemeIcon("window-close")) {
|
||||
QIcon::setThemeName("subsurface");
|
||||
}
|
||||
connect(&diveListNotifier, &DiveListNotifier::divesSelected, this, &MainWindow::selectionChanged);
|
||||
connect(diveList, &DiveListView::divesSelected, this, &MainWindow::selectionChanged);
|
||||
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(readSettings()));
|
||||
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), diveList, SLOT(update()));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user