void QgsPropertyOverrideButton::registerVisibleWidget( QWidget *widget, bool natural )
{
  Q_FOREACH ( const SiblingWidget &sw, mSiblingWidgets )
  {
    if ( widget == sw.mWidgetPointer.data() && sw.mSiblingType == SiblingVisibility )
      return;
  }
  mSiblingWidgets.append( SiblingWidget( QPointer<QWidget>( widget ), SiblingVisibility, natural ) );
  updateSiblingWidgets( isActive() );
}
void QgsPropertyOverrideButton::registerExpressionWidget( QWidget *widget )
{
  Q_FOREACH ( const SiblingWidget &sw, mSiblingWidgets )
  {
    if ( widget == sw.mWidgetPointer.data() && sw.mSiblingType == SiblingExpressionText )
      return;
  }
  mSiblingWidgets.append( SiblingWidget( QPointer<QWidget>( widget ), SiblingExpressionText ) );
  updateSiblingWidgets( isActive() );
}
void QgsPropertyOverrideButton::registerLinkedWidget( QWidget *widget )
{
  for ( const SiblingWidget &sw : qgis::as_const( mSiblingWidgets ) )
  {
    if ( widget == sw.mWidgetPointer.data() && sw.mSiblingType == SiblingLinkedWidget )
      return;
  }
  mSiblingWidgets.append( SiblingWidget( QPointer<QWidget>( widget ), SiblingLinkedWidget ) );

  if ( QgsColorButton *cb = qobject_cast< QgsColorButton * >( widget ) )
  {
    connect( cb, &QgsColorButton::unlinked, this, [ = ]
    {
      setActive( false );
      updateGui();
    } );
  }

  updateSiblingWidgets( isActive() );
}