added column 'check' use halproperty 'storage.automount_enabled_hint'
* include/Dialog_Filesystems.h, src/Dialog_Filesystems.cc: added column 'check' * include/GParted_Core.h, src/GParted_Core.cc: use halproperty 'storage.automount_enabled_hint' instead of pmount to disable automounting.
This commit is contained in:
parent
3a918a337b
commit
7f187d644c
|
@ -1,3 +1,12 @@
|
||||||
|
2006-04-03 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
|
||||||
|
* include/Dialog_Filesystems.h,
|
||||||
|
src/Dialog_Filesystems.cc: added column 'check'
|
||||||
|
* include/GParted_Core.h,
|
||||||
|
src/GParted_Core.cc: use halproperty
|
||||||
|
'storage.automount_enabled_hint' instead of pmount to disable
|
||||||
|
automounting.
|
||||||
|
|
||||||
2006-04-02 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
2006-04-02 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
|
||||||
* include/GParted_Core.h,
|
* include/GParted_Core.h,
|
||||||
|
|
|
@ -51,6 +51,7 @@ private:
|
||||||
Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > shrink ;
|
Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > shrink ;
|
||||||
Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > move ;
|
Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > move ;
|
||||||
Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > copy ;
|
Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > copy ;
|
||||||
|
Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > check ;
|
||||||
|
|
||||||
treeview_filesystems_Columns()
|
treeview_filesystems_Columns()
|
||||||
{
|
{
|
||||||
|
@ -62,6 +63,7 @@ private:
|
||||||
add( shrink ) ;
|
add( shrink ) ;
|
||||||
add( move ) ;
|
add( move ) ;
|
||||||
add( copy ) ;
|
add( copy ) ;
|
||||||
|
add( check ) ;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ private:
|
||||||
GParted::FILESYSTEM get_filesystem() ;
|
GParted::FILESYSTEM get_filesystem() ;
|
||||||
bool check_device_path( const Glib::ustring & device_path ) ;
|
bool check_device_path( const Glib::ustring & device_path ) ;
|
||||||
void set_device_partitions( Device & device ) ;
|
void set_device_partitions( Device & device ) ;
|
||||||
void disable_automount( const std::vector<Partition> & partitions ) ;
|
void disable_automount( const Device & device ) ;
|
||||||
void read_mountpoints_from_file( const Glib::ustring & filename,
|
void read_mountpoints_from_file( const Glib::ustring & filename,
|
||||||
std::map< Glib::ustring, std::vector<Glib::ustring> > & map ) ;
|
std::map< Glib::ustring, std::vector<Glib::ustring> > & map ) ;
|
||||||
void init_maps() ;
|
void init_maps() ;
|
||||||
|
@ -94,7 +94,7 @@ private:
|
||||||
void set_proper_filesystem( const FILESYSTEM & filesystem ) ;
|
void set_proper_filesystem( const FILESYSTEM & filesystem ) ;
|
||||||
bool set_partition_type( const Partition & partition,
|
bool set_partition_type( const Partition & partition,
|
||||||
std::vector<OperationDetails> & operation_details ) ;
|
std::vector<OperationDetails> & operation_details ) ;
|
||||||
bool wait_for_node( const Glib::ustring & node, bool disable_automount = false ) ;
|
bool wait_for_node( const Glib::ustring & node ) ;
|
||||||
bool erase_filesystem_signatures( const Partition & partition ) ;
|
bool erase_filesystem_signatures( const Partition & partition ) ;
|
||||||
|
|
||||||
bool open_device( const Glib::ustring & device_path ) ;
|
bool open_device( const Glib::ustring & device_path ) ;
|
||||||
|
@ -119,8 +119,9 @@ private:
|
||||||
std::map< Glib::ustring, Glib::ustring >::iterator iter ;
|
std::map< Glib::ustring, Glib::ustring >::iterator iter ;
|
||||||
std::map< Glib::ustring, std::vector<Glib::ustring> >::iterator iter_mp ;
|
std::map< Glib::ustring, std::vector<Glib::ustring> >::iterator iter_mp ;
|
||||||
|
|
||||||
std::vector<Glib::ustring> pmount_locked_partitions ;
|
//disabling automount stuff
|
||||||
Glib::ustring PID ;
|
bool DISABLE_AUTOMOUNT ;
|
||||||
|
std::map<Glib::ustring, Glib::ustring> disabled_automount_devices ;
|
||||||
|
|
||||||
PedDevice *lp_device ;
|
PedDevice *lp_device ;
|
||||||
PedDisk *lp_disk ;
|
PedDisk *lp_disk ;
|
||||||
|
|
|
@ -38,6 +38,7 @@ Dialog_Filesystems::Dialog_Filesystems()
|
||||||
treeview_filesystems .append_column( _("Shrink"), treeview_filesystems_columns .shrink );
|
treeview_filesystems .append_column( _("Shrink"), treeview_filesystems_columns .shrink );
|
||||||
treeview_filesystems .append_column( _("Move"), treeview_filesystems_columns .move );
|
treeview_filesystems .append_column( _("Move"), treeview_filesystems_columns .move );
|
||||||
treeview_filesystems .append_column( _("Copy"), treeview_filesystems_columns .copy );
|
treeview_filesystems .append_column( _("Copy"), treeview_filesystems_columns .copy );
|
||||||
|
treeview_filesystems .append_column( _("Check"), treeview_filesystems_columns .check );
|
||||||
|
|
||||||
treeview_filesystems .get_selection() ->set_mode( Gtk::SELECTION_NONE );
|
treeview_filesystems .get_selection() ->set_mode( Gtk::SELECTION_NONE );
|
||||||
get_vbox() ->pack_start( treeview_filesystems ) ;
|
get_vbox() ->pack_start( treeview_filesystems ) ;
|
||||||
|
@ -46,7 +47,7 @@ Dialog_Filesystems::Dialog_Filesystems()
|
||||||
icon_yes = render_icon( Gtk::Stock::APPLY, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
|
icon_yes = render_icon( Gtk::Stock::APPLY, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
|
||||||
icon_no = render_icon( Gtk::Stock::CANCEL, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
|
icon_no = render_icon( Gtk::Stock::CANCEL, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
|
||||||
|
|
||||||
add_button( Gtk::Stock::REFRESH, Gtk::RESPONSE_OK );
|
add_button( Gtk::Stock::REFRESH, Gtk::RESPONSE_OK ) ;
|
||||||
add_button( Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE ) ->grab_focus() ;
|
add_button( Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE ) ->grab_focus() ;
|
||||||
show_all_children() ;
|
show_all_children() ;
|
||||||
}
|
}
|
||||||
|
@ -71,6 +72,7 @@ void Dialog_Filesystems::Show_Filesystem( const FS & fs )
|
||||||
treerow[ treeview_filesystems_columns .shrink ] = fs .shrink ? icon_yes : icon_no ;
|
treerow[ treeview_filesystems_columns .shrink ] = fs .shrink ? icon_yes : icon_no ;
|
||||||
treerow[ treeview_filesystems_columns .move ] = fs .move ? icon_yes : icon_no ;
|
treerow[ treeview_filesystems_columns .move ] = fs .move ? icon_yes : icon_no ;
|
||||||
treerow[ treeview_filesystems_columns .copy ] = fs .copy ? icon_yes : icon_no ;
|
treerow[ treeview_filesystems_columns .copy ] = fs .copy ? icon_yes : icon_no ;
|
||||||
|
treerow[ treeview_filesystems_columns .check ] = fs .check ? icon_yes : icon_no ;
|
||||||
}
|
}
|
||||||
|
|
||||||
Dialog_Filesystems::~Dialog_Filesystems()
|
Dialog_Filesystems::~Dialog_Filesystems()
|
||||||
|
|
|
@ -51,8 +51,7 @@ GParted_Core::GParted_Core()
|
||||||
lp_disk = NULL ;
|
lp_disk = NULL ;
|
||||||
lp_partition = NULL ;
|
lp_partition = NULL ;
|
||||||
p_filesystem = NULL ;
|
p_filesystem = NULL ;
|
||||||
|
DISABLE_AUTOMOUNT = false ;
|
||||||
PID = Utils::num_to_str( getpid() ) ;
|
|
||||||
|
|
||||||
ped_exception_set_handler( ped_exception_handler ) ;
|
ped_exception_set_handler( ped_exception_handler ) ;
|
||||||
|
|
||||||
|
@ -65,6 +64,15 @@ GParted_Core::GParted_Core()
|
||||||
//throw libpartedversion to the stdout to see which version is actually used.
|
//throw libpartedversion to the stdout to see which version is actually used.
|
||||||
std::cout << "======================" << std::endl ;
|
std::cout << "======================" << std::endl ;
|
||||||
std::cout << "libparted : " << ped_get_version() << std::endl ;
|
std::cout << "libparted : " << ped_get_version() << std::endl ;
|
||||||
|
|
||||||
|
//see if we can disable automounting
|
||||||
|
if ( ! Glib::find_program_in_path( "hal-find-by-property" ) .empty() &&
|
||||||
|
! Glib::find_program_in_path( "hal-set-property" ) .empty() )
|
||||||
|
{
|
||||||
|
DISABLE_AUTOMOUNT = true ;
|
||||||
|
std::cout << "automounting disabled" << std::endl ;
|
||||||
|
}
|
||||||
|
|
||||||
std::cout << "======================" << std::endl ;
|
std::cout << "======================" << std::endl ;
|
||||||
|
|
||||||
//initialize filesystemlist
|
//initialize filesystemlist
|
||||||
|
@ -156,7 +164,9 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
|
||||||
|
|
||||||
std::sort( device_paths .begin(), device_paths .end() ) ;
|
std::sort( device_paths .begin(), device_paths .end() ) ;
|
||||||
}
|
}
|
||||||
|
//FIXME: i guess this is the correct place to remove devices from disabled_automount_devices..
|
||||||
|
//this is necessary for people who remove and replug their usbdevice without restarting gparted
|
||||||
|
//all devices not in device_paths yet availabl in disable_automount_devices should be removed..
|
||||||
for ( unsigned int t = 0 ; t < device_paths .size() ; t++ )
|
for ( unsigned int t = 0 ; t < device_paths .size() ; t++ )
|
||||||
{
|
{
|
||||||
if ( check_device_path( device_paths[ t ] ) &&
|
if ( check_device_path( device_paths[ t ] ) &&
|
||||||
|
@ -186,11 +196,8 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
|
||||||
temp_device .disktype = lp_disk ->type ->name ;
|
temp_device .disktype = lp_disk ->type ->name ;
|
||||||
temp_device .max_prims = ped_disk_get_max_primary_partition_count( lp_disk ) ;
|
temp_device .max_prims = ped_disk_get_max_primary_partition_count( lp_disk ) ;
|
||||||
|
|
||||||
|
disable_automount( temp_device ) ;
|
||||||
set_device_partitions( temp_device ) ;
|
set_device_partitions( temp_device ) ;
|
||||||
|
|
||||||
if ( ! Glib::find_program_in_path( "pmount" ) .empty() )
|
|
||||||
disable_automount( temp_device .partitions ) ;
|
|
||||||
|
|
||||||
set_mountpoints( temp_device .partitions ) ;
|
set_mountpoints( temp_device .partitions ) ;
|
||||||
set_used_sectors( temp_device .partitions ) ;
|
set_used_sectors( temp_device .partitions ) ;
|
||||||
|
|
||||||
|
@ -439,21 +446,34 @@ void GParted_Core::set_device_partitions( Device & device )
|
||||||
insert_unallocated( device .get_path(), device .partitions, 0, device .length -1, false ) ;
|
insert_unallocated( device .get_path(), device .partitions, 0, device .length -1, false ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GParted_Core::disable_automount( const std::vector<Partition> & partitions )
|
void GParted_Core::disable_automount( const Device & device )
|
||||||
{
|
{
|
||||||
for ( unsigned int t = 0 ; t < partitions .size() ; t++ )
|
if ( DISABLE_AUTOMOUNT )
|
||||||
{
|
{
|
||||||
if ( partitions[ t ] .type == GParted::TYPE_EXTENDED )
|
if ( disabled_automount_devices .find( device .get_path() ) == disabled_automount_devices .end() )
|
||||||
disable_automount( partitions[ t ] .logicals ) ;
|
|
||||||
|
|
||||||
if ( partitions[ t ] .type != GParted::TYPE_UNALLOCATED &&
|
|
||||||
std::find( pmount_locked_partitions .begin(),
|
|
||||||
pmount_locked_partitions .end(),
|
|
||||||
partitions[ t ] .get_path() ) == pmount_locked_partitions .end() )
|
|
||||||
{
|
{
|
||||||
Utils::execute_command( "pmount --lock " + partitions[ t ] .get_path() + " " + PID ) ;
|
//get HAL device-id
|
||||||
|
Glib::ustring hal_id, error ;
|
||||||
|
bool found = false ;
|
||||||
|
|
||||||
pmount_locked_partitions .push_back( partitions[ t ] .get_path() ) ;
|
for ( unsigned int t = 0 ; t < device .get_paths() .size() && ! found ; t++ )
|
||||||
|
found = ! Utils::execute_command(
|
||||||
|
"hal-find-by-property --key 'block.device' --string '" +
|
||||||
|
device .get_paths()[ t ] + "'",
|
||||||
|
hal_id,
|
||||||
|
error ) ;
|
||||||
|
|
||||||
|
if ( found )
|
||||||
|
{
|
||||||
|
if ( ! hal_id .empty() && hal_id[ hal_id .length() -1 ] == '\n' )
|
||||||
|
hal_id .erase( hal_id .length() -1, 1 ) ;
|
||||||
|
|
||||||
|
Utils::execute_command( "hal-set-property --udi '" + hal_id +
|
||||||
|
"' --key 'storage.automount_enabled_hint' --bool false" ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//found or not found.. we're done with this device..
|
||||||
|
disabled_automount_devices[ device. get_path() ] = hal_id ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -686,10 +706,6 @@ bool GParted_Core::Delete( const Partition & partition, std::vector<OperationDet
|
||||||
lp_disk,
|
lp_disk,
|
||||||
(partition .sector_end + partition .sector_start) / 2 ) ;
|
(partition .sector_end + partition .sector_start) / 2 ) ;
|
||||||
|
|
||||||
//remove the lock (if it exists)
|
|
||||||
if ( ! Glib::find_program_in_path( "pmount" ) .empty() )
|
|
||||||
Utils::execute_command( "pmount --unlock " + partition .get_path() + " " + PID ) ;
|
|
||||||
|
|
||||||
return_value = ped_disk_delete_partition( lp_disk, lp_partition ) && commit() ;
|
return_value = ped_disk_delete_partition( lp_disk, lp_partition ) && commit() ;
|
||||||
sleep( 1 ) ; //give the kernel some time to reread the partitiontable
|
sleep( 1 ) ; //give the kernel some time to reread the partitiontable
|
||||||
|
|
||||||
|
@ -1026,7 +1042,7 @@ bool GParted_Core::create_empty_partition( Partition & new_partition,
|
||||||
(
|
(
|
||||||
new_partition .type == GParted::TYPE_EXTENDED ||
|
new_partition .type == GParted::TYPE_EXTENDED ||
|
||||||
(
|
(
|
||||||
wait_for_node( new_partition .get_path(), ! Glib::find_program_in_path( "pmount" ) .empty() ) &&
|
wait_for_node( new_partition .get_path() ) &&
|
||||||
erase_filesystem_signatures( new_partition )
|
erase_filesystem_signatures( new_partition )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -1269,38 +1285,21 @@ bool GParted_Core::set_partition_type( const Partition & partition,
|
||||||
return return_value ;
|
return return_value ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GParted_Core::wait_for_node( const Glib::ustring & node, bool disable_automount )
|
bool GParted_Core::wait_for_node( const Glib::ustring & node )
|
||||||
{
|
{
|
||||||
//we'll loop for 10 seconds or till 'node' appeares...
|
//we'll loop for 10 seconds or till 'node' appeares...
|
||||||
if ( disable_automount )
|
for( short t = 0 ; t < 50 ; t++ )
|
||||||
{
|
{
|
||||||
for( short t = 0 ; t < 50 ; t++ )
|
//FIXME: find a better way to check if a file exists
|
||||||
|
//the current way is suboptimal (at best)
|
||||||
|
if ( Glib::file_test( node, Glib::FILE_TEST_EXISTS ) )
|
||||||
{
|
{
|
||||||
if ( ! Utils::execute_command( "pmount --lock " + node + " " + PID ) )
|
//same issue
|
||||||
{
|
sleep( 2 ) ;
|
||||||
//apperantly the node isn't available immediatly after file_test returns succesfully :/
|
return true ;
|
||||||
sleep( 2 ) ;
|
|
||||||
return true ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
usleep( 200000 ) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for( short t = 0 ; t < 50 ; t++ )
|
|
||||||
{
|
|
||||||
//FIXME: find a better way to check if a file exists
|
|
||||||
//the current way is suboptimal (at best)
|
|
||||||
if ( Glib::file_test( node, Glib::FILE_TEST_EXISTS ) )
|
|
||||||
{
|
|
||||||
//same issue
|
|
||||||
sleep( 2 ) ;
|
|
||||||
return true ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
usleep( 200000 ) ; //200 milliseconds
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
usleep( 200000 ) ; //200 milliseconds
|
||||||
}
|
}
|
||||||
|
|
||||||
return false ;
|
return false ;
|
||||||
|
@ -1394,9 +1393,6 @@ GParted_Core::~GParted_Core()
|
||||||
{
|
{
|
||||||
if ( p_filesystem )
|
if ( p_filesystem )
|
||||||
delete p_filesystem ;
|
delete p_filesystem ;
|
||||||
|
|
||||||
for ( unsigned int t = 0 ; t < pmount_locked_partitions .size() ; t++ )
|
|
||||||
Utils::execute_command( "pmount --unlock " + pmount_locked_partitions[ t ] + " " + PID ) ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} //GParted
|
} //GParted
|
||||||
|
|
Loading…
Reference in New Issue