Safer pointer.

This commit is contained in:
Teo Mrnjavac 2016-01-29 17:07:08 +01:00
parent 1bc6556b65
commit 30c38c4f4d
2 changed files with 28 additions and 21 deletions

View File

@ -79,6 +79,7 @@ ChoicePage::ChoicePage( QWidget* parent )
, m_isEfi( false ) , m_isEfi( false )
, m_beforePartitionBarsView( nullptr ) , m_beforePartitionBarsView( nullptr )
, m_beforePartitionLabelsView( nullptr ) , m_beforePartitionLabelsView( nullptr )
, m_bootloaderComboBox( nullptr )
{ {
setupUi( this ); setupUi( this );
@ -708,9 +709,24 @@ ChoicePage::updateActionChoicePreview( ChoicePage::Choice choice )
eraseLayout->addWidget( eraseBootloaderLabel ); eraseLayout->addWidget( eraseBootloaderLabel );
eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); eraseBootloaderLabel->setText( tr( "Boot loader location:" ) );
QComboBox* eraseBootloaderCombo = createBootloaderComboBox( eraseWidget ); m_bootloaderComboBox = createBootloaderComboBox( eraseWidget );
eraseLayout->addWidget( eraseBootloaderCombo ); connect( m_core, &PartitionCoreModule::deviceReverted,
eraseBootloaderLabel->setBuddy( eraseBootloaderCombo ); this, [ this ]( Device* dev )
{
if ( dev &&
dev == selectedDevice() &&
!m_bootloaderComboBox.isNull() )
{
if ( m_bootloaderComboBox->model() != m_core->bootLoaderModel() )
m_bootloaderComboBox->setModel( m_core->bootLoaderModel() );
m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex );
}
}, Qt::QueuedConnection );
// ^ Must be Queued so it's sure to run when the widget is already visible.
eraseLayout->addWidget( m_bootloaderComboBox );
eraseBootloaderLabel->setBuddy( m_bootloaderComboBox );
eraseLayout->addStretch(); eraseLayout->addStretch();
layout->addWidget( eraseWidget ); layout->addWidget( eraseWidget );
@ -763,27 +779,17 @@ ChoicePage::createBootloaderComboBox( QWidget* parent )
// When the chosen bootloader device changes, we update the choice in the PCM // When the chosen bootloader device changes, we update the choice in the PCM
connect( bcb, static_cast< void (QComboBox::*)(int) >( &QComboBox::currentIndexChanged ), connect( bcb, static_cast< void (QComboBox::*)(int) >( &QComboBox::currentIndexChanged ),
[=]( int newIndex ) [this]( int newIndex )
{ {
QVariant var = bcb->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); QComboBox* bcb = qobject_cast< QComboBox* >( sender() );
if ( !var.isValid() ) if ( bcb )
return;
m_core->setBootLoaderInstallPath( var.toString() );
} );
connect( m_core, &PartitionCoreModule::deviceReverted,
this, [ this, bcb ]( Device* dev )
{
if ( dev &&
dev == selectedDevice() )
{ {
if ( bcb->model() != m_core->bootLoaderModel() ) QVariant var = bcb->itemData( newIndex, BootLoaderModel::BootLoaderPathRole );
bcb->setModel( m_core->bootLoaderModel() ); if ( !var.isValid() )
return;
bcb->setCurrentIndex( m_lastSelectedDeviceIndex ); m_core->setBootLoaderInstallPath( var.toString() );
} }
}, Qt::QueuedConnection ); } );
// ^ Must be Queued so it's sure to run when the widget is already visible.
return bcb; return bcb;
} }

View File

@ -110,6 +110,7 @@ private:
QPointer< PartitionBarsView > m_afterPartitionBarsView; QPointer< PartitionBarsView > m_afterPartitionBarsView;
QPointer< PartitionLabelsView > m_afterPartitionLabelsView; QPointer< PartitionLabelsView > m_afterPartitionLabelsView;
QPointer< PartitionSplitterWidget > m_afterPartitionSplitterWidget; QPointer< PartitionSplitterWidget > m_afterPartitionSplitterWidget;
QPointer< QComboBox > m_bootloaderComboBox;
int m_lastSelectedDeviceIndex; int m_lastSelectedDeviceIndex;