improved errorhandling a bit. At the initialscan we store errors/warnings

* improved errorhandling a bit. At the initialscan we store
  errors/warnings now in a list per partition and show the in the
  partitioninfo dialog.
  While executing an operation we collect all libparted exceptions in
  a list and attach this list to the operationdetails when everything
  is done.
This commit is contained in:
Bart Hakvoort 2006-07-30 15:13:41 +00:00
parent b823356110
commit 677a21f50a
21 changed files with 123 additions and 100 deletions

View File

@ -1,3 +1,12 @@
2006-07-30 Bart Hakvoort <hakvoort@cvs.gnome.org>
* improved errorhandling a bit. At the initialscan we store
errors/warnings now in a list per partition and show the in the
partitioninfo dialog.
While executing an operation we collect all libparted exceptions in
a list and attach this list to the operationdetails when everything
is done.
2006-07-29 Bart Hakvoort <hakvoort@cvs.gnome.org> 2006-07-29 Bart Hakvoort <hakvoort@cvs.gnome.org>
* renamed some enums * renamed some enums

View File

@ -52,6 +52,7 @@ private:
Partition partition ; Partition partition ;
Gtk::HBox *hbox ; Gtk::HBox *hbox ;
Gtk::VBox *vbox ;
Gtk::DrawingArea drawingarea ; Gtk::DrawingArea drawingarea ;
Gtk::Frame *frame ; Gtk::Frame *frame ;
Gtk::Image *image; Gtk::Image *image;

View File

@ -66,6 +66,7 @@ private:
Glib::RefPtr<Gdk::Pixbuf> icon_execute ; Glib::RefPtr<Gdk::Pixbuf> icon_execute ;
Glib::RefPtr<Gdk::Pixbuf> icon_succes ; Glib::RefPtr<Gdk::Pixbuf> icon_succes ;
Glib::RefPtr<Gdk::Pixbuf> icon_error ; Glib::RefPtr<Gdk::Pixbuf> icon_error ;
Glib::RefPtr<Gdk::Pixbuf> icon_info ;
Glib::RefPtr<Gdk::Pixbuf> icon_n_a ; Glib::RefPtr<Gdk::Pixbuf> icon_n_a ;
Glib::RefPtr<Gtk::TreeStore> treestore_operations; Glib::RefPtr<Gtk::TreeStore> treestore_operations;

View File

@ -31,7 +31,8 @@ enum OperationDetailStatus {
STATUS_EXECUTE = 1, STATUS_EXECUTE = 1,
STATUS_SUCCES = 2, STATUS_SUCCES = 2,
STATUS_ERROR = 3, STATUS_ERROR = 3,
STATUS_N_A = 4 STATUS_INFO = 4,
STATUS_N_A = 5
}; };
enum Font { enum Font {

View File

@ -103,7 +103,7 @@ public:
Gdk::Color color; Gdk::Color color;
bool inside_extended; bool inside_extended;
bool busy; bool busy;
Glib::ustring error; std::vector<Glib::ustring> messages ;
std::vector<Glib::ustring> flags ; std::vector<Glib::ustring> flags ;
std::vector<Partition> logicals ; std::vector<Partition> logicals ;

View File

@ -35,8 +35,8 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition )
//add label for detail and fill with relevant info //add label for detail and fill with relevant info
Display_Info() ; Display_Info() ;
//display error (if any) //display messages (if any)
if ( partition .error != "" ) if ( partition .messages .size() > 0 )
{ {
frame = manage( new Gtk::Frame() ); frame = manage( new Gtk::Frame() );
frame ->set_border_width( 10 ); frame ->set_border_width( 10 );
@ -45,12 +45,23 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition )
hbox = manage( new Gtk::HBox() ); hbox = manage( new Gtk::HBox() );
hbox ->pack_start( *image, Gtk::PACK_SHRINK ) ; hbox ->pack_start( *image, Gtk::PACK_SHRINK ) ;
hbox ->pack_start( * Utils::mk_label( "<b> " + static_cast<Glib::ustring>(_( "Warning:") ) + " </b>" ), hbox ->pack_start( * Utils::mk_label( "<b> " + Glib::ustring(_("Warning:") ) + " </b>" ),
Gtk::PACK_SHRINK ) ; Gtk::PACK_SHRINK ) ;
frame ->set_label_widget( *hbox ) ; frame ->set_label_widget( *hbox ) ;
frame ->add( * Utils::mk_label( //FIXME: for more clarity we should add a listview here with alternating rowcolors..
"<i>" + partition .error + "</i>", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, true ) ) ; //that way it's easier to tell messages apart..
vbox = manage( new Gtk::VBox( false, 4 ) );
vbox ->set_border_width( 5 ) ;
for ( unsigned int t = 0 ; t < partition .messages .size() ; t++ )
vbox ->pack_start( * Utils::mk_label( "<i>" + partition .messages[t] + "</i>",
true,
Gtk::ALIGN_LEFT,
Gtk::ALIGN_CENTER,
true ),
Gtk::PACK_SHRINK ) ;
frame ->add( *vbox ) ;
this ->get_vbox() ->pack_start( *frame, Gtk::PACK_SHRINK ) ; this ->get_vbox() ->pack_start( *frame, Gtk::PACK_SHRINK ) ;
} }
@ -137,7 +148,7 @@ void Dialog_Partition_Info::Display_Info()
this ->get_vbox() ->pack_start( *table, Gtk::PACK_SHRINK ) ; this ->get_vbox() ->pack_start( *table, Gtk::PACK_SHRINK ) ;
//filesystem //filesystem
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Filesystem:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Filesystem:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL ) ; Gtk::FILL ) ;
@ -147,7 +158,7 @@ void Dialog_Partition_Info::Display_Info()
Gtk::FILL ) ; Gtk::FILL ) ;
//size //size
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Size:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Size:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL) ; Gtk::FILL) ;
@ -163,7 +174,7 @@ void Dialog_Partition_Info::Display_Info()
Utils::round( partition .sectors_used / static_cast<double>( partition .get_length() ) * 100 ) ; Utils::round( partition .sectors_used / static_cast<double>( partition .get_length() ) * 100 ) ;
//used //used
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Used:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Used:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL ) ; Gtk::FILL ) ;
@ -177,7 +188,7 @@ void Dialog_Partition_Info::Display_Info()
Gtk::FILL ) ; Gtk::FILL ) ;
//unused //unused
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Unused:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Unused:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL ) ; Gtk::FILL ) ;
@ -194,7 +205,7 @@ void Dialog_Partition_Info::Display_Info()
//flags //flags
if ( partition.type != GParted::TYPE_UNALLOCATED ) if ( partition.type != GParted::TYPE_UNALLOCATED )
{ {
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Flags:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Flags:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL ) ; Gtk::FILL ) ;
@ -210,7 +221,7 @@ void Dialog_Partition_Info::Display_Info()
if ( partition .type != GParted::TYPE_UNALLOCATED && partition .status != GParted::STAT_NEW ) if ( partition .type != GParted::TYPE_UNALLOCATED && partition .status != GParted::STAT_NEW )
{ {
//path //path
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Path:") ) + "</b>", table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Path:") ) + "</b>",
true, true,
Gtk::ALIGN_LEFT, Gtk::ALIGN_LEFT,
Gtk::ALIGN_TOP ), Gtk::ALIGN_TOP ),
@ -224,7 +235,7 @@ void Dialog_Partition_Info::Display_Info()
//status //status
Glib::ustring str_temp ; Glib::ustring str_temp ;
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Status:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Status:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL ) ; Gtk::FILL ) ;
@ -252,7 +263,7 @@ void Dialog_Partition_Info::Display_Info()
table ->attach( * Utils::mk_label( "" ), 1, 2, top++, bottom++, Gtk::FILL ) ; table ->attach( * Utils::mk_label( "" ), 1, 2, top++, bottom++, Gtk::FILL ) ;
//first sector //first sector
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("First Sector:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("First Sector:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL ) ; Gtk::FILL ) ;
@ -262,7 +273,7 @@ void Dialog_Partition_Info::Display_Info()
Gtk::FILL ) ; Gtk::FILL ) ;
//last sector //last sector
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Last Sector:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Last Sector:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL ) ; Gtk::FILL ) ;
@ -272,7 +283,7 @@ void Dialog_Partition_Info::Display_Info()
Gtk::FILL ) ; Gtk::FILL ) ;
//total sectors //total sectors
table ->attach( * Utils::mk_label( "<b>" + static_cast<Glib::ustring>( _("Total Sectors:") ) + "</b>" ), table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Total Sectors:") ) + "</b>" ),
0, 1, 0, 1,
top, bottom, top, bottom,
Gtk::FILL ) ; Gtk::FILL ) ;

View File

@ -61,7 +61,8 @@ void Dialog_Partition_Resize_Move::Set_Data( const Partition & selected_partitio
void Dialog_Partition_Resize_Move::Resize_Move_Normal( const std::vector<Partition> & partitions ) void Dialog_Partition_Resize_Move::Resize_Move_Normal( const std::vector<Partition> & partitions )
{ {
if ( ! selected_partition .error .empty() ) //little bit of paranoia ;)
if ( selected_partition .sectors_used == -1 )
fs .shrink = GParted::FS::NONE ; fs .shrink = GParted::FS::NONE ;
//see if we need a fixed_start //see if we need a fixed_start

View File

@ -61,6 +61,7 @@ Dialog_Progress::Dialog_Progress( const std::vector<Operation *> & operations )
icon_execute = render_icon( Gtk::Stock::EXECUTE, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ; icon_execute = render_icon( Gtk::Stock::EXECUTE, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
icon_succes = render_icon( Gtk::Stock::APPLY, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ; icon_succes = render_icon( Gtk::Stock::APPLY, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
icon_error = render_icon( Gtk::Stock::DIALOG_ERROR, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ; icon_error = render_icon( Gtk::Stock::DIALOG_ERROR, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
icon_info = render_icon( Gtk::Stock::INFO, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
icon_n_a = render_icon( Gtk::Stock::DIALOG_WARNING, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ; icon_n_a = render_icon( Gtk::Stock::DIALOG_WARNING, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
treestore_operations = Gtk::TreeStore::create( treeview_operations_columns ); treestore_operations = Gtk::TreeStore::create( treeview_operations_columns );
@ -141,6 +142,10 @@ void Dialog_Progress::update_operation_details( const Gtk::TreeRow & treerow,
case STATUS_ERROR: case STATUS_ERROR:
treerow[ treeview_operations_columns .status_icon ] = icon_error ; treerow[ treeview_operations_columns .status_icon ] = icon_error ;
break ;
case STATUS_INFO:
treerow[ treeview_operations_columns .status_icon ] = icon_info ;
break ; break ;
case STATUS_N_A: case STATUS_N_A:
treerow[ treeview_operations_columns .status_icon ] = icon_n_a ; treerow[ treeview_operations_columns .status_icon ] = icon_n_a ;

View File

@ -40,7 +40,7 @@
#include <cerrno> #include <cerrno>
#include <sys/statvfs.h> #include <sys/statvfs.h>
Glib::ustring ped_error ; //see e.g. ped_exception_handler() std::vector<Glib::ustring> libparted_messages ; //see ped_exception_handler()
namespace GParted namespace GParted
{ {
@ -283,31 +283,49 @@ bool GParted_Core::snap_to_cylinder( const Device & device, Partition & partitio
bool GParted_Core::apply_operation_to_disk( Operation * operation ) bool GParted_Core::apply_operation_to_disk( Operation * operation )
{ {
bool succes = false ;
libparted_messages .clear() ;
switch ( operation ->type ) switch ( operation ->type )
{ {
case OPERATION_DELETE: case OPERATION_DELETE:
return Delete( operation ->partition_original, operation ->operation_detail .sub_details ) ; succes = Delete( operation ->partition_original, operation ->operation_detail .sub_details ) ;
break ;
case OPERATION_CREATE: case OPERATION_CREATE:
return create( operation ->device, succes = create( operation ->device,
operation ->partition_new, operation ->partition_new,
operation ->operation_detail .sub_details ) ; operation ->operation_detail .sub_details ) ;
break ;
case OPERATION_RESIZE_MOVE: case OPERATION_RESIZE_MOVE:
return resize_move( operation ->device, succes = resize_move( operation ->device,
operation ->partition_original, operation ->partition_original,
operation ->partition_new, operation ->partition_new,
operation ->operation_detail .sub_details ) ; operation ->operation_detail .sub_details ) ;
break ;
case OPERATION_FORMAT: case OPERATION_FORMAT:
return format( operation ->partition_new, operation ->operation_detail .sub_details ) ; succes = format( operation ->partition_new, operation ->operation_detail .sub_details ) ;
break ;
case OPERATION_COPY: case OPERATION_COPY:
operation ->partition_new .add_path( operation ->partition_original .get_path(), true ) ; operation ->partition_new .add_path( operation ->partition_original .get_path(), true ) ;
return copy( static_cast<OperationCopy*>( operation ) ->partition_copied, succes = copy( static_cast<OperationCopy*>( operation ) ->partition_copied,
operation ->partition_new, operation ->partition_new,
static_cast<OperationCopy*>( operation ) ->partition_copied .get_length(), static_cast<OperationCopy*>( operation ) ->partition_copied .get_length(),
static_cast<OperationCopy*>( operation ) ->block_size, static_cast<OperationCopy*>( operation ) ->block_size,
operation ->operation_detail .sub_details ) ; operation ->operation_detail .sub_details ) ;
break ;
} }
return false ; if ( ! succes && libparted_messages .size() > 0 )
{
operation ->operation_detail .sub_details .push_back(
OperationDetail( _("libparted messages"), STATUS_INFO ) ) ;
for ( unsigned int t = 0 ; t < libparted_messages .size() ; t++ )
operation ->operation_detail .sub_details .back() .sub_details .push_back(
OperationDetail( libparted_messages[ t ], STATUS_NONE, FONT_ITALIC ) ) ;
}
return succes ;
} }
bool GParted_Core::set_disklabel( const Glib::ustring & device_path, const Glib::ustring & disklabel ) bool GParted_Core::set_disklabel( const Glib::ustring & device_path, const Glib::ustring & disklabel )
@ -563,6 +581,7 @@ void GParted_Core::set_device_partitions( Device & device )
lp_partition = ped_disk_next_partition( lp_disk, NULL ) ; lp_partition = ped_disk_next_partition( lp_disk, NULL ) ;
while ( lp_partition ) while ( lp_partition )
{ {
libparted_messages .clear() ;
partition_temp .Reset() ; partition_temp .Reset() ;
switch ( lp_partition ->type ) switch ( lp_partition ->type )
@ -613,6 +632,10 @@ void GParted_Core::set_device_partitions( Device & device )
break; break;
} }
partition_temp .messages .insert( partition_temp .messages .end(),
libparted_messages. begin(),
libparted_messages .end() ) ;
//if there's an end, there's a partition ;) //if there's an end, there's a partition ;)
if ( partition_temp .sector_end > -1 ) if ( partition_temp .sector_end > -1 )
{ {
@ -683,13 +706,15 @@ GParted::FILESYSTEM GParted_Core::get_filesystem()
return GParted::FS_REISER4 ; return GParted::FS_REISER4 ;
//no filesystem found.... //no filesystem found....
partition_temp .error = _( "Unable to detect filesystem! Possible reasons are:" ) ; temp = _( "Unable to detect filesystem! Possible reasons are:" ) ;
partition_temp .error += "\n-"; temp += "\n-";
partition_temp .error += _( "The filesystem is damaged" ) ; temp += _( "The filesystem is damaged" ) ;
partition_temp .error += "\n-" ; temp += "\n-" ;
partition_temp .error += _( "The filesystem is unknown to GParted" ) ; temp += _( "The filesystem is unknown to GParted" ) ;
partition_temp .error += "\n-"; temp += "\n-";
partition_temp .error += _( "There is no filesystem available (unformatted)" ) ; temp += _( "There is no filesystem available (unformatted)" ) ;
partition_temp .messages .push_back( temp ) ;
return GParted::FS_UNKNOWN ; return GParted::FS_UNKNOWN ;
} }
@ -764,7 +789,7 @@ void GParted_Core::set_mountpoints( std::vector<Partition> & partitions )
} }
if ( partitions[ t ] .get_mountpoints() .empty() ) if ( partitions[ t ] .get_mountpoints() .empty() )
partitions[ t ] .error = _("Unable to find mountpoint") ; partitions[ t ] .messages .push_back( _("Unable to find mountpoint") ) ;
} }
else else
{ {
@ -785,8 +810,6 @@ void GParted_Core::set_used_sectors( std::vector<Partition> & partitions )
temp = _("Unable to read the contents of this filesystem!") ; temp = _("Unable to read the contents of this filesystem!") ;
temp += "\n" ; temp += "\n" ;
temp += _("Because of this some operations may be unavailable.") ; temp += _("Because of this some operations may be unavailable.") ;
temp += "\n\n" ;
temp += _("Did you install the correct plugin for this filesystem?") ;
for ( unsigned int t = 0 ; t < partitions .size() ; t++ ) for ( unsigned int t = 0 ; t < partitions .size() ; t++ )
{ {
@ -803,11 +826,11 @@ void GParted_Core::set_used_sectors( std::vector<Partition> & partitions )
if ( statvfs( partitions[ t ] .get_mountpoint() .c_str(), &sfs ) == 0 ) if ( statvfs( partitions[ t ] .get_mountpoint() .c_str(), &sfs ) == 0 )
partitions[ t ] .Set_Unused( sfs .f_bfree * (sfs .f_bsize / 512) ) ; partitions[ t ] .Set_Unused( sfs .f_bfree * (sfs .f_bsize / 512) ) ;
else else
partitions[ t ] .error = partitions[ t ] .messages .push_back(
"statvfs (" + "statvfs (" +
partitions[ t ] .get_mountpoint() + partitions[ t ] .get_mountpoint() +
"): " + "): " +
Glib::strerror( errno ) ; Glib::strerror( errno ) ) ;
} }
} }
else else
@ -827,8 +850,8 @@ void GParted_Core::set_used_sectors( std::vector<Partition> & partitions )
} }
} }
if ( partitions[ t ] .sectors_used == -1 && partitions[ t ] .error .empty() ) if ( partitions[ t ] .sectors_used == -1 )
partitions[ t ] .error = temp ; partitions[ t ] .messages .push_back( temp ) ;
} }
else if ( partitions[ t ] .type == GParted::TYPE_EXTENDED ) else if ( partitions[ t ] .type == GParted::TYPE_EXTENDED )
@ -866,9 +889,6 @@ void GParted_Core::LP_set_used_sectors( Partition & partition )
} }
} }
} }
if ( partition .sectors_used == -1 )
partition .error = ped_error ;
} }
void GParted_Core::set_flags( Partition & partition ) void GParted_Core::set_flags( Partition & partition )
@ -883,7 +903,6 @@ bool GParted_Core::create( const Device & device,
Partition & new_partition, Partition & new_partition,
std::vector<OperationDetail> & operation_details ) std::vector<OperationDetail> & operation_details )
{ {
if ( new_partition .type == GParted::TYPE_EXTENDED ) if ( new_partition .type == GParted::TYPE_EXTENDED )
{ {
return create_partition( new_partition, operation_details ) ; return create_partition( new_partition, operation_details ) ;
@ -907,7 +926,6 @@ bool GParted_Core::create_partition( Partition & new_partition,
operation_details .push_back( OperationDetail( _("create empty partition") ) ) ; operation_details .push_back( OperationDetail( _("create empty partition") ) ) ;
new_partition .partition_number = 0 ; new_partition .partition_number = 0 ;
ped_error .clear() ;
if ( open_device_and_disk( new_partition .device_path ) ) if ( open_device_and_disk( new_partition .device_path ) )
{ {
@ -1007,10 +1025,6 @@ bool GParted_Core::create_partition( Partition & new_partition,
} }
else else
{ {
if ( ! ped_error .empty() )
operation_details .back() .sub_details .push_back(
OperationDetail( ped_error, STATUS_NONE, FONT_ITALIC ) ) ;
operation_details .back() .status = STATUS_ERROR ; operation_details .back() .status = STATUS_ERROR ;
return false ; return false ;
@ -1290,10 +1304,6 @@ bool GParted_Core::move_filesystem_using_gparted( const Partition & partition_ol
if ( ! error_message .empty() ) if ( ! error_message .empty() )
operation_details .push_back( operation_details .push_back(
OperationDetail( error_message, STATUS_NONE, FONT_ITALIC ) ) ; OperationDetail( error_message, STATUS_NONE, FONT_ITALIC ) ) ;
if ( ! ped_error .empty() )
operation_details .push_back(
OperationDetail( ped_error, STATUS_NONE, FONT_ITALIC ) ) ;
} }
} }
@ -1337,9 +1347,6 @@ bool GParted_Core::resize_move_filesystem_using_libparted( const Partition & par
close_device_and_disk() ; close_device_and_disk() ;
} }
if ( ! return_value && ! ped_error .empty() )
operation_details .push_back( OperationDetail( ped_error, STATUS_NONE, FONT_ITALIC ) ) ;
return return_value ; return return_value ;
} }
@ -1467,7 +1474,6 @@ bool GParted_Core::resize_move_partition( const Partition & partition_old,
PedConstraint *constraint = NULL ; PedConstraint *constraint = NULL ;
lp_partition = NULL ; lp_partition = NULL ;
ped_error .clear() ;
if ( open_device_and_disk( partition_old .device_path ) ) if ( open_device_and_disk( partition_old .device_path ) )
{ {
@ -1513,9 +1519,6 @@ bool GParted_Core::resize_move_partition( const Partition & partition_old,
STATUS_NONE, STATUS_NONE,
FONT_ITALIC ) ) ; FONT_ITALIC ) ) ;
} }
else if ( ! ped_error .empty() )
operation_details .back() .sub_details .push_back(
OperationDetail( ped_error, STATUS_NONE, FONT_ITALIC ) ) ;
if ( partition_old .type == GParted::TYPE_EXTENDED ) if ( partition_old .type == GParted::TYPE_EXTENDED )
{ {
@ -1744,10 +1747,6 @@ bool GParted_Core::copy_filesystem( const Partition & partition_src,
if ( ! error_message .empty() ) if ( ! error_message .empty() )
operation_details .push_back( operation_details .push_back(
OperationDetail( error_message, STATUS_NONE, FONT_ITALIC ) ) ; OperationDetail( error_message, STATUS_NONE, FONT_ITALIC ) ) ;
if ( ! ped_error .empty() )
operation_details .push_back(
OperationDetail( ped_error, STATUS_NONE, FONT_ITALIC ) ) ;
} }
//close the devices.. //close the devices..
@ -1879,7 +1878,6 @@ bool GParted_Core::calculate_exact_geom( const Partition & partition_old,
STATUS_NONE, STATUS_NONE,
FONT_ITALIC ) ) ; FONT_ITALIC ) ) ;
ped_error .clear() ;
bool succes = false ; bool succes = false ;
if ( open_device_and_disk( partition_old .device_path ) ) if ( open_device_and_disk( partition_old .device_path ) )
{ {
@ -1905,6 +1903,7 @@ bool GParted_Core::calculate_exact_geom( const Partition & partition_old,
//FIXME: if we insert a weird partitionnew geom here (e.g. start > end) //FIXME: if we insert a weird partitionnew geom here (e.g. start > end)
//ped_disk_set_partition_geom() will still return true (althoug an lp exception is written //ped_disk_set_partition_geom() will still return true (althoug an lp exception is written
//to stdout.. see if this also affect create_partition and resize_move_partition //to stdout.. see if this also affect create_partition and resize_move_partition
//sended a patch to fix this to libparted list. will probably be in 1.7.2
if ( ped_disk_set_partition_geom( lp_disk, if ( ped_disk_set_partition_geom( lp_disk,
lp_partition, lp_partition,
constraint, constraint,
@ -1935,9 +1934,6 @@ bool GParted_Core::calculate_exact_geom( const Partition & partition_old,
STATUS_NONE, STATUS_NONE,
FONT_ITALIC ) ) ; FONT_ITALIC ) ) ;
} }
else if ( ! ped_error .empty() )
operation_details .back() .sub_details .push_back(
OperationDetail( ped_error, STATUS_NONE, FONT_ITALIC ) ) ;
operation_details .back() .status = succes ? STATUS_SUCCES : STATUS_ERROR ; operation_details .back() .status = succes ? STATUS_SUCCES : STATUS_ERROR ;
return succes ; return succes ;
@ -2018,9 +2014,6 @@ bool GParted_Core::erase_filesystem_signatures( const Partition & partition )
//FIXME open_device( _and_disk) and the close functions should take an PedDevice * and PedDisk * as argument //FIXME open_device( _and_disk) and the close functions should take an PedDevice * and PedDisk * as argument
//basicly we should get rid of these global lp_device and lp_disk //basicly we should get rid of these global lp_device and lp_disk
//also, it would be cool to create another open_device_and_disk() which also accepts an operation_details....
//we don't have to show the opening as an operation in itself, but we could use it to report errors which might
//occur while opening the device or disk.
bool GParted_Core::open_device( const Glib::ustring & device_path ) bool GParted_Core::open_device( const Glib::ustring & device_path )
{ {
lp_device = ped_device_get( device_path .c_str() ); lp_device = ped_device_get( device_path .c_str() );
@ -2078,7 +2071,8 @@ bool GParted_Core::commit()
PedExceptionOption GParted_Core::ped_exception_handler( PedException * e ) PedExceptionOption GParted_Core::ped_exception_handler( PedException * e )
{ {
std::cout << e ->message << std::endl ; std::cout << e ->message << std::endl ;
ped_error = e ->message ;
libparted_messages .push_back( e->message ) ;
return PED_EXCEPTION_UNHANDLED ; return PED_EXCEPTION_UNHANDLED ;
} }

View File

@ -35,7 +35,7 @@ Partition::Partition( const Glib::ustring & path )
void Partition::Reset() void Partition::Reset()
{ {
paths .clear() ; paths .clear() ;
error .clear() ; messages .clear() ;
status = GParted::STAT_REAL ; status = GParted::STAT_REAL ;
type = GParted::TYPE_UNALLOCATED ; type = GParted::TYPE_UNALLOCATED ;
filesystem = GParted::FS_UNALLOCATED ; filesystem = GParted::FS_UNALLOCATED ;

View File

@ -152,7 +152,7 @@ void TreeView_Detail::create_row( const Gtk::TreeRow & treerow, const Partition
treerow[ treeview_detail_columns .icon1 ] = treerow[ treeview_detail_columns .icon1 ] =
render_icon( Gtk::Stock::DIALOG_AUTHENTICATION, Gtk::ICON_SIZE_BUTTON ); render_icon( Gtk::Stock::DIALOG_AUTHENTICATION, Gtk::ICON_SIZE_BUTTON );
if ( ! partition .error .empty() ) if ( partition .messages .size() > 0 )
{ {
if ( ! static_cast< Glib::RefPtr<Gdk::Pixbuf> >( treerow[ treeview_detail_columns .icon1 ] ) ) if ( ! static_cast< Glib::RefPtr<Gdk::Pixbuf> >( treerow[ treeview_detail_columns .icon1 ] ) )
treerow[ treeview_detail_columns .icon1 ] = treerow[ treeview_detail_columns .icon1 ] =

View File

@ -1289,8 +1289,8 @@ void Win_GParted::activate_paste()
{ {
Dialog_Partition_Copy dialog( gparted_core .get_fs( copied_partition .filesystem ), Dialog_Partition_Copy dialog( gparted_core .get_fs( copied_partition .filesystem ),
devices[ current_device ] .cylsize ) ; devices[ current_device ] .cylsize ) ;
//we don't need the errors/mountpoints of the source partition. //we don't need the messages/mountpoints of the source partition.
copied_partition .error .clear() ; copied_partition .messages .clear() ;
copied_partition .clear_mountpoints() ; copied_partition .clear_mountpoints() ;
dialog .Set_Data( selected_partition, copied_partition ) ; dialog .Set_Data( selected_partition, copied_partition ) ;
dialog .set_transient_for( *this ); dialog .set_transient_for( *this );
@ -1308,7 +1308,7 @@ void Win_GParted::activate_paste()
partition_new .filesystem = copied_partition .filesystem ; partition_new .filesystem = copied_partition .filesystem ;
partition_new .color = copied_partition .color ; partition_new .color = copied_partition .color ;
partition_new .set_used( copied_partition .sectors_used ) ; partition_new .set_used( copied_partition .sectors_used ) ;
partition_new .error .clear() ; partition_new .messages .clear() ;
partition_new .status = GParted::STAT_COPY ; partition_new .status = GParted::STAT_COPY ;
//FIXME: in this case there's no window presented to the user, so he cannot choose the blocksize //FIXME: in this case there's no window presented to the user, so he cannot choose the blocksize

View File

@ -69,7 +69,7 @@ void ext2::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ; partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool ext2::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool ext2::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )

View File

@ -70,7 +70,7 @@ void ext3::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ; partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool ext3::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool ext3::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )

View File

@ -70,7 +70,7 @@ void fat16::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ; partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool fat16::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool fat16::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )

View File

@ -69,7 +69,7 @@ void fat32::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ; partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool fat32::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool fat32::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )

View File

@ -90,7 +90,7 @@ void jfs::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ; partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool jfs::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool jfs::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )

View File

@ -67,7 +67,7 @@ void ntfs::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( N ) ; partition .Set_Unused( N ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool ntfs::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool ntfs::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )

View File

@ -68,7 +68,7 @@ void reiser4::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ; partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool reiser4::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool reiser4::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )

View File

@ -73,7 +73,7 @@ void reiserfs::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ; partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool reiserfs::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool reiserfs::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )

View File

@ -92,7 +92,7 @@ void xfs::Set_Used_Sectors( Partition & partition )
partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ; partition .Set_Unused( Utils::round( N * ( S / 512.0 ) ) ) ;
} }
else else
partition .error = error ; partition .messages .push_back( error ) ;
} }
bool xfs::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details ) bool xfs::Create( const Partition & new_partition, std::vector<OperationDetail> & operation_details )