@@ -304,7 +304,7 @@ void QgsLocatorWidget::updateResults( const QString &text )
304
304
else
305
305
{
306
306
mHasSelectedResult = false ;
307
- mLocatorModel ->clear ();
307
+ mLocatorModel ->deferredClear ();
308
308
mLocator ->fetchResults ( text, createContext () );
309
309
}
310
310
}
@@ -350,16 +350,29 @@ QgsLocatorContext QgsLocatorWidget::createContext()
350
350
351
351
QgsLocatorModel::QgsLocatorModel ( QObject *parent )
352
352
: QAbstractTableModel( parent )
353
- {}
353
+ {
354
+ mDeferredClearTimer .setInterval ( 100 );
355
+ mDeferredClearTimer .setSingleShot ( true );
356
+ connect ( &mDeferredClearTimer , &QTimer::timeout, this , &QgsLocatorModel::clear );
357
+ }
354
358
355
359
void QgsLocatorModel::clear ()
356
360
{
361
+ mDeferredClearTimer .stop ();
362
+ mDeferredClear = false ;
363
+
357
364
beginResetModel ();
358
365
mResults .clear ();
359
366
mFoundResultsFromFilterNames .clear ();
360
367
endResetModel ();
361
368
}
362
369
370
+ void QgsLocatorModel::deferredClear ()
371
+ {
372
+ mDeferredClear = true ;
373
+ mDeferredClearTimer .start ();
374
+ }
375
+
363
376
int QgsLocatorModel::rowCount ( const QModelIndex & ) const
364
377
{
365
378
return mResults .size ();
@@ -459,17 +472,29 @@ Qt::ItemFlags QgsLocatorModel::flags( const QModelIndex &index ) const
459
472
flags = flags & ~( Qt::ItemIsSelectable | Qt::ItemIsEnabled );
460
473
}
461
474
return flags;
462
-
463
475
}
464
476
465
477
void QgsLocatorModel::addResult ( const QgsLocatorResult &result )
466
478
{
479
+ mDeferredClearTimer .stop ();
480
+ if ( mDeferredClear )
481
+ {
482
+ mFoundResultsFromFilterNames .clear ();
483
+ }
484
+
467
485
int pos = mResults .size ();
468
486
bool addingFilter = !result.filter ->displayName ().isEmpty () && !mFoundResultsFromFilterNames .contains ( result.filter ->name () );
469
487
if ( addingFilter )
470
488
mFoundResultsFromFilterNames << result.filter ->name ();
471
489
472
- beginInsertRows ( QModelIndex (), pos, pos + ( addingFilter ? 1 : 0 ) );
490
+ if ( mDeferredClear )
491
+ {
492
+ beginResetModel ();
493
+ mResults .clear ();
494
+ }
495
+ else
496
+ beginInsertRows ( QModelIndex (), pos, pos + ( addingFilter ? 1 : 0 ) );
497
+
473
498
if ( addingFilter )
474
499
{
475
500
Entry entry;
@@ -480,7 +505,13 @@ void QgsLocatorModel::addResult( const QgsLocatorResult &result )
480
505
Entry entry;
481
506
entry.result = result;
482
507
mResults << entry;
483
- endInsertRows ();
508
+
509
+ if ( mDeferredClear )
510
+ endResetModel ();
511
+ else
512
+ endInsertRows ();
513
+
514
+ mDeferredClear = false ;
484
515
}
485
516
486
517
0 commit comments