Skip to content

Commit 99f8d48

Browse files
committedJul 24, 2018
Avoid repeated update of edit selection
1 parent 10a66da commit 99f8d48

File tree

2 files changed

+33
-26
lines changed

2 files changed

+33
-26
lines changed
 

‎src/gui/attributetable/qgsfeaturelistview.cpp

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -398,40 +398,46 @@ void QgsFeatureListView::ensureEditSelection( bool inSelection )
398398

399399
if ( editSelectionUpdateRequested )
400400
{
401-
QTimer::singleShot( 0, this, [ this, inSelection, validEditSelectionAvailable ]()
401+
if ( !mUpdateEditSelectionTimer.isSingleShot() )
402402
{
403-
// The layer might have been removed between timer start and timer triggered
404-
// in this case there is nothing left for us to do.
405-
if ( !layerCache() )
406-
return;
407-
408-
int rowToSelect = -1;
409-
410-
if ( inSelection )
403+
mUpdateEditSelectionTimer.setSingleShot( true );
404+
connect( &mUpdateEditSelectionTimer, &QTimer::timeout, this, [ this, inSelection, validEditSelectionAvailable ]()
411405
{
412-
const QgsFeatureIds selectedFids = layerCache()->layer()->selectedFeatureIds();
413-
const int rowCount = mModel->rowCount();
406+
// The layer might have been removed between timer start and timer triggered
407+
// in this case there is nothing left for us to do.
408+
if ( !layerCache() )
409+
return;
410+
411+
int rowToSelect = -1;
414412

415-
for ( int i = 0; i < rowCount; i++ )
413+
if ( inSelection )
416414
{
417-
if ( selectedFids.contains( mModel->idxToFid( mModel->index( i, 0 ) ) ) )
415+
const QgsFeatureIds selectedFids = layerCache()->layer()->selectedFeatureIds();
416+
const int rowCount = mModel->rowCount();
417+
418+
for ( int i = 0; i < rowCount; i++ )
418419
{
419-
rowToSelect = i;
420-
break;
420+
if ( selectedFids.contains( mModel->idxToFid( mModel->index( i, 0 ) ) ) )
421+
{
422+
rowToSelect = i;
423+
break;
424+
}
425+
426+
if ( rowToSelect == -1 && !validEditSelectionAvailable )
427+
rowToSelect = 0;
421428
}
422-
423-
if ( rowToSelect == -1 && !validEditSelectionAvailable )
424-
rowToSelect = 0;
425429
}
426-
}
427-
else
428-
rowToSelect = 0;
430+
else
431+
rowToSelect = 0;
429432

430-
if ( rowToSelect != -1 )
431-
{
432-
setEditSelection( mModel->mapToMaster( mModel->index( rowToSelect, 0 ) ), QItemSelectionModel::ClearAndSelect );
433-
}
434-
} );
433+
if ( rowToSelect != -1 )
434+
{
435+
setEditSelection( mModel->mapToMaster( mModel->index( rowToSelect, 0 ) ), QItemSelectionModel::ClearAndSelect );
436+
}
437+
} );
438+
mUpdateEditSelectionTimer.setInterval( 0 );
439+
}
440+
mUpdateEditSelectionTimer.start();
435441
}
436442
}
437443

‎src/gui/attributetable/qgsfeaturelistview.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ class GUI_EXPORT QgsFeatureListView : public QListView
203203
int mRowAnchor = 0;
204204
QItemSelectionModel::SelectionFlags mCtrlDragSelectionFlag;
205205

206+
QTimer mUpdateEditSelectionTimer;
206207
};
207208

208209
#endif

0 commit comments

Comments
 (0)
Please sign in to comment.