Enhanced move/resize functionality - Only move start sector if dialog space before value is changed.
svn path=/trunk/; revision=1070
This commit is contained in:
parent
ad078627d5
commit
42b63cc274
|
@ -1,5 +1,10 @@
|
||||||
2009-02-16 Curtis Gedak <gedakc@gmail.com>
|
2009-02-16 Curtis Gedak <gedakc@gmail.com>
|
||||||
|
|
||||||
|
* src/Dialog_Base_Partition.cc,
|
||||||
|
src/GParted_Core.cc: Enhanced move/resize functionality.
|
||||||
|
- Only move start sector if dialog space before value is changed.
|
||||||
|
- Closes GParted bug #571151
|
||||||
|
|
||||||
* include/Partition.h,
|
* include/Partition.h,
|
||||||
src/Partition.cc: Added strict_start indicator.
|
src/Partition.cc: Added strict_start indicator.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 2004, 2005, 2006, 2007, 2008 Bart Hakvoort
|
/* Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Bart Hakvoort
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -152,6 +152,10 @@ Partition Dialog_Base_Partition::Get_New_Partition()
|
||||||
//set indicator of whether to use strict sector values, or to round to cylinders
|
//set indicator of whether to use strict sector values, or to round to cylinders
|
||||||
selected_partition .strict = ! checkbutton_round_to_cylinders .get_active() ;
|
selected_partition .strict = ! checkbutton_round_to_cylinders .get_active() ;
|
||||||
|
|
||||||
|
//if the original before value has not changed, then set indicator to keep start sector unchanged
|
||||||
|
if ( ORIG_BEFORE == spinbutton_before .get_value_as_int() )
|
||||||
|
selected_partition .strict_start = TRUE ;
|
||||||
|
|
||||||
return selected_partition ;
|
return selected_partition ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -314,7 +314,7 @@ bool GParted_Core::snap_to_cylinder( const Device & device, Partition & partitio
|
||||||
} else {
|
} else {
|
||||||
diff = partition .sector_start % device .cylsize ;
|
diff = partition .sector_start % device .cylsize ;
|
||||||
}
|
}
|
||||||
if ( diff )
|
if ( diff && ! partition .strict_start )
|
||||||
{
|
{
|
||||||
if ( diff < ( device .cylsize / 2 ) )
|
if ( diff < ( device .cylsize / 2 ) )
|
||||||
partition .sector_start -= diff ;
|
partition .sector_start -= diff ;
|
||||||
|
@ -1242,7 +1242,10 @@ bool GParted_Core::resize_move( const Device & device,
|
||||||
Partition & partition_new,
|
Partition & partition_new,
|
||||||
OperationDetail & operationdetail )
|
OperationDetail & operationdetail )
|
||||||
{
|
{
|
||||||
if ( partition_new .strict || calculate_exact_geom( partition_old, partition_new, operationdetail ) )
|
if ( partition_new .strict
|
||||||
|
|| partition_new .strict_start
|
||||||
|
|| calculate_exact_geom( partition_old, partition_new, operationdetail )
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if ( partition_old .type == TYPE_EXTENDED )
|
if ( partition_old .type == TYPE_EXTENDED )
|
||||||
return resize_move_partition( partition_old, partition_new, operationdetail ) ;
|
return resize_move_partition( partition_old, partition_new, operationdetail ) ;
|
||||||
|
@ -1299,8 +1302,8 @@ bool GParted_Core::move( const Device & device,
|
||||||
//(maybe i should do some reading on how non-msdos disklabels deal with metadata....)
|
//(maybe i should do some reading on how non-msdos disklabels deal with metadata....)
|
||||||
if ( partition_new .sector_start < partition_old .sector_start )
|
if ( partition_new .sector_start < partition_old .sector_start )
|
||||||
{
|
{
|
||||||
if ( resize_move_partition( partition_old, partition_new, operationdetail ) )
|
if ( resize_move_partition( partition_old, partition_new, operationdetail ) )
|
||||||
{
|
{
|
||||||
if ( ! move_filesystem( partition_old, partition_new, operationdetail ) )
|
if ( ! move_filesystem( partition_old, partition_new, operationdetail ) )
|
||||||
{
|
{
|
||||||
operationdetail .add_child( OperationDetail( _("rollback last change to the partition table") ) ) ;
|
operationdetail .add_child( OperationDetail( _("rollback last change to the partition table") ) ) ;
|
||||||
|
@ -1315,13 +1318,13 @@ bool GParted_Core::move( const Device & device,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
succes = move_filesystem( partition_old, partition_new, operationdetail ) &&
|
succes = move_filesystem( partition_old, partition_new, operationdetail ) &&
|
||||||
resize_move_partition( partition_old, partition_new, operationdetail ) ;
|
resize_move_partition( partition_old, partition_new, operationdetail ) ;
|
||||||
|
|
||||||
succes = succes &&
|
succes = succes &&
|
||||||
update_bootsector( partition_new, operationdetail ) &&
|
update_bootsector( partition_new, operationdetail ) &&
|
||||||
check_repair_filesystem( partition_new, operationdetail ) &&
|
check_repair_filesystem( partition_new, operationdetail ) &&
|
||||||
maximize_filesystem( partition_new, operationdetail ) ;
|
maximize_filesystem( partition_new, operationdetail ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
return succes ;
|
return succes ;
|
||||||
|
@ -1581,10 +1584,14 @@ bool GParted_Core::resize_move_partition( const Partition & partition_old,
|
||||||
|
|
||||||
if ( lp_partition )
|
if ( lp_partition )
|
||||||
{
|
{
|
||||||
PedGeometry *geom = ped_geometry_new( lp_device,
|
if ( partition_new .strict || partition_new .strict_start ) {
|
||||||
partition_new .sector_start,
|
PedGeometry *geom = ped_geometry_new( lp_device,
|
||||||
partition_new .get_length() ) ;
|
partition_new .sector_start,
|
||||||
constraint = ped_constraint_exact( geom ) ;
|
partition_new .get_length() ) ;
|
||||||
|
constraint = ped_constraint_exact( geom ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
constraint = ped_constraint_any( lp_device ) ;
|
||||||
|
|
||||||
if ( constraint )
|
if ( constraint )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue