Provide virtual Partition::get_filesystem_partition() method (#774818)
There are multiple cases of code wanting to work with the Partition object directly containing the file system, regardless of whether it is within a PartitionLUKS object or not. The code had to do something similar to this to access it: const Partition * filesystem_ptn = &partition; if ( partition.filesystem == FS_LUKS && partition.busy ) filesystem_ptn = &dynamic_cast<const PartitionLUKS *>( &partition )->get_encrypted(); ... // Access Partition object directly containing the file system filesystem_ptn-> ... Implement and use virtual accessor get_filesystem_partition() which allows the code to be simplified like this: const Partition & filesystem_ptn = partition.get_filesystem_partition(); ... // Access Partition object directly containing the file system filesystem_ptn. ... Bug 774818 - Implement LUKS read-write actions NOT requiring a passphrase
This commit is contained in:
parent
2be136b9fd
commit
53fd80e6ca
|
@ -50,7 +50,6 @@ private:
|
|||
bool drawingarea_on_expose( GdkEventExpose *ev );
|
||||
|
||||
const Partition & partition; // (Alias to element in Win_GParted::display_partitions[] vector).
|
||||
const Partition * filesystem; // (Alias to above partition or encrypted file system within).
|
||||
|
||||
Gtk::HBox *hbox ;
|
||||
Gtk::DrawingArea drawingarea ;
|
||||
|
|
|
@ -131,6 +131,10 @@ public:
|
|||
void append_messages( const std::vector<Glib::ustring> msgs )
|
||||
{ messages.insert( messages.end(), msgs.begin(), msgs.end() ); }
|
||||
|
||||
// Interface to return reference to the Partition object directly containing the
|
||||
// file system. Will be overridden in derived PartitionLUKS.
|
||||
virtual const Partition & get_filesystem_partition() const { return *this; };
|
||||
|
||||
bool operator==( const Partition & partition ) const ;
|
||||
bool operator!=( const Partition & partition ) const ;
|
||||
|
||||
|
|
|
@ -53,6 +53,8 @@ public:
|
|||
virtual std::vector<Glib::ustring> get_messages() const;
|
||||
virtual void clear_messages();
|
||||
|
||||
virtual const Partition & get_filesystem_partition() const;
|
||||
|
||||
private:
|
||||
Partition encrypted;
|
||||
Sector header_size; // Size of the LUKS header (everything up to the start of the mapping)
|
||||
|
|
|
@ -30,12 +30,6 @@ namespace GParted
|
|||
|
||||
Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition ) : partition( partition )
|
||||
{
|
||||
// Filesystem points to the Partition object, or for an open LUKS mapping, the
|
||||
// encrypted Partition object member within containing the encrypted file system.
|
||||
filesystem = &partition;
|
||||
if ( partition.filesystem == FS_LUKS && partition.busy )
|
||||
filesystem = &dynamic_cast<const PartitionLUKS *>( &partition )->get_encrypted();
|
||||
|
||||
this ->set_has_separator( false ) ;
|
||||
// Set minimum dialog height so it fits on an 800x600 screen without too much
|
||||
// whitespace (~500 px max for GNOME desktop). Allow extra space if have any
|
||||
|
@ -203,7 +197,7 @@ void Dialog_Partition_Info::init_drawingarea()
|
|||
color_text .set( "black" );
|
||||
this ->get_colormap() ->alloc_color( color_text ) ;
|
||||
|
||||
color_partition.set( Utils::get_color( filesystem->filesystem ) );
|
||||
color_partition.set( Utils::get_color( partition.get_filesystem_partition().filesystem ) );
|
||||
this ->get_colormap() ->alloc_color( color_partition ) ;
|
||||
|
||||
//set text of pangolayout
|
||||
|
@ -224,11 +218,16 @@ void Dialog_Partition_Info::Display_Info()
|
|||
//+-+------------+-------------+-------------+------------+---------------+
|
||||
//0 1 2 3 4 5 6
|
||||
|
||||
// Refers to the Partition object containing the file system. Either the same as
|
||||
// partition, or for an open LUKS mapping, the encrypted Partition object member
|
||||
// within containing the encrypted file system.
|
||||
const Partition & filesystem_ptn = partition.get_filesystem_partition();
|
||||
|
||||
Sector ptn_sectors = partition .get_sector_length() ;
|
||||
|
||||
Glib::ustring vgname = "" ; //Also used in partition status message
|
||||
if ( filesystem->filesystem == FS_LVM2_PV )
|
||||
vgname = LVM2_PV_Info::get_vg_name( filesystem->get_path() );
|
||||
if ( filesystem_ptn.filesystem == FS_LVM2_PV )
|
||||
vgname = LVM2_PV_Info::get_vg_name( filesystem_ptn.get_path() );
|
||||
|
||||
bool filesystem_accessible = false;
|
||||
if ( partition.filesystem != FS_LUKS || partition.busy )
|
||||
|
@ -265,13 +264,13 @@ void Dialog_Partition_Info::Display_Info()
|
|||
Gtk::FILL ) ;
|
||||
if ( filesystem_accessible )
|
||||
{
|
||||
table->attach( *Utils::mk_label( Utils::get_filesystem_string( filesystem->filesystem ), true, false, true ),
|
||||
table->attach( *Utils::mk_label( Utils::get_filesystem_string( filesystem_ptn.filesystem ), true, false, true ),
|
||||
2, 3, top, bottom, Gtk::FILL );
|
||||
}
|
||||
top++, bottom++;
|
||||
|
||||
//label
|
||||
if ( filesystem->type != TYPE_UNALLOCATED && filesystem->type != TYPE_EXTENDED )
|
||||
if ( filesystem_ptn.type != TYPE_UNALLOCATED && filesystem_ptn.type != TYPE_EXTENDED )
|
||||
{
|
||||
table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Label:") ) + "</b>"),
|
||||
1, 2,
|
||||
|
@ -279,14 +278,14 @@ void Dialog_Partition_Info::Display_Info()
|
|||
Gtk::FILL) ;
|
||||
if ( filesystem_accessible )
|
||||
{
|
||||
table->attach( *Utils::mk_label( filesystem->get_filesystem_label(), true, false, true ),
|
||||
table->attach( *Utils::mk_label( filesystem_ptn.get_filesystem_label(), true, false, true ),
|
||||
2, 3, top, bottom, Gtk::FILL);
|
||||
}
|
||||
top++, bottom++;
|
||||
}
|
||||
|
||||
// file system uuid
|
||||
if ( filesystem->type != TYPE_UNALLOCATED && filesystem->type != TYPE_EXTENDED )
|
||||
if ( filesystem_ptn.type != TYPE_UNALLOCATED && filesystem_ptn.type != TYPE_EXTENDED )
|
||||
{
|
||||
table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("UUID:") ) + "</b>"),
|
||||
1, 2,
|
||||
|
@ -294,7 +293,7 @@ void Dialog_Partition_Info::Display_Info()
|
|||
Gtk::FILL) ;
|
||||
if ( filesystem_accessible )
|
||||
{
|
||||
table->attach( *Utils::mk_label( filesystem->uuid, true, false, true ),
|
||||
table->attach( *Utils::mk_label( filesystem_ptn.uuid, true, false, true ),
|
||||
2, 3, top, bottom, Gtk::FILL);
|
||||
}
|
||||
top++, bottom++;
|
||||
|
@ -310,7 +309,7 @@ void Dialog_Partition_Info::Display_Info()
|
|||
static Glib::ustring luks_closed = _("Closed");
|
||||
|
||||
//status
|
||||
if ( filesystem->type != TYPE_UNALLOCATED && filesystem->status != STAT_NEW )
|
||||
if ( filesystem_ptn.type != TYPE_UNALLOCATED && filesystem_ptn.status != STAT_NEW )
|
||||
{
|
||||
//status
|
||||
Glib::ustring str_temp ;
|
||||
|
@ -325,9 +324,9 @@ void Dialog_Partition_Info::Display_Info()
|
|||
*/
|
||||
str_temp = _("Not accessible (Encrypted)");
|
||||
}
|
||||
else if ( filesystem->busy )
|
||||
else if ( filesystem_ptn.busy )
|
||||
{
|
||||
if ( filesystem->type == TYPE_EXTENDED )
|
||||
if ( filesystem_ptn.type == TYPE_EXTENDED )
|
||||
{
|
||||
/* TO TRANSLATORS: Busy (At least one logical partition is mounted)
|
||||
* means that this extended partition contains at least one logical
|
||||
|
@ -335,9 +334,9 @@ void Dialog_Partition_Info::Display_Info()
|
|||
*/
|
||||
str_temp = _("Busy (At least one logical partition is mounted)") ;
|
||||
}
|
||||
else if ( filesystem->filesystem == FS_LINUX_SWAP ||
|
||||
filesystem->filesystem == FS_LINUX_SWRAID ||
|
||||
filesystem->filesystem == FS_LVM2_PV )
|
||||
else if ( filesystem_ptn.filesystem == FS_LINUX_SWAP ||
|
||||
filesystem_ptn.filesystem == FS_LINUX_SWRAID ||
|
||||
filesystem_ptn.filesystem == FS_LVM2_PV )
|
||||
{
|
||||
/* TO TRANSLATORS: Active
|
||||
* means that this linux swap, linux software raid partition, or
|
||||
|
@ -345,7 +344,7 @@ void Dialog_Partition_Info::Display_Info()
|
|||
*/
|
||||
str_temp = _("Active") ;
|
||||
}
|
||||
else if ( filesystem->filesystem == FS_LUKS )
|
||||
else if ( filesystem_ptn.filesystem == FS_LUKS )
|
||||
{
|
||||
// NOTE: LUKS within LUKS
|
||||
// Only ever display LUKS information in the file system
|
||||
|
@ -353,15 +352,15 @@ void Dialog_Partition_Info::Display_Info()
|
|||
// another LUKS encryption!
|
||||
str_temp = luks_open;
|
||||
}
|
||||
else if ( filesystem->get_mountpoints().size() )
|
||||
else if ( filesystem_ptn.get_mountpoints().size() )
|
||||
{
|
||||
str_temp = String::ucompose(
|
||||
/* TO TRANSLATORS: looks like Mounted on /mnt/mymountpoint */
|
||||
_("Mounted on %1"),
|
||||
Glib::build_path( ", ", filesystem->get_mountpoints() ) );
|
||||
Glib::build_path( ", ", filesystem_ptn.get_mountpoints() ) );
|
||||
}
|
||||
}
|
||||
else if ( filesystem->type == TYPE_EXTENDED )
|
||||
else if ( filesystem_ptn.type == TYPE_EXTENDED )
|
||||
{
|
||||
/* TO TRANSLATORS: Not busy (There are no mounted logical partitions)
|
||||
* means that this extended partition contains no mounted or otherwise
|
||||
|
@ -369,8 +368,8 @@ void Dialog_Partition_Info::Display_Info()
|
|||
*/
|
||||
str_temp = _("Not busy (There are no mounted logical partitions)") ;
|
||||
}
|
||||
else if ( filesystem->filesystem == FS_LINUX_SWAP ||
|
||||
filesystem->filesystem == FS_LINUX_SWRAID )
|
||||
else if ( filesystem_ptn.filesystem == FS_LINUX_SWAP ||
|
||||
filesystem_ptn.filesystem == FS_LINUX_SWRAID )
|
||||
{
|
||||
/* TO TRANSLATORS: Not active
|
||||
* means that this linux swap or linux software raid partition
|
||||
|
@ -378,12 +377,12 @@ void Dialog_Partition_Info::Display_Info()
|
|||
*/
|
||||
str_temp = _("Not active") ;
|
||||
}
|
||||
else if ( filesystem->filesystem == FS_LUKS )
|
||||
else if ( filesystem_ptn.filesystem == FS_LUKS )
|
||||
{
|
||||
// NOTE: LUKS within LUKS
|
||||
str_temp = luks_closed;
|
||||
}
|
||||
else if ( filesystem->filesystem == FS_LVM2_PV )
|
||||
else if ( filesystem_ptn.filesystem == FS_LVM2_PV )
|
||||
{
|
||||
if ( vgname .empty() )
|
||||
/* TO TRANSLATORS: Not active (Not a member of any volume group)
|
||||
|
@ -419,7 +418,7 @@ void Dialog_Partition_Info::Display_Info()
|
|||
}
|
||||
|
||||
//Optional, LVM2 Volume Group name
|
||||
if ( filesystem->filesystem == FS_LVM2_PV )
|
||||
if ( filesystem_ptn.filesystem == FS_LVM2_PV )
|
||||
{
|
||||
//Volume Group
|
||||
table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Volume Group:") ) + "</b>"),
|
||||
|
@ -429,18 +428,18 @@ void Dialog_Partition_Info::Display_Info()
|
|||
}
|
||||
|
||||
//Optional, members of multi-device file systems
|
||||
if ( filesystem->filesystem == FS_LVM2_PV ||
|
||||
filesystem->filesystem == FS_BTRFS )
|
||||
if ( filesystem_ptn.filesystem == FS_LVM2_PV ||
|
||||
filesystem_ptn.filesystem == FS_BTRFS )
|
||||
{
|
||||
//Members
|
||||
table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Members:") ) + "</b>", true, false, false, 0.0 /* ALIGN_TOP */ ),
|
||||
1, 2, top, bottom, Gtk::FILL ) ;
|
||||
|
||||
std::vector<Glib::ustring> members ;
|
||||
switch ( filesystem->filesystem )
|
||||
switch ( filesystem_ptn.filesystem )
|
||||
{
|
||||
case FS_BTRFS:
|
||||
members = btrfs::get_members( filesystem->get_path() );
|
||||
members = btrfs::get_members( filesystem_ptn.get_path() );
|
||||
break ;
|
||||
case FS_LVM2_PV:
|
||||
if ( ! vgname .empty() )
|
||||
|
@ -454,7 +453,7 @@ void Dialog_Partition_Info::Display_Info()
|
|||
2, 3, top++, bottom++, Gtk::FILL );
|
||||
}
|
||||
|
||||
if ( filesystem->filesystem == FS_LVM2_PV )
|
||||
if ( filesystem_ptn.filesystem == FS_LVM2_PV )
|
||||
{
|
||||
//Logical Volumes
|
||||
table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Logical Volumes:") ) + "</b>", true, false, false, 0.0 /* ALIGN_TOP */ ),
|
||||
|
|
|
@ -100,12 +100,7 @@ void DrawingAreaVisualDisk::set_static_data( const PartitionVector & partitions,
|
|||
Sector partition_length = partitions[ t ] .get_sector_length() ;
|
||||
visual_partitions .back() .fraction = partition_length / static_cast<double>( length ) ;
|
||||
|
||||
Glib::ustring color_str = Utils::get_color( partitions[t].filesystem );
|
||||
if ( partitions[t].filesystem == FS_LUKS && partitions[t].busy )
|
||||
{
|
||||
const Partition & encrypted = dynamic_cast<const PartitionLUKS *>( &partitions[t] )->get_encrypted();
|
||||
color_str = Utils::get_color( encrypted.filesystem );
|
||||
}
|
||||
Glib::ustring color_str = Utils::get_color( partitions[t].get_filesystem_partition().filesystem );
|
||||
visual_partitions.back().color.set( color_str );
|
||||
get_colormap() ->alloc_color( visual_partitions .back() .color );
|
||||
|
||||
|
|
|
@ -201,4 +201,11 @@ void PartitionLUKS::clear_messages()
|
|||
encrypted.clear_messages();
|
||||
}
|
||||
|
||||
const Partition & PartitionLUKS::get_filesystem_partition() const
|
||||
{
|
||||
if ( busy )
|
||||
return encrypted;
|
||||
return *this;
|
||||
}
|
||||
|
||||
} //GParted
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <gtkmm/cellrenderer.h>
|
||||
#include <gtkmm/cellrenderertext.h>
|
||||
#include <pangomm/layout.h>
|
||||
#include <glibmm/ustring.h>
|
||||
|
||||
namespace GParted
|
||||
{
|
||||
|
@ -154,10 +155,8 @@ void TreeView_Detail::create_row( const Gtk::TreeRow & treerow,
|
|||
bool & show_mountpoints,
|
||||
bool & show_labels )
|
||||
{
|
||||
const Partition * filesystem_ptn = &partition;
|
||||
if ( partition.filesystem == FS_LUKS && partition.busy )
|
||||
filesystem_ptn = &dynamic_cast<const PartitionLUKS *>( &partition )->get_encrypted();
|
||||
if ( filesystem_ptn->busy )
|
||||
const Partition & filesystem_ptn = partition.get_filesystem_partition();
|
||||
if ( filesystem_ptn.busy )
|
||||
treerow[ treeview_detail_columns .icon1 ] =
|
||||
render_icon( Gtk::Stock::DIALOG_AUTHENTICATION, Gtk::ICON_SIZE_BUTTON );
|
||||
|
||||
|
@ -183,42 +182,32 @@ void TreeView_Detail::create_row( const Gtk::TreeRow & treerow,
|
|||
if ( ! partition.name.empty() )
|
||||
show_names = true;
|
||||
|
||||
// file system
|
||||
treerow[treeview_detail_columns.color] = Utils::get_color_as_pixbuf( filesystem_ptn.filesystem, 16, 16 );
|
||||
if ( partition.filesystem == FS_LUKS && partition.busy )
|
||||
{
|
||||
const Partition & encrypted = dynamic_cast<const PartitionLUKS *>( &partition )->get_encrypted();
|
||||
|
||||
// file system
|
||||
treerow[treeview_detail_columns.color] = Utils::get_color_as_pixbuf( encrypted.filesystem, 16, 16 );
|
||||
/* TO TRANSLATORS: means that this is an encrypted file system */
|
||||
treerow[treeview_detail_columns.filesystem] = "[" + Glib::ustring( _("Encrypted") ) + "] " +
|
||||
Utils::get_filesystem_string( encrypted.filesystem );
|
||||
|
||||
// mount point
|
||||
treerow[treeview_detail_columns.mountpoint] = Glib::build_path( ", ", encrypted.get_mountpoints() );
|
||||
}
|
||||
else if ( partition.filesystem == FS_LUKS && ! partition.busy )
|
||||
{
|
||||
// file system
|
||||
treerow[treeview_detail_columns.color] = Utils::get_color_as_pixbuf( partition.filesystem, 16, 16 );
|
||||
treerow[treeview_detail_columns.filesystem] = "[" + Glib::ustring( _("Encrypted") ) + "]";
|
||||
|
||||
// mount point
|
||||
treerow[treeview_detail_columns.mountpoint] = Glib::build_path( ", ", partition.get_mountpoints() );
|
||||
}
|
||||
else
|
||||
{
|
||||
// file system
|
||||
treerow[treeview_detail_columns.color] = Utils::get_color_as_pixbuf( partition.filesystem, 16, 16 );
|
||||
treerow[treeview_detail_columns.filesystem] = Utils::get_filesystem_string( partition.filesystem );
|
||||
|
||||
// mount point
|
||||
treerow[treeview_detail_columns.mountpoint] = Glib::build_path( ", ", partition.get_mountpoints() );
|
||||
}
|
||||
if ( ! static_cast<Glib::ustring>( treerow[treeview_detail_columns.mountpoint] ).empty() )
|
||||
|
||||
// mount point
|
||||
std::vector<Glib::ustring> temp_mountpoints = filesystem_ptn.get_mountpoints();
|
||||
treerow[treeview_detail_columns.mountpoint] = Glib::build_path( ", ", temp_mountpoints );
|
||||
if ( ! temp_mountpoints.empty() )
|
||||
show_mountpoints = true;
|
||||
|
||||
//label
|
||||
Glib::ustring temp_filesystem_label = partition.get_filesystem_label();
|
||||
Glib::ustring temp_filesystem_label = filesystem_ptn.get_filesystem_label();
|
||||
treerow[treeview_detail_columns.label] = temp_filesystem_label;
|
||||
if ( ! temp_filesystem_label.empty() )
|
||||
show_labels = true;
|
||||
|
|
Loading…
Reference in New Issue