@@ -272,6 +272,7 @@ void QgsLayerStylingWidget::apply()
272
272
QWidget *current = mWidgetStack ->mainPanel ();
273
273
274
274
bool styleWasChanged = false ;
275
+ bool triggerRepaint = false ; // whether the change needs the layer to be repainted
275
276
if ( QgsLabelingWidget *widget = qobject_cast<QgsLabelingWidget *>( current ) )
276
277
{
277
278
widget->apply ();
@@ -287,31 +288,34 @@ void QgsLayerStylingWidget::apply()
287
288
QgsRendererAbstractMetadata *m = QgsApplication::rendererRegistry ()->rendererMetadata ( layer->renderer ()->type () );
288
289
undoName = QStringLiteral ( " Style Change - %1" ).arg ( m->visibleName () );
289
290
styleWasChanged = true ;
291
+ triggerRepaint = true ;
290
292
}
291
293
}
292
294
else if ( QgsRasterTransparencyWidget *widget = qobject_cast<QgsRasterTransparencyWidget *>( current ) )
293
295
{
294
296
widget->apply ();
295
297
styleWasChanged = true ;
298
+ triggerRepaint = true ;
296
299
}
297
300
else if ( qobject_cast<QgsRasterHistogramWidget *>( current ) )
298
301
{
299
302
mRasterStyleWidget ->apply ();
300
303
styleWasChanged = true ;
304
+ triggerRepaint = true ;
301
305
}
302
306
else if ( QgsMapLayerConfigWidget *widget = qobject_cast<QgsMapLayerConfigWidget *>( current ) )
303
307
{
304
308
widget->apply ();
305
309
styleWasChanged = true ;
310
+ triggerRepaint = widget->shouldTriggerLayerRepaint ();
306
311
}
307
312
308
- pushUndoItem ( undoName );
313
+ pushUndoItem ( undoName, triggerRepaint );
309
314
310
315
if ( styleWasChanged )
311
316
{
312
317
emit styleChanged ( mCurrentLayer );
313
318
QgsProject::instance ()->setDirty ( true );
314
- mCurrentLayer ->triggerRepaint ();
315
319
}
316
320
connect ( mCurrentLayer , &QgsMapLayer::styleChanged, this , &QgsLayerStylingWidget::updateCurrentWidgetLayer );
317
321
}
@@ -609,25 +613,26 @@ void QgsLayerStylingWidget::liveApplyToggled( bool value )
609
613
settings.setValue ( QStringLiteral ( " UI/autoApplyStyling" ), value );
610
614
}
611
615
612
- void QgsLayerStylingWidget::pushUndoItem ( const QString &name )
616
+ void QgsLayerStylingWidget::pushUndoItem ( const QString &name, bool triggerRepaint )
613
617
{
614
618
QString errorMsg;
615
619
QDomDocument doc ( QStringLiteral ( " style" ) );
616
620
QDomElement rootNode = doc.createElement ( QStringLiteral ( " qgis" ) );
617
621
doc.appendChild ( rootNode );
618
622
mCurrentLayer ->writeStyle ( rootNode, doc, errorMsg, QgsReadWriteContext () );
619
- mCurrentLayer ->undoStackStyles ()->push ( new QgsMapLayerStyleCommand ( mCurrentLayer , name, rootNode, mLastStyleXml ) );
623
+ mCurrentLayer ->undoStackStyles ()->push ( new QgsMapLayerStyleCommand ( mCurrentLayer , name, rootNode, mLastStyleXml , triggerRepaint ) );
620
624
// Override the last style on the stack
621
625
mLastStyleXml = rootNode.cloneNode ();
622
626
}
623
627
624
628
625
- QgsMapLayerStyleCommand::QgsMapLayerStyleCommand ( QgsMapLayer *layer, const QString &text, const QDomNode ¤t, const QDomNode &last )
629
+ QgsMapLayerStyleCommand::QgsMapLayerStyleCommand ( QgsMapLayer *layer, const QString &text, const QDomNode ¤t, const QDomNode &last, bool triggerRepaint )
626
630
: QUndoCommand( text )
627
631
, mLayer( layer )
628
632
, mXml( current )
629
633
, mLastState( last )
630
634
, mTime( QTime::currentTime() )
635
+ , mTriggerRepaint( triggerRepaint )
631
636
{
632
637
}
633
638
@@ -636,15 +641,17 @@ void QgsMapLayerStyleCommand::undo()
636
641
QString error;
637
642
QgsReadWriteContext context = QgsReadWriteContext ();
638
643
mLayer ->readStyle ( mLastState , error, context );
639
- mLayer ->triggerRepaint ();
644
+ if ( mTriggerRepaint )
645
+ mLayer ->triggerRepaint ();
640
646
}
641
647
642
648
void QgsMapLayerStyleCommand::redo ()
643
649
{
644
650
QString error;
645
651
QgsReadWriteContext context = QgsReadWriteContext ();
646
652
mLayer ->readStyle ( mXml , error, context );
647
- mLayer ->triggerRepaint ();
653
+ if ( mTriggerRepaint )
654
+ mLayer ->triggerRepaint ();
648
655
}
649
656
650
657
bool QgsMapLayerStyleCommand::mergeWith ( const QUndoCommand *other )
@@ -665,6 +672,7 @@ bool QgsMapLayerStyleCommand::mergeWith( const QUndoCommand *other )
665
672
666
673
mXml = otherCmd->mXml ;
667
674
mTime = otherCmd->mTime ;
675
+ mTriggerRepaint |= otherCmd->mTriggerRepaint ;
668
676
return true ;
669
677
}
670
678
0 commit comments