Compare commits

...

14 Commits

Author SHA1 Message Date
Philip
4c3d634df0 [displaymanager] if gnome is present, budgie should be detected first 2016-01-02 10:24:43 +01:00
Philip
7c1d193234 [displaymanager] add budgie v10.1 support 2016-01-02 07:42:14 +01:00
Philip
5456ed3b53 fix missing terminating warning 2015-10-16 18:53:34 +02:00
Teo Mrnjavac
198d5d5c4a Add new users to a group with the same name. 2015-10-16 16:45:34 +02:00
Teo Mrnjavac
9f4b8c16b6 Allow reusing the user password as root password. 2015-10-16 14:59:12 +02:00
Teo Mrnjavac
27b5fa4d5b Make sure the FullName is not empty. 2015-10-15 13:25:08 +02:00
Teo Mrnjavac
2f2a55a359 Do not assume dev->partitionTable() is not nullptr. 2015-09-30 17:28:41 +02:00
Teo Mrnjavac
07b6b1265b Better error reporting. 2015-09-29 15:54:11 +02:00
Teo Mrnjavac
973f6935e4 Make sure alongside is unavailable if no partitions can be created. 2015-09-29 15:53:39 +02:00
Teo Mrnjavac
825f657bc6 Bump version for 1.1.4. 2015-09-27 14:17:10 +02:00
Teo Mrnjavac
70ddfa25dd Disable Alongside if primary partition limit reached on all devices. 2015-09-27 12:38:35 +02:00
Teo Mrnjavac
eabe0c68d6 Filter from Alongside the root partitions on a device with 4 primaries. 2015-09-27 12:36:33 +02:00
Teo Mrnjavac
2ac1b29401 Obsolete comment is obsolete. 2015-09-27 12:35:52 +02:00
Teo Mrnjavac
34e686decb Keep UUID when clearing swap.
CAL-156
2015-09-27 12:04:45 +02:00
9 changed files with 266 additions and 188 deletions

View File

@@ -94,7 +94,7 @@ set( CALAMARES_TRANSLATION_LANGUAGES ar ast ca cs_CZ da de en en_GB es_MX es fi_
set( CALAMARES_VERSION_MAJOR 1 )
set( CALAMARES_VERSION_MINOR 1 )
set( CALAMARES_VERSION_PATCH 3 )
set( CALAMARES_VERSION_PATCH 4 )
set( CALAMARES_VERSION_RC 0 )
set( CALAMARES_VERSION ${CALAMARES_VERSION_MAJOR}.${CALAMARES_VERSION_MINOR}.${CALAMARES_VERSION_PATCH} )

View File

@@ -31,6 +31,8 @@ DesktopEnvironment = collections.namedtuple('DesktopEnvironment', ['executable',
desktop_environments = [
DesktopEnvironment('/usr/bin/startkde', 'plasma'), # KDE Plasma 5
DesktopEnvironment('/usr/bin/startkde', 'kde-plasma'), # KDE Plasma 4
DesktopEnvironment('/usr/bin/budgie-desktop', 'budgie-desktop'), # Budgie v10.x
DesktopEnvironment('/usr/bin/budgie-session', 'budgie-desktop'), # Budgie v8.x
DesktopEnvironment('/usr/bin/gnome-session', 'gnome'),
DesktopEnvironment('/usr/bin/startxfce4', 'xfce'),
DesktopEnvironment('/usr/bin/cinnamon-session-cinnamon', 'cinnamon'),
@@ -41,7 +43,6 @@ desktop_environments = [
DesktopEnvironment('/usr/bin/lxqt-session', 'lxqt'),
DesktopEnvironment('/usr/bin/pekwm', 'pekwm'),
DesktopEnvironment('/usr/bin/pantheon-session', 'pantheon'),
DesktopEnvironment('/usr/bin/budgie-session', 'budgie-session'),
DesktopEnvironment('/usr/bin/i3', 'i3'),
DesktopEnvironment('/usr/bin/openbox-session', 'openbox')
]

View File

@@ -125,9 +125,44 @@ AlongsidePage::init( PartitionCoreModule* core , const OsproberEntryList& osprob
string( Calamares::Branding::ProductName ) ) );
} );
// TODO 2.0: move this to a Utils namespace.
// Iterate over devices in devicemodel, foreach device, if it's DOS MBR and limit is
// reached and we have an osprober entry inside it, then disable alongside.
QStringList pathsOfDevicesWithPrimariesLimitReached;
for ( int row = 0; row < m_core->deviceModel()->rowCount(); ++row )
{
const QModelIndex& deviceIndex = m_core->deviceModel()->index( row );
Device* dev = m_core->deviceModel()->deviceForIndex( deviceIndex );
if ( dev->partitionTable() &&
( dev->partitionTable()->type() == PartitionTable::msdos ||
dev->partitionTable()->type() == PartitionTable::msdos_sectorbased ) &&
dev->partitionTable()->numPrimaries() == dev->partitionTable()->maxPrimaries() )
{
// Primaries limit reached!
pathsOfDevicesWithPrimariesLimitReached.append( dev->deviceNode() );
}
}
// End MBR primary limit check.
cDebug() << "Devices with limit reached:" << pathsOfDevicesWithPrimariesLimitReached;
cDebug() << "Osprober entries:";
foreach ( const OsproberEntry& e, osproberEntries )
{
if ( e.canBeResized )
cDebug() << " *" << e.path << e.line;
// TODO 2.0: move this to a Utils namespace.
bool cantCreatePartitions = false;
foreach ( const QString& devicePath, pathsOfDevicesWithPrimariesLimitReached )
{
if ( e.path.startsWith( devicePath ) )
{
cantCreatePartitions = true;
break;
}
}
// End partition creatable check.
if ( e.canBeResized && !cantCreatePartitions )
m_partitionsComboBox->addItem( e.prettyName + " (" + e.path + ")", e.path );
}
setNextEnabled( true );

View File

@@ -22,6 +22,8 @@
#include "core/DeviceModel.h"
#include "core/PartitionModel.h"
#include "OsproberEntry.h"
#include "core/partitiontable.h"
#include "core/device.h"
#include "PrettyRadioButton.h"
@@ -111,6 +113,26 @@ ChoicePage::init( PartitionCoreModule* core, const OsproberEntryList& osproberEn
m_itemsLayout->addWidget( eraseButton );
m_itemsLayout->setSpacing( CalamaresUtils::defaultFontHeight() / 2 );
// TODO 2.0: move this to a Utils namespace.
// Iterate over devices in devicemodel, foreach device, if it's DOS MBR and limit is
// reached and we have an osprober entry inside it, then disable alongside.
QStringList pathsOfDevicesWithPrimariesLimitReached;
for ( int row = 0; row < m_core->deviceModel()->rowCount(); ++row )
{
const QModelIndex& deviceIndex = m_core->deviceModel()->index( row );
Device* dev = m_core->deviceModel()->deviceForIndex( deviceIndex );
if ( dev->partitionTable() &&
( dev->partitionTable()->type() == PartitionTable::msdos ||
dev->partitionTable()->type() == PartitionTable::msdos_sectorbased ) &&
dev->partitionTable()->numPrimaries() == dev->partitionTable()->maxPrimaries() )
{
// Primaries limit reached!
pathsOfDevicesWithPrimariesLimitReached.append( dev->deviceNode() );
}
}
cDebug() << "Devices with limit reached:" << pathsOfDevicesWithPrimariesLimitReached;
if ( osproberEntries.count() == 0 )
{
CALAMARES_RETRANSLATE(
@@ -137,6 +159,18 @@ ChoicePage::init( PartitionCoreModule* core, const OsproberEntryList& osproberEn
{
QString osName = osproberEntries.first().prettyName;
// Find out if our osprober entry (which is the shrink candidate) is on a
// device that can accommodate more partitions.
bool cantCreatePartitions = false;
foreach ( const QString& devicePath, pathsOfDevicesWithPrimariesLimitReached )
{
if ( osproberEntries.first().path.startsWith( devicePath ) )
{
cantCreatePartitions = true;
break;
}
}
if ( !osName.isEmpty() )
{
CALAMARES_RETRANSLATE(
@@ -207,6 +241,8 @@ ChoicePage::init( PartitionCoreModule* core, const OsproberEntryList& osproberEn
}
if ( !osproberEntries.first().canBeResized )
alongsideButton->hide();
if ( cantCreatePartitions )
alongsideButton->hide();
}
else
{
@@ -223,6 +259,27 @@ ChoicePage::init( PartitionCoreModule* core, const OsproberEntryList& osproberEn
}
}
// Find out if at least one of our osprober entries is on a
// device that can accommodate more partitions.
bool atLeastOneCanCreatePartitions = false;
foreach ( const OsproberEntry& entry, osproberEntries )
{
bool cantCreatePartitions = false;
foreach ( const QString& devicePath, pathsOfDevicesWithPrimariesLimitReached )
{
if ( entry.path.startsWith( devicePath ) )
{
cantCreatePartitions = true;
break;
}
}
if ( entry.canBeResized && !cantCreatePartitions )
{
atLeastOneCanCreatePartitions = true;
break;
}
}
CALAMARES_RETRANSLATE(
m_messageLabel->setText( tr( "This computer currently has multiple operating systems on it. "
"What would you like to do?" ) );
@@ -254,7 +311,7 @@ ChoicePage::init( PartitionCoreModule* core, const OsproberEntryList& osproberEn
string( Calamares::Branding::ShortVersionedName ) ) );
)
if ( !atLeastOneCanBeResized )
if ( !( atLeastOneCanBeResized && atLeastOneCanCreatePartitions ) )
alongsideButton->hide();
}

View File

@@ -458,7 +458,6 @@ PartitionViewStep::jobs() const
bool
PartitionViewStep::canBeResized( const QString& partitionPath )
{
//FIXME: check for max partitions count on DOS MBR
cDebug() << "checking if" << partitionPath << "can be resized.";
QString partitionWithOs = partitionPath;
if ( partitionWithOs.startsWith( "/dev/" ) )

View File

@@ -198,10 +198,17 @@ QString
ClearMountsJob::tryClearSwap( const QString& partPath )
{
QProcess process;
process.start( "mkswap", { partPath } );
process.start( "blkid", { "-s", "UUID", "-o", "value", partPath } );
process.waitForFinished();
if ( process.exitCode() == 0 )
return QString( "Successfully cleared swap %1." ).arg( partPath );
QString swapPartUuid = QString::fromLocal8Bit( process.readAllStandardOutput() ).simplified();
if ( process.exitCode() != 0 ||
swapPartUuid.isEmpty() )
return QString();
return QString();
process.start( "mkswap", { "-U", swapPartUuid, partPath } );
process.waitForFinished();
if ( process.exitCode() != 0 )
return QString();
return QString( "Successfully cleared swap %1." ).arg( partPath );
}

View File

@@ -128,8 +128,7 @@ CreateUserJob::exec()
"-m",
"-s",
"/bin/bash",
"-g",
"users",
"-U",
"-G",
defaultGroups,
m_userName } );

View File

@@ -66,11 +66,22 @@ UsersPage::UsersPage( QWidget* parent )
this, &UsersPage::onRootPasswordTextChanged );
connect( ui->textBoxVerifiedRootPassword, &QLineEdit::textChanged,
this, &UsersPage::onRootPasswordTextChanged );
connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged,
this, [this]( int checked )
{
ui->labelChooseRootPassword->setVisible( !checked );
ui->labelExtraRootPassword->setVisible( !checked );
ui->labelRootPassword->setVisible( !checked );
ui->labelRootPasswordError->setVisible( !checked );
ui->textBoxRootPassword->setVisible( !checked );
ui->textBoxVerifiedRootPassword->setVisible( !checked );
} );
m_customUsername = false;
m_customHostname = false;
setShowRootPassword( true );
ui->checkBoxReusePassword->setChecked( true );
CALAMARES_RETRANSLATE( ui->retranslateUi( this ); )
}
@@ -88,7 +99,7 @@ UsersPage::isReady()
return m_readyFullName &&
m_readyHostname &&
m_readyPassword &&
( !m_showRootPassword || m_readyRootPassword ) &&
( !m_showRootPassword || ( ui->checkBoxReusePassword->isChecked() || m_readyRootPassword ) ) &&
m_readyUsername;
}
@@ -102,8 +113,10 @@ UsersPage::createJobs( const QString& defaultUserGroup, const QStringList& defau
Calamares::Job* j;
j = new CreateUserJob( ui->textBoxUsername->text(),
QString(),
ui->checkBoxLoginAuto->isChecked(),
ui->textBoxFullName->text().isEmpty() ?
ui->textBoxUsername->text() :
ui->textBoxFullName->text(),
ui->checkBoxAutoLogin->isChecked(),
defaultUserGroup,
defaultGroupsList );
list.append( Calamares::job_ptr( j ) );
@@ -114,8 +127,12 @@ UsersPage::createJobs( const QString& defaultUserGroup, const QStringList& defau
if ( m_showRootPassword )
{
j = new SetPasswordJob( "root",
ui->textBoxRootPassword->text() );
if ( ui->checkBoxReusePassword->isChecked() )
j = new SetPasswordJob( "root",
ui->textBoxUserPassword->text() );
else
j = new SetPasswordJob( "root",
ui->textBoxRootPassword->text() );
list.append( Calamares::job_ptr( j ) );
}
@@ -124,7 +141,7 @@ UsersPage::createJobs( const QString& defaultUserGroup, const QStringList& defau
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
gs->insert( "hostname", ui->textBoxHostname->text() );
if ( ui->checkBoxLoginAuto->isChecked() )
if ( ui->checkBoxAutoLogin->isChecked() )
gs->insert( "autologinUser", ui->textBoxUsername->text() );
gs->insert( "username", ui->textBoxUsername->text() );
@@ -143,13 +160,7 @@ UsersPage::onActivate()
void
UsersPage::setShowRootPassword( bool show )
{
ui->labelChooseRootPassword->setVisible( show );
ui->labelExtraRootPassword->setVisible( show );
ui->labelRootPassword->setVisible( show );
ui->labelRootPasswordError->setVisible( show );
ui->textBoxRootPassword->setVisible( show );
ui->textBoxVerifiedRootPassword->setVisible( show );
ui->checkBoxReusePassword->setVisible( show );
m_showRootPassword = show;
}
@@ -412,6 +423,5 @@ UsersPage::onRootPasswordTextChanged( const QString& )
void
UsersPage::setAutologinDefault( bool checked )
{
ui->checkBoxLoginAuto->setChecked( checked );
ui->checkBoxLoginNormal->setChecked( !checked );
ui->checkBoxAutoLogin->setChecked( checked );
}

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>862</width>
<height>597</height>
<height>683</height>
</rect>
</property>
<property name="windowTitle">
@@ -19,10 +19,13 @@
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
<height>6</height>
</size>
</property>
</spacer>
@@ -97,10 +100,13 @@
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
<height>6</height>
</size>
</property>
</spacer>
@@ -199,14 +205,126 @@
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
<height>6</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="hostname_label_2">
<property name="text">
<string>What is the name of this computer?</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLineEdit" name="textBoxHostname">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHostname">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHostnameError">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="hostname_extra_label_2">
<property name="styleSheet">
<string>font-weight: normal</string>
</property>
<property name="text">
<string>&lt;small&gt;This name will be used if you make the computer visible to others on a network.&lt;/small&gt;</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>6</height>
</size>
</property>
</spacer>
@@ -327,120 +445,31 @@
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="hostname_label_2">
<widget class="QCheckBox" name="checkBoxAutoLogin">
<property name="text">
<string>What is the name of this computer?</string>
</property>
<property name="wordWrap">
<bool>false</bool>
<string>Log in automatically without asking for the password.</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLineEdit" name="textBoxHostname">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHostname">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHostnameError">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="hostname_extra_label_2">
<property name="styleSheet">
<string>font-weight: normal</string>
</property>
<widget class="QCheckBox" name="checkBoxReusePassword">
<property name="text">
<string>&lt;small&gt;This name will be used if you make the computer visible to others on a network.&lt;/small&gt;</string>
</property>
<property name="wordWrap">
<bool>false</bool>
<string>Use the same password for the administrator account.</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_5">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
<height>6</height>
</size>
</property>
</spacer>
@@ -560,61 +589,6 @@
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QWidget" name="widget_7" native="true">
<layout class="QGridLayout" name="gridLayout_10">
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item row="0" column="1">
<widget class="QRadioButton" name="checkBoxLoginAuto">
<property name="text">
<string>&amp;Log in automatically</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="checkBoxLoginNormal">
<property name="text">
<string>Require &amp;my password to log in</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_7">
<property name="orientation">
@@ -630,10 +604,6 @@
</item>
</layout>
</widget>
<tabstops>
<tabstop>checkBoxLoginNormal</tabstop>
<tabstop>checkBoxLoginAuto</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>