Skip to content

Commit

Permalink
Speed up message bar operations when many messages are shown
Browse files Browse the repository at this point in the history
Avoid unnecessary calls to setStyleSheet, which is slow when many
message bar items exists

Refs #29698
  • Loading branch information
nyalldawson committed May 26, 2020
1 parent fbcf39e commit 5dd29f0
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 5 deletions.
1 change: 1 addition & 0 deletions python/gui/auto_generated/qgsmessagebaritem.sip.in
Expand Up @@ -96,6 +96,7 @@ has no effect.
%End

signals:

void styleChanged( const QString &styleSheet );
%Docstring
emitted when the message level has changed
Expand Down
8 changes: 7 additions & 1 deletion src/gui/qgsmessagebar.cpp
Expand Up @@ -260,7 +260,13 @@ void QgsMessageBar::showItem( QgsMessageBarItem *item )
}

connect( mCurrentItem, &QgsMessageBarItem::styleChanged, this, &QWidget::setStyleSheet );
setStyleSheet( item->getStyleSheet() );

if ( item->level() != mPrevLevel )
{
setStyleSheet( item->getStyleSheet() );
mPrevLevel = item->level();
}

show();

emit widgetAdded( item );
Expand Down
1 change: 1 addition & 0 deletions src/gui/qgsmessagebar.h
Expand Up @@ -164,6 +164,7 @@ class GUI_EXPORT QgsMessageBar: public QFrame
QTimer *mCountdownTimer = nullptr;
QProgressBar *mCountProgress = nullptr;
QString mCountStyleSheet;
Qgis::MessageLevel mPrevLevel = Qgis::MessageLevel::None;

private slots:
//! updates count of items in widget list
Expand Down
10 changes: 7 additions & 3 deletions src/gui/qgsmessagebaritem.cpp
Expand Up @@ -220,9 +220,13 @@ QString QgsMessageBarItem::title() const

QgsMessageBarItem *QgsMessageBarItem::setLevel( Qgis::MessageLevel level )
{
mLevel = level;
writeContent();
emit styleChanged( mStyleSheet );
if ( level != mLevel )
{
mLevel = level;
writeContent();
emit styleChanged( mStyleSheet );
}

return this;
}

Expand Down
5 changes: 4 additions & 1 deletion src/gui/qgsmessagebaritem.h
Expand Up @@ -104,7 +104,10 @@ class GUI_EXPORT QgsMessageBarItem : public QWidget
void dismiss();

signals:
//! emitted when the message level has changed

/**
* emitted when the message level has changed
*/
void styleChanged( const QString &styleSheet );

private slots:
Expand Down

0 comments on commit 5dd29f0

Please sign in to comment.